请求转发与 request 域属性传递
在请求转发过程中,可以先将数据作为 request 对象的属性存放起来,然后再调用 forward 方法将请求转发到目标资源,目标资源可以通过 getAttribute 取出该数据。
存入属性并转发
setAttribute(String name, Object o) 方法用于将数据作为 request 对象的一个属性存放到 request 对象中,例如:request.setAttribute("data", data);
转发使用 getRequestDispatcher 方法,可以转发到另一个 Servlet,也可以转发到 JSP 页面。后续结合 JSTL 时,便可将数据呈现到 JSP 中。
在一个 Servlet 类中往 request 中写入属性并转发:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
request.setAttribute("data", "www.foxdevelop.com");
request.getRequestDispatcher("/other").forward(request, response);
}Code language: JavaScript (javascript)
在目标 Servlet 中读取属性
在另一个 Servlet 中通过 getAttribute 取出数据:
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.getWriter().append(request.getAttribute("data").toString());
}Code language: JavaScript (javascript)
说明:
forward转发是服务器端的操作,浏览器地址栏不会发生变化。转发过程中request和response对象被传递给目标资源,因此目标资源可以通过request.getAttribute获取转发前存入的属性值。
Previous: HttpServletRequest 对象
Next: Servlet 过滤器Filter