HttpServletRequest接口
HttpServletRequest相关API
HttpServletRequest接口继承自ServletRequest接口,ServletRequest定义了一些取得通用信息的方法,如getParameter(),getInputStream()等方法。HttpServletRequest定义了HTTP取得相关信息的方法。
请求信息的取得
可以使用getQueryString()取得Http请求的查询字符串,也可以使用getParameter()方法指定请求参数名称来取得相应的值。如果一个请求参数有多个值,可以使用getParameterValues()取得一个String数组。
getParameterNames()返回一个Enumeration对象,包括所有请求参数的名称。
编码设置
对浏览器的响应编码设置:resp.setContentType("text/html;charset=utf-8");
设置请求对象处理字符串时的编码:req.setCharacterEncoding("utf-8");
设置jsp的编码:<%@ page pageEncoding="utf-8"%>
请求的转发与包含
如果想要把请求给别的Servlet/Jsp处理,可以使用使用HttpServletRequest的getRequestDispatcher()方法取得RequestDispatcher实例,运行时可以制定要转发请求的相对URL或绝对URL,取得实例后就可以使用forward()方法来转发请求,转法时将HttpServletRequest和HttpServletResponse对象作为参数传入,后续的Servlet/Jsp就可以继续使用这两个对象。
RequestDispatcher dispatcher = req.getRequestDispatcher("some.do");
dispatcher.forward(req, resp);
如果要执行forward()方法,表示目前的Servlet/Jsp不进行响应,而是将响应的职责交给下一个转发的对象。因此在只想forward之前,不能对浏览器有任何确认的回应,否则会出现IllegalStateException异常,任何未确认的输出在forward()之前会自动清除。
如果要在目前的Servlet/Jsp响应,中间想其他的Servlet/Jsp包括进来回应,则可以使用RequestDispatcher的include()方法,dispatcher.include(req, resp);
ServletRequest的属性
在请求的转发过程中,如果有必须共享的数据,可以将之设置为请求范围属性,或成为ServletRequest属性。方法是使用setAttribute(String name, Object o),通过getAttribute(String name)取得对应名字的属性。如:
int status = 0;
req.setAttribute("status", 0);//设置属性
System.out.println(req.getAttribute("status"));//取得属性