ServletRequest

Servlet程序通过ServletRequest封装获取到的HTTP请求数据

Inheritance



  1. web-server(如tomcat)需要解析请求数据,封装为ServletRequest对象,并且创建ServletRequest对象传递到service方法中
  2. 使用该对象,查阅JavaEE API文档的HttpServletRequest接口

Get Request Data

请求数据分为3部分:

  1. 请求行:GET/request-demo/req1?username=zhangsan HTTP/1.1

    • String getMethod():获取请求方式:GET
    • String getContextPath():获取虚拟目录(项目访问路径):/request-demo
    • StringBuffer getRequestURL():获取URL(统一资源定位符):http://localhost:8080/request-demo/req
    • String getRequestURI():获取URI(统一资源标识符):/request-demo/req1
    • String getQueryString():获取请求参数(GET方式):username=zhangsan&password=123
  2. 请求头:User-Agent:Mozilla/5.0 Chrome/91.0.4472.106

    • String getHeader(String name):根据请求头名称,获取值
  3. 请求体:username=superbaby&password=123

    • ServletlnputStream getlnputStream():获取字节输入流
    • BufferedReader getReader():获取字符输入流

Generic method to get the request parameters

请求参数获取方式:



@WebServlet("/reqDemo3")
public class RequestDemo3 extends HttpServlet{
	@Override
	protected void doGet(HttpServletRequest req,HttpServletResponse resp){}
	@Override
	protected void doPost(HttpServletRequest req,HttpServletResponse resp){
	this.doGet(req,resp);
	}
}

Solve Chinese Parameters Garbled

使用低版本的tomcat作为web-server,请求参数如果存在中文数据,则会乱码

解决方案:

req.setCharacterEncoding("UTF-8");
new String(username.getBytes("ISO-8859-1"),"UTF-8");

URL编码

  1. 将字符串按照编码方式转为二进制
  2. 每个字节转为2个16进制数并在前边加上%

Tomcat8.0之后,已将GET请求乱码问题解决,设
置默认的解码方式为UTF-8

Forward

req.getRequestDispatcher("资源B路径").forward(req,resp);

请求转发特点: