HttpServlet類的請求處理方法(doGet,doPost …)有2個參數。
javax.servlet.http.HttpRequestjavax.servlet.http.HttpResponse
例如,下面是HttpServlet.doGet()方法的聲明,可以看到有上面提到的2個參數
protected void doGet(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
}
接下來主要去了解HttpRequest類
簡介
HttpRequest類表示瀏覽器向web服務端發送的HTTP請求,瀏覽器發送的任何內容都可以通過HttpRequest訪問。
service方法中的request的類型是ServletRequest,而doGet/doPost方法的request類型HttpServletRequest,HttpServletRequest是ServletRequest的子接口。
運行流程

burp抓包(post請求)

獲得請求行
String getMethod() 獲得客戶端的請求方式
String getContextPath() web應用的名稱
request.getRemoteAddr() 獲得訪問的客戶端IP地址
獲得請求頭
請求頭是瀏覽器發送請求時的頭部信息,包含了一組名/值對,向服務端提供了諸如瀏覽器軟件版本,接受文件類型等信息。
可以從HttpRequest中訪問請求頭:
String contentLength = request.getHeader("Content-Length"); 從請求頭中讀取瀏覽器發送的內容長度。
獲得請求體
如果瀏覽器發送一個HTTP POST請求,請求參數可放在請求體中。實際上請求體中可以放任何數據,如JSON數據。
要訪問HTTP POST的請求體,可通過從HttpRequest中獲得InputStream,從中讀取請求體數據:
InputStream requestBodyInput = request.getInputStream();
String getParameter(String name)
String[] getParameterValues(String name)
Map<String,String[]> getParameterMap()
亂碼問題
解決post提交方式的亂碼:
request.setCharacterEncoding("UTF-8");
解決get提交的方式的亂碼:
parameter = new String(parameter.getbytes("iso8859-1"),"utf-8");
完成請求轉發
1、獲得請求轉發器----path是轉發的地址
RequestDispatcher getRequestDispatcher(String path)
2、通過轉發器對象轉發
requestDispathcer.forward(ServletRequest request, ServletResponse response)
借鑒於:https://blog.csdn.net/weixin_43705313/article/details/101191085
