JavaWeb学习笔记-08转发和重定向
Posted Moon&&Dragon
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaWeb学习笔记-08转发和重定向相关的知识,希望对你有一定的参考价值。
转发和重定向
1、转发
请求转发就是将浏览器发送给服务器的响应 转发给其他的servlet或jsp,本质上 还是同一个请求,相当于 浏览器只访问了一次。
如上图,浏览器只进行一次对服务器的请求,而在容器中,请求和响应被发送给其他的servlet
转发的特点:
- 转发是 一个请求响应,但是会涉及俩次,可以做 数据的共享
- 转发的浏览器 地址不会发生变化
- 由于 是一次请求和响应,所以 请求和响应会共享
常用的方法:
请求绑定数据
request.setAttribute("参数名",参数对象);
转发调度器
RequestDispatcher rd = res.getRequestDispatcher("/main");
转发
// forward里面的参数还是浏览器传入的请求和响应 rd.forward(resquest,response);
获取转发绑定的数据
req.getAttribute("参数名");
案例:
第一个servlet
@WebServlet("/first") public class FirstServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 设置请求编码 req.setCharacterEncoding("utf-8"); // 请求绑定参数 req.setAttribute("msg","这是第一个servlet绑定的数据"); // 请求转发到第二个servlet req.getRequestDispatcher("/second").forward(req,resp); } }
第二个servlet
@WebServlet("/second") public class SecondServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 获得第一个servlet请求绑定的数据 String msg = (String) req.getAttribute("msg"); // 页面打印 // 设置响应类型 resp.setContentType("text/html;charset=utf-8"); // 输出到页面 PrintWriter writer = resp.getWriter(); writer.println("这是第二个servlet,这是数据:"+msg); writer.close(); } }
结果
通过结果可以看出,我们的页面是第二个页面,确实获得了第一个servlet的参数,而且浏览器的地址还是first
2、重定向
重定向就是一个请求和响应只对应了一个servlet,servlet响应给浏览器,浏览器发送一个新的请求给另一个servlet,本质上是俩个请求,浏览器发送了俩次请求和响应
如上图,客户端先访问了servlet1,然后servlet1响应给客户端,应该去找servlet2,然后浏览器又向servlet2发送了请求
重定向的特点:
- 客户端 发送了俩次请求,不可以通过请求做数据的共享
- 浏览器的 地址会改变,会变为servlet2的地址
重定向方法:
// 响应给浏览器一个新的请求 ressponse.sendRedirect("main.jsp");
案例:
第一个servlet
@WebServlet("/first") public class FirstServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 响应给第二个servlet resp.sendRedirect("second"); } }
第二个servlet
@WebServlet("/second") public class SecondServlet extends HttpServlet { @Override protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { // 页面打印 // 设置响应类型 resp.setContentType("text/html;charset=utf-8"); // 输出到页面 PrintWriter writer = resp.getWriter(); writer.println("这是第二个servlet"); writer.close(); } }
结果
访问的first,浏览器的地址改变了
3、俩者的异同
相同点:
- 都对页面进行了跳转
不同点:
- 请求次数:转发时一次请求,重定向时俩次
- 转发2个servlet共用的是同一个request和response,可以通过request传递参数,但是重定向不能使用response传递参数
- 转发浏览器地址不会变,重定向会改变浏览器地址
以上是关于JavaWeb学习笔记-08转发和重定向的主要内容,如果未能解决你的问题,请参考以下文章