java请求转发实例_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依次处理浏览器的请求,并相应给浏览器

5890742d702546f9ff8eb5f53678f383.png

关于范围对象的选择

ServletContext 应用范围极大,可以跨用户传递数据,整个webapp只有一个ServletContext对象

ServletRequest请求范围小,只能在同一个请求中传递数据【跨Servlet传递数据,需要使用请求转发技术】

优先选择使用ServletRequest传递数据

总结

请求转发可以跨Servlet(跨请求)传递数据,一次请求对应的Servlet中的request对象的数据,可以传递给请求转发的另一个Servlet的request对象

请求转发,是一次请求

本文地址:https://blog.csdn.net/qq_42179997/article/details/108036031

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值