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转发和重定向的主要内容,如果未能解决你的问题,请参考以下文章

请求转发和重定向的区别

关于转发和重定向的路径问题!

SpringMVC--08 转发和重定向

SpringMVC--08 转发和重定向

SpringMVC--08 转发和重定向

java web开发中的转发和重定向问题的理解,要的是理解