Servlet请求转发的步骤和实例
请求转发
一次请求Servlet对应的request对象,在此request中存储数据,可以在此request对象中取出;但是在另一次请求Servlet对应的request对象,是没有第一次请求时在request对象中添加的数据的
要解决这个不同请求对应的不同request对象之间传递,需要使用请求转发技术。
步骤
- 获取请求转发器对象
-
调用请求转发器的
forward()
方法即可完成转发
/*
/a路径对应AServlet,/b路径对应BServlet,
通过request对象的getRequestDispatcher方法获取请求转发器对象,
然后调用请求转发器对象的forward方法进行转发
以下代码是从AServlet转发到BServlet
*/ //获取请求转发器,以下转发器指向了BServlet RequestDispatcher requestDispatcher = request.getRequestDispatcher("/b"); //调用请求转发器的forward() requestDispatcher.forward(request,response);
实例
第一次请求AServlet,在AServlet中的request对象中存储数据后,通过请求转发,转发到BServlet,BServlet对应的request对象中包含了AServlet对应的request对象的数据,数据被传递了,实现了跨请求(跨Servlet)传递数据
/*AServlet*/ public class AServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { User admin = new User(111, "admin"); request.setAttribute("user",admin); //向request范围中存数据 //转发 request.getRequestDispatcher("/b").forward(request,response); } } /*BServlet*/ public class BServlet extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter writer = response.getWriter(); Object user = request.getAttribute("user"); //从request范围中取数据 writer.print(user); } }
转发过程
以上述实例为例
- 浏览器向AServlet发出访问请求;
- AServlet调用forward()方法,在服务器端将请求转发给BServlet;
- 最终由BServlet做出响应
特点
在浏览器端进行一次请求,服务器端将请求从一个Servlet转发给另一个Servlet…,浏览器端的地址不变,但是实际上可能后台是好几个Servlet依次处理浏览器的请求,并相应给浏览器
关于范围对象的选择
ServletContext 应用范围极大,可以跨用户传递数据,整个webapp只有一个ServletContext对象
ServletRequest请求范围小,只能在同一个请求中传递数据【跨Servlet传递数据,需要使用请求转发技术】
优先选择使用ServletRequest传递数据
总结
请求转发可以跨Servlet(跨请求)传递数据,一次请求对应的Servlet中的request对象的数据,可以传递给请求转发的另一个Servlet的request对象
请求转发,是一次请求
本文地址:https://blog.csdn.net/qq_42179997/article/details/108036031
推荐阅读
-
jsp和servlet中实现页面跳转的方式实例总结
-
javascript与jsp发送请求到servlet的几种方式实例
-
Android下通过httpClient发送GET和POST请求的实例代码
-
SEO 选择关键词的步骤和实例
-
Servlet请求转发的步骤和实例
-
Servlet中请求转发时forward()和include()的区别
-
Servlet中forward(请求转发)和redirect( 重定向)总结 forwardredirect
-
Jsp和Servlet中的请求转发分别如何实现
-
getRequestDispatcher 中请求转发和请求包含的使用说明
-
ngnix的简单转发请求之server和location配置详解