精华内容
下载资源
问答
  • 主要介绍了java 转发和重定向区别及实例代码的相关资料,需要的朋友可以参考下
  • 下面小编就为大家带来一篇简单谈谈SpringMVC转发和重定向的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 今天小编就为大家分享一篇对Django 转发和重定向的实例详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 转发和重定向的区别使用

    万次阅读 多人点赞 2019-03-19 15:26:24
    页面的跳转:转发 转发的原理 转发的方法 ...在Servlet中实现页面的跳转有两种方式:转发和重定向 什么是转发 概念 由服务器端进行的页面跳转 原理图 转发的方法 案例 需求 ​ 实现从OneServle...

    页面的跳转:转发

    1. 转发的原理
    2. 转发的方法

    疑问

    • 能否在OneServlet中保存值到请求域中,在另一个TwoServlet中打印出来?

      如果是不同的请求,不能取出来。如果是同一次请求是可以取出来的。
      

    转发与重定向的作用

    在Servlet中实现页面的跳转有两种方式:转发和重定向

    什么是转发

    概念

    由服务器端进行的页面跳转

    原理图

    在这里插入图片描述
    转发的方法
    在这里插入图片描述

    案例

    需求

    ​ 实现从OneServlet中转发到TwoServlet

    步骤

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

    效果

    在这里插入图片描述

    代码

    OneServlet
    package com.itheima.servlet;
    
    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;
    
    /**
     与请求域相关的方法
     */
    @WebServlet(name = "Demo6OneServlet", urlPatterns = "/one")
    public class Demo6OneServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.print("这是One<br/>");
            //向请求域中添加键和值
            request.setAttribute("name","Jack");
            request.setAttribute("age", 20);  //整数类型
            String name = (String) request.getAttribute("name");
            int age = (int) request.getAttribute("age");
            //从请求域中取出值
            out.print("名字:" + name + "<br/>");
            out.print("年龄:" +  age );
            out.print("<hr/>");
            //删除其中一个
            request.removeAttribute("age");
    
            //从请求域中取出值,直接输出Object对象
            out.print("名字:" + request.getAttribute("name") + "<br/>");
            out.print("年龄:" +  request.getAttribute("age") );
    
            System.out.println("这是one");
            //开始转发,参数是:要跳转到的地址
            request.getRequestDispatcher("/two").forward(request, response);
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request, response);
        }
    }
    
    
    TwoServlet
    package com.itheima.servlet;
    
    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;
    
    //从请求域中取出值
    @WebServlet(name = "Demo7TwoServlet", urlPatterns = "/two")
    public class Demo7TwoServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.print("这是Two,从请求域中取出one中的值:" + request.getAttribute("name"));
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request, response);
        }
    }
    
    

    转发的特点

    1. 地址栏不发生变化,显示的是上一个页面的地址
    2. 请求次数:只有1次请求
    3. 根目录:http://localhost:8080/项目地址/,包含了项目的访问地址
    4. 请求域中数据不会丢失

    转发使用哪个方法?

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

    页面的跳转:重定向

    1. 重定向原理
    2. 重定向的方法

    什么是重定向

    概念

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

    原理图

    在这里插入图片描述
    重定向方法
    在这里插入图片描述

    重定向案例

    需求

    从OneServlet重定向到TwoServlet

    步骤

    1. 在OneServlet中向请求域中添加键和值
    2. 使用重定向到TwoServlet,在TwoServlet中看能否取出请求域的值

    效果

    在这里插入图片描述

    代码

    OneServlet
    package com.itheima.servlet;
    
    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;
    
    /**
     与请求域相关的方法
     */
    @WebServlet(name = "Demo6OneServlet", urlPatterns = "/one")
    public class Demo6OneServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.print("这是One<br/>");
            //向请求域中添加键和值
            request.setAttribute("name","Jack");
            request.setAttribute("age", 20);  //整数类型
            String name = (String) request.getAttribute("name");
            int age = (int) request.getAttribute("age");
            //从请求域中取出值
            out.print("名字:" + name + "<br/>");
            out.print("年龄:" +  age );
            out.print("<hr/>");
            //删除其中一个
            request.removeAttribute("age");
    
            //从请求域中取出值,直接输出Object对象
            out.print("名字:" + request.getAttribute("name") + "<br/>");
            out.print("年龄:" +  request.getAttribute("age") );
    
            System.out.println("这是one");
            //开始转发,参数是:要跳转到的地址
            //request.getRequestDispatcher("/two").forward(request, response);
    
            //使用重定向
            response.sendRedirect("two");
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request, response);
        }
    }
    
    
    TwoServlet
    package com.itheima.servlet;
    
    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;
    
    //从请求域中取出值
    @WebServlet(name = "Demo7TwoServlet", urlPatterns = "/two")
    public class Demo7TwoServlet extends HttpServlet {
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            response.setContentType("text/html;charset=utf-8");
            PrintWriter out = response.getWriter();
            out.print("这是Two,从请求域中取出one中的值:" + request.getAttribute("name"));
        }
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            this.doPost(request, response);
        }
    }
    
    

    重定向的特点

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

    疑问

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

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

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

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

      无论转发或重定向后续的代码都会执行

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

    区别转发forward()重定向sendRedirect()
    根目录包含项目访问地址没有项目访问地址
    地址栏不会发生变化会发生变化
    哪里跳转服务器端进行的跳转浏览器端进行的跳转
    请求域中数据不会丢失会丢失
    展开全文
  • 主要介绍了详解spring mvc 请求转发和重定向,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 为什么有转发和重定向的区别

    为什么有普通转发和重定向的区别呢,带着这个问题思考:

     

    好处

    先说结论,重定向可以带来的好处:

    1.   网站需要用户先登录,才能访问主页,如知乎。不然一直在登录页面,如果没有这个重定向,那么手动改URL就可以访问其他不容易访问到的“资源”(PS:这个亲自我实验过,访问奥克兰大学网站时)
    2. 在登录页面时,如果使用了get和post请求(即先get后post格式,get是用户进入登录页面,而post是用户提交登录数据,如用户名,邮箱,密码等等)进行登录(登录逻辑一般为检查数据,查询数据库,正确则进入首页),而如果没有使用重定向,重新刷新浏览器,会看到上方弹出警告(要求在再次提交表单之前进行确认),原因是最后一次是post请求,刷新会在次提交数据(在登录页面提交的数据),我们不希望这个发生。所以现在的网站一般登录逻辑是get/重定向/post格式。ps:在学习《Flask web 开发》时了解到这个点。
    3.  普通请求/转发一般只能访问站内资源,而重定向可以访问其他站点资源(自己站点资源也可)。
    4. 一定程度上防止网络爬虫。网站可以重定向多次恶心爬虫,特别防止无头浏览器或者模拟浏览器时。

    目前只能理解到4个点,后续知道其他好处继续补充。。。。。。。。。。。。。

     

    普通转发和重定向的区别

    1 普通转发对于浏览器这个’Boss‘而言,只是一次请求与响应,中间做了多少事情,’Boss‘不关心,老板很闲。

    2 重定向对浏览器这个’Boss‘而言,就像私人秘书一样,做什么事情都需要通过’Boss‘签字,秘书会经常和老板汇报,所以至少需要2次请求与响应,老板很忙。

    展开全文
  • SpringMVC转发和重定向

    2021-04-28 16:11:43
    SpringMVC转发和重定向 @Controller public class ModelTest { @RequestMapping("/m/t1") public String test1(Model model){ model.addAttribute("msg","ModelTest"); //转发 return "hello"; //也可以写成...

    SpringMVC转发和重定向

    @Controller
    public class ModelTest {
    
        @RequestMapping("/m/t1")
        public String test1(Model model){
            model.addAttribute("msg","ModelTest");
    
            //转发
            return "hello";
            //也可以写成return "forward:/WEB-INF/jsp/hello.jsp";
            //注意:转发可以分为显式forward和不写forward,不写的时候会走视图解析器,
            //写了的时候则不走视图解析器的!!
    
    
            //重定向:在返回的地址前加上 redirect:
            // 重定向的话,代表浏览器重新访问服务器,不会走视图解析器。
            // 因为浏览器没有权限访问web-inf目录,故如果重定向地址是在web-inf下的页面,则会报错
            return "redirect:/index.jsp";
            //运行时将两个return中的其中一个注释掉
    
        }
    
    }
    

    短小精悍
    如果你们在学习SpringMVC转发和重定向遇到问题,上面代码中的注释提到了两者的使用规范以及一些注意事项。轻松看完,简单改错!

    另附上转发和重定向区别:

    1、请求次数:重定向是浏览器向服务器发送一个请求并收到响应后再次向一个新地址发出请求,转发是服务器收到请求后为了完成响应跳转到一个新的地址;重定向至少请求两次,转发请求一次;

    2、地址栏不同:重定向地址栏会发生变化,转发地址栏不会发生变化;

    3、是否共享数据:重定向两次请求不共享数据,转发一次请求共享数据(在request级别使用信息共享,使用重定向必然出错);

    4、跳转限制:重定向可以跳转到任意URL,转发只能跳转本站点资源;

    5、发生行为不同:重定向是客户端行为,转发是服务器端行为;

    WEB-INF目录解释下:

    WEB-INF是Java的WEB应用的安全目录。
    所谓安全就是客户端无法访问,只有服务端可以访问的目录,故不可以使用重定向访问WEB-INF目录下页面!
    如果想在页面中直接访问其中的文件,必须通过web.xml文件对要访问的文件进行相应映射才能访问。

    展开全文
  • 一、转发和重定向的区别 request.getRequestDispatcher()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;服务器内部转发,整个过程处于同一个请求当中。response.sendRedirect()则是完全的...

    一、转发和重定向的区别

            request.getRequestDispatcher()是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;服务器内部转发,整个过程处于同一个请求当中。response.sendRedirect()则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。不在同一个请求。重定向,实际上客户端会向服务器端发送两个请求。
    所以转发中数据的存取可以用request作用域:request.setAttribute(), request.getAttribute(),重定向是取不到request中的数据的。只能用session。

            forward()更加高效,在可以满足需要时,尽量使用RequestDispatcher.forward()方法。

    RequestDispatcher是通过调用HttpServletRequest对象的getRequestDispatcher()方法得到的,是属于请求对象的方法。
            sendRedirect()是HttpServletResponse对象的方法,即响应对象的方法,既然调用了响应对象的方法,那就表明整个请求过程已经结束了,服务器开始向客户端返回执行的结果。

            重定向可以跨域访问,而转发是在web服务器内部进行的,不能跨域访问。

    二、转发和重定向总结     

          1、转发使用的是getRequestDispatcher()方法;重定向使用的是sendRedirect();

          2、转发:浏览器URL的地址栏不变。重定向:浏览器URL的地址栏改变;

          3、转发是服务器行为,重定向是客户端行为;

          4、转发是浏览器只做了一次访问请求。重定向是浏览器做了至少两次的访问请求;

          5、转发2次跳转之间传输的信息不会丢失,重定向2次跳转之间传输的信息会丢失(request范围)。

    六、转发和重定向的选择     

          1、重定向的速度比转发慢,因为浏览器还得发出一个新的请求,如果在使用转发和重定向都无所谓的时候建议使用转发。

          2、因为转发只能访问当前WEB的应用程序,所以不同WEB应用程序之间的访问,特别是要访问到另外一个WEB站点上的资源的情况,这个时候就只能使用重定向了。 

       3、另外,重定向还有一个应用场景:避免在用户重新加载页面时两次调用相同的动作

    参考链接:https://www.cnblogs.com/summary-2017/p/10661738.html

    展开全文
  • 转发和重定向

    2021-07-14 11:39:29
    转发和重定向 // return "/site/admin/data"这种是返回到模板, // 模板交给dispatchersevlet去后续处理 return "/site/admin/data"; // forward转发到另一个请求而不是模板,再继续处理; return "forward:/data";...
  • 主要介绍了Python实现网络端口转发和重定向的方法,结合实例形式分析了Python基于threadingsocket模块实现端口转发重定向的具体操作技巧,需要的朋友可以参考下
  • java转发和重定向

    千次阅读 2018-12-26 15:46:27
    作为一名程序员,特别是java web开发的程序员,在使用servlet/jsp的时候,我们必须要知道实现页面跳转的两种方式的区别联系:即转发和重定向的区别。    1、RequestDispatcher.forward方法只能将请求转发给同...
  • SpringMVC中的转发和重定向 1.请求转发 A.使用MVC支持的HttpServlet进行数据转发 使用原始的HttpServlet是,controller层返回一个逻辑视图名称,MVC会调用视图解析器进行转发 @Controller @RequestMapping("/f") ...
  • Servlet中的转发和重定向总结 1. 关于项目下的WEB-INF目录 Web-INF目录下的资源文件安全性都很高。他不能直接通过浏览器来访问,访问它的方式只有一种:那就是通过服务器来访问。 所以WEB-INF目录下一般存放的是lib...
  • 1.转发只是在服务器端对同一个request进行传递,没有产生其它请求,转发的操作,浏览器并不知道 2.只有一个请求,因此跳转前后,可以共享保存在request的数据 3.转发操作,浏览器并不知道,所以地址栏是转发之前的...
  • 文章目录前言一、转发和重定向的区别?1.方式2.相同点3.不同点二、图文详解1.流程图2.代码测试总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,...
  • 转发和重定向区别详解 作为一名程序员,特别是java web开发的程序员,在使用servlet/jsp的时候,我们必须要知道实现页面跳转的两种方式的区别联系:即转发和重定向的区别。 1、RequestDispatcher.forward方法...
  • jsp的转发和重定向

    2020-09-29 16:34:12
    一:转发(forward) 1:执行forward之后依然是上一次请求。 2:forward的目标页面可以访问原请求的请求参数,因为依然是同义词请求,所有原请求的请求参数,request范围的属性全部存在。 3:地址栏里请求的URL不会...
  • 转发和重定向的区别

    2021-03-07 07:51:58
    转发和重定向的区别 / 转发 重定向 请求数量 使用转发时从始至终只发生了一个请求 使用重定向时 会重新生成一个新的请求 跳转限制 转发只能跳转到本站点的其他地方 使用重定向时可以跳转至任意URL ...
  • 请求转发和重定向区别

    千次阅读 2019-03-17 21:20:56
    一、转发和重定向区别详解 作为一名程序员,特别是java web开发的程序员,在使用servlet/jsp的时候,我们必须要知道实现页面跳转的两种方式的区别联系:即转发和重定向的区别。 RequestDispatcher.forward方法...
  • 文章目录1、通过SpringMVC来实现转发和重定向 - 无需视图解析器2、通过SpringMVC来实现转发和重定向 - 有视图解析器; 1、通过SpringMVC来实现转发和重定向 - 无需视图解析器 测试前,需要将视图解析器注释掉 @...
  • 请求转发和重定向 请求转发:getRequestDispatch(String path).forward(request,response) 重定向:sendRedirect(url) 1.请求转发相当于是张三找李四借钱,但是李四没钱,李四就跑去银行借钱,再把钱借给张三,这里...
  • 一、转发 转发是由服务器端进行的页面跳转 用法: 使用servlet的用法: //参数是要以跳转的地址/test1 request.getRequestDispatcher("/test1").forward(request, response); 在Springmvc中使用的 @...
  • 定义1.1 转发1.2 重定向2. springmvc实战代码3. 总结异同 前言 页面跳转的主要两种实现方式: 转发 重定向 1. 定义 1.1 转发 在客户端中发送请求到服务端,在服务端中有所匹配的servlet即可,之后servlet执行其...
  • Request请求转发和重定向 一,Request请求转发 (一),请求转发:在服务器内部的资源跳转的方式 我们在实际开发中,需要写不同的servlet,每个人servlet完成不同的功能,当我们访问Aservlet的时候, Aservlet实现部分...
  •   在Servlet响应跳转页面的时候涉及到的两个方式,分别是请求转发和重定向,二者都能够实现跳转页面的功能,各有优缺点。 请求转发   用户只需要像服务器提交一次请求,就可以跳转到指定的页面,使用的方法是: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 103,780
精华内容 41,512
关键字:

转发和重定向