HttpServlet
类的请求处理方法(doGet
,doPost
…)有2个参数。
javax.servlet.http.HttpRequest
javax.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