1.介绍
(1)在同一个网站中,如果两个Servlet之间通过【请求转发】方式进行调用,彼此之间共享同一个请求协议包。而一个请求协议包只对应一个请求对象,因此servlet之间共享同一个请求对象,此时可以利用这个请求对象在两个Servlet之间实现数据共享。
(2) 在请求对象实现Servlet之间数据共享功能时,开发人员将请求对象称为【请求作用域对象】
2.代码实现:
需求:OneServlet通过请求转发申请调用TwoServlet时,需要给TwoServlet提供共享数据
OneServlet中的代码实现为:
public class OneServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setAttribute("name","王五"); req.getRequestDispatcher("/two").forward(req,resp); } }
通过请求对象req的属性setAttribute方法来存储我们的数据,然后调用请求转发到我们的TwoServlet类来为其提供我们的共享数据。
注意此处的存储的数据可以是任意类型。
TwoServlet中的实现代码为:
public class TwoServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/html;charset=utf-8"); String name=(String)req.getAttribute("name"); PrintWriter printWriter=resp.getWriter(); printWriter.print(name); printWriter.flush(); } }
在TwoServlet类中,我们通过请求对象的属性getAttribute方法来获取我们的共享数据。
注意:因为getAttribute方法的返回值为Object类型,所以当我们去使用变量去接收这个共享数据的时候,这个变量的数据类型要根据之前所存入的共享数据的数据类型来进行搭配,必要的时候需要进行强转。