zoukankan      html  css  js  c++  java
  • Servlet中转发和重定向的区别和使用(转载)

    转载地址:https://blog.csdn.net/weixin_40001125/article/details/88663468

    前言:

    学习Servlet的一个比较重要的点:那就是“转发(forward)和重定向(redirect)那么它们的区别是什么?

    页面的跳转:转发(forward)

    转发的方法:

    请求对象中常用的方法:

     

     

    概念:

      由服务端进行的页面跳转

    原理图:

    案例

    需求

    ​ 实现从OneServlet中转发到TwoServlet

    步骤

    1. OneServlet向请求域中添加了键和值,转发给TwoServlet
    2. TwoServlet就从请求域中取出键和值,打印到浏览器上。

    效果

    代码

    OneServlet:

    package cn.mixky.servlet_test;
    
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    /**
     * @author zhangzhixi
     * @version 1.0
     * @date 2021-8-17 22:37
     */
    @WebServlet(name = "OneServlet", urlPatterns = "/one")
    public class OneServlet extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.getRequestDispatcher("utf-8");
            response.setContentType("text/html;charset=utf-8");
            //向请求域中添加键和值
            request.setAttribute("name", "zhixi");
            request.setAttribute("age", 21);
    
            //开始转发,参数是:要跳转到的地址
            request.getRequestDispatcher("/two").forward(request, response);
        }
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request, response);
        }
    }

    TwoServlet:

    package cn.mixky.servlet_test;
    
    import javax.servlet.ServletException;
    import javax.servlet.annotation.WebServlet;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    /**
     * @author zhangzhixi
     * @version 1.0
     * @date 2021-8-17 22:48
     */
    @WebServlet(name = "TwoServlet.java", urlPatterns = "/two")
    public class TwoServlet extends HttpServlet {
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            request.getRequestDispatcher("utf-8");
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.print("这是Two,从请求域中取出one中的值<br>name:" + request.getAttribute("name") + "<br>");
            out.print("age:" + request.getAttribute("age") + "<br>");
    
        }
    
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request, response);
        }
    }
    

    转发的特点

    • 地址栏不发生变化,显示的是上一个页面的地址
    • 请求次数:只有1次请求
    • 根目录:http://localhost:8080/项目地址/,包含了项目的访问地址
    • 请求域中数据不会丢失
    • 转发使用哪个方法?

      request.getRequestDispatcher("/地址").forward(request, response);

    页面的跳转:重定向(redirect)

    概念:

      由浏览器端进行的页面跳转

    原理图:

    重定向案例

    需求

      从OneServlet重定向到TwoServlet

    步骤

    1. 在OneServlet中向请求域中添加键和值

    2. 使用重定向到TwoServlet,在TwoServlet中看能否取出请求域的值

    效果

     

    代码:

    需要注意的是,转发是从/当前

    重定向的特点

      地址栏:显示新的地址
      请求次数:2次
      根目录:http://localhost:8080/ 没有项目的名字
      请求域中的数据会丢失,因为是2次请求

    转发跟重定向的使用场景:

    问:什么时候使用转发,什么时候使用重定向?

      答:如果要保留请求域中的数据,使用转发,否则使用重定向。

    以后访问数据库,增删改使用重定向,查询使用转发。

    问:转发或重定向后续的代码是否还会运行?

      答:重定向跳转后必须加上return,要不然页面虽然跳转了,但是还会执行跳转后面的语句,转发是执行了跳转页面,下面的代码就不会在执行了

    小结:重定向和转发的区别:

  • 相关阅读:
    CAP.dll of dotnetcore
    GRPC 高性能 RPC 框架, 服务间通讯
    REST Client
    ERP Export
    ERP Update DataSource
    knockout js
    面试题目总结
    JavaScript Objiects and Prototypes
    PLS-00172: string literal too long
    字符串连接性能
  • 原文地址:https://www.cnblogs.com/zhangzhixi/p/15154753.html
Copyright © 2011-2022 走看看