精华内容
参与话题
问答
  • 重定向和转发的区别

    万次阅读 多人点赞 2017-11-13 11:40:38
    转自深入理解重定向和转发 作者 李社河import java.text.*; import java.util.*; import java.io.*; import javax.servlet.http.*; import javax.servlet.*; import com.bjpowernode.exam.model.*; import ...

    转自深入理解重定向和转发 作者 李社河

    import java.text.*;  
    import java.util.*;  
    import java.io.*;  
    import javax.servlet.http.*;  
    import javax.servlet.*;  
    
    import com.bjpowernode.exam.model.*;  
    import com.bjpowernode.exam.manager.*;  
    
    public class SearchStudentServlet extends HttpServlet {  
    
        public void doGet(HttpServletRequest request, HttpServletResponse response)   
        throws ServletException, IOException {  
            doPost(request, response);  
        }  
    
        public void doPost(HttpServletRequest request, HttpServletResponse response)  
        throws ServletException, IOException {  
    
            String sBeginDate = request.getParameter("beginDate");  
            String sEndDate = request.getParameter("endDate");  
    
            Date beginDate = new Date();  
            Date endDate = new Date();  
            try {  
                beginDate = new SimpleDateFormat("yyyy-MM-dd").parse(sBeginDate);  
                endDate = new SimpleDateFormat("yyyy-MM-dd").parse(sEndDate);  
             }catch(Exception e) {  
                e.printStackTrace();           
             }     
    
            StudentManager studentManager = new StudentManagerImpl();  
            List<Student> studentList = studentManager.findStudentList(beginDate, endDate);  
    
            //将学生列表设置到requet范围中  
            //request.setAttribute("student_list", studentList);  
    
            //转发,转发是在服务器端转发的,客户端是不知道的  
            //request.getRequestDispatcher("/student_list.jsp").forward(request, response);  
    
    
            //将studentList放到session中  
            HttpSession session = request.getSession();  
            session.setAttribute("student_list", studentList);  
    
            //重定向,不会共享request  
            //以下写法错误,该 "/"代表了8080端口  
            //response.sendRedirect("/student_list.jsp");  
            response.sendRedirect(request.getContextPath() + "/student_list.jsp");  
        }  
    }

    这个里面尝试了两种调到后面的Jsp方法,在servlet中调用转发、重定向的语句如下:

    实现转发:
    

    [html] view plain copy
    //转发,转发是在服务器端转发的,客户端是不知道的
    request.getRequestDispatcher(“/student_list.jsp”).forward(request, response);

    分析:请求转发是服务器内部把对一个request/response的处理权,移交给另外一个对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至C、D。 传输的信息不会丢失。

    实现重定向:
    
    //重定向,不会共享request  
    //以下写法错误,该 "/"代表了8080端口  
    response.sendRedirect("/student_list.jsp");  
    response.sendRedirect(request.getContextPath() + "/student_list.jsp");  

    深入(分析理解)

    转发过程
    
    
    客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的student_list.jsp,整个流程都是在服务器端完成的,而且是在同一个请求里面完成的,因此servlet和jsp共享的是同一个request,在servlet里面放的所有东西,在student_list中都能取出来,因此,student_list能把结果getAttribute()出来,getAttribute()出来后执行完把结果返回给客户端。整个过程是一个请求,一个响应。
    
    重定向过程
    
    客户发送一个请求到服务器,服务器匹配servlet,这都和请求转发一样,servlet处理完之后调用了sendRedirect()这个方法,这个方法是response的方法,所以,当这个servlet处理完之后,看到response.senRedirect()方法,立即向客户端返回这个响应,响应行告诉客户端你必须要再发送一个请求,去访问student_list.jsp,紧接着客户端受到这个请求后,立刻发出一个新的请求,去请求student_list.jsp,这里两个请求互不干扰,相互独立,在前面request里面setAttribute()的任何东西,在后面的request里面都获得不了。可见,在sendRedirect()里面是两个请求,两个响应。
    

    浅出(表象)

    转发
    
    当用RequestDispatcher请求转发后,地址栏为http://localhost:8080/test/TestServlet
    

    这真好应正了上面的分析,我们起初请求的就一个servlet,至于你服务器端怎么转,流程怎么样的,我客户端根本就不知道,我发了请求后我就等着响应,那你服务器那边愿意怎么转就怎么转,我客户端不关心也没法知道,所以当服务器端转发到jsp后,它把结果返回给客户端,客户端根本就不知道你这个结果是我真正访问的servlet产生的,还是由servlet转发后下一个组件产生的。

    重定向
    
    当用sendRedirect重定向后,地址栏为http://localhost:8080/test/student_list.jsp
    

    因为这个时候,客户端已经知道了他第二次请求的是student_list.jsp,服务器已经告诉客户端要去访问student_list.jsp了,所以地址栏里会显示想要访问的结果。

    总结

    转发在服务器端完成的;重定向是在客户端完成的
    转发的速度快;重定向速度慢
    转发的是同一次请求;重定向是两次不同请求
    转发不会执行转发后的代码;重定向会执行重定向之后的代码
    转发地址栏没有变化;重定向地址栏有变化
    转发必须是在同一台服务器下完成;重定向可以在不同的服务器下完成

    Forward是在服务器端的跳转,就是客户端一个请求发给服务器,服务器直接将请求相关的参数的信息原封不动的传递到该服务器的其他jsp或servlet去处理,而sendredirect是在客户端的跳转,服务器会返回给客户端一个响应报头和新的URL地址,原来的参数什么的信息如果服务器端没有特别处理就不存在了,浏览器会访问新的URL所指向的servlet或jsp,这可能不是原先服务器上的webservce了。
    
    展开全文
  • 转发和重定向区别详解 作为一名程序员,特别是java web开发的程序员,在使用servlet/jsp的时候,我们必须要知道实现页面跳转的两种方式的区别和联系:即转发和重定向的区别。 1、RequestDispatcher.forward方法...

    转发和重定向区别详解

            作为一名java web开发的程序员,在使用servlet/jsp的时候,我们必须要知道实现页面跳转的两种方式的区别和联系:即转发和重定向的区别。

          1、request.getRequestDispatcher().forward()方法,只能将请求转发给同一个WEB应用中的组件;而response.sendRedirect() 方法不仅可以重定向到当前应用程序中的其他资源,还可以重定向到同一个站点上的其他应用程序中的资源,甚至是使用绝对URL重定向到其他站点的资源。

    如果传递给response.sendRedirect()方法的相对URL以“/”开头,它是相对于整个WEB站点的根目录;如果创建request.getRequestDispatcher()对象时指定的相对URL以“/”开头,它是相对于当前WEB应用程序的根目录。

          2、重定向访问过程结束后,浏览器地址栏中显示的URL会发生改变,由初始的URL地址变成重定向的目标URL;请求转发过程结束后,浏览器地址栏保持初始的URL地址不变。

          3、HttpServletResponse.sendRedirect方法对浏览器的请求直接作出响应,响应的结果就是告诉浏览器去重新发出对另外一个URL的访问请求,这个过程好比有个绰号叫“浏览器”的人写信找张三借钱,张三回信说没有钱,让“浏览器”去找李四借,并将李四现在的通信地址告诉给了“浏览器”。于是,“浏览器”又按张三提供通信地址给李四写信借钱,李四收到信后就把钱汇给了“浏览器”。

    由此可见,重定向的时候,“浏览器”一共发出了两封信和收到了两次回复,“浏览器”也知道他借到的钱出自李四之手。

    request.getRequestDispatcher().forward()方法在服务器端内部将请求转发给另外一个资源,浏览器只知道发出了请求并得到了响应结果,并不知道在服务器程序内部发生了转发行为。这个过程好比绰号叫“浏览器”的人写信找张三借钱,张三没有钱,于是张三找李四借了一些钱,甚至还可以加上自己的一些钱,然后再将这些钱汇给了“浏览器”。

    由此可见,转发的时候,“浏览器”只发 出了一封信和收到了一次回复,他只知道从张三那里借到了钱,并不知道有一部分钱出自李四之手。

           4、request.getRequestDispatcher().forward()方法的调用者与被调用者之间共享相同的request对象和response对象,它们属于同一个访问请求和响应过程;

    而response.sendRedirect()方法调用者与被调用者使用各自的request对象和response对象,它们属于两个独立的访问请求和响应过程。对于同一个WEB应用程序的内部资源之间的跳转,特别是跳转之前要对请求进行一些前期预处理,并要使用HttpServletRequest.setAttribute方法传递预处理结果,那就应该使用request.getRequestDispatcher().forward()方法。不同WEB应用程序之间的重定向,特别是要重定向到另外一个WEB站点上的资源的情况,都应该使用response.sendRedirect()方法。

            5、无论是request.getRequestDispatcher().forward()方法,还是response.sendRedirect()方法,在调用它们之前,都不能有内容已经被实际输出到了客户端。如果缓冲区中已经有了一些内容,这些内容将被从缓冲区中。

    以上五点的论述来源于:点击查看原文论述

    转发和重定向的图解

    两种跳转获得对象的方式

    //获得转发对象getRequestDispatcher()
    HttpServletRequest(httpServletRequest).getRequestDispatcher
    ServletContext.getRequestDispatcher();
    
    //获得重定向对象sendRedirect()
    HttpServletResponse(httpServletResponse).sendRedirect();

    转发和跳转的小结

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

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

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

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

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

    转发和重定向的选择

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

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

    转发和重定向的应用场景

           在上面我已经提到了,转发是要比重定向快,因为重定向需要经过客户端,而转发没有。有时候,采用重定向会更好,若需要重定向到另外一个外部网站,则无法使用转发。另外,重定向还有一个应用场景:避免在用户重新加载页面时两次调用相同的动作。

           例如,当提交产品表单的时候,执行保存的方法将会被调用,并执行相应的动作;这在一个真实的应用程序中,很有可能将表单中的所有产品信息加入到数据库中。但是如果在提交表单后,重新加载页面,执行保存的方法就很有可能再次被调用。同样的产品信息就将可能再次被添加,为了避免这种情况,提交表单后,你可以将用户重定向到一个不同的页面,这样的话,这个网页任意重新加载都没有副作用;

           但是,使用重定向不太方便的地方是,使用它无法将值轻松地传递给目标页面。而采用转发,则可以简单地将属性添加到Model,使得目标视图可以轻松访问。由于重定向经过客户端,所以Model中的一切都会在重定向时丢失。但幸运的是,在Spring3.1版本以后,我们可以通过Flash属性,解决重定向时传值丢失的问题。

           要使用Flash属性,必须在Spring MVC的配置文件中添加一个<annotation-driven/>。然后,还必须再方法上添加一个新的参数类型:org.springframework.web.servlet.mvc.support.RedirectAttributes。

           如下所示:

    @RequestMapping(value="saveProduct",method=RequestMethod.POST)
    public String saveProduct(ProductForm productForm,RedirectAttributes redirectAttributes){
    
         //执行产品保存的业务逻辑等
      
         //传递参数
           redirectAttributes.addFlashAttribute("message","The product is saved successfully");
       
         //执行重定向
          return "redirect:/……";
    }

     

     

     

     

    展开全文
  • 可以转发到网店,淘宝,拍拍,有啊等,还可以做子目录转发(即所谓的全站转发),泛域名转发。 一些高级的应用,比如利用泛域名转发为博客用户提供二级域名等,均可实现。 更牛B的是隐藏转发时可以实现动态标题...

    首先免费,功能强大,所以推荐给大家。

    可以转发到网店,淘宝,拍拍,有啊等,还可以做子目录转发(即所谓的全站转发),泛域名转发。

    一些高级的应用,比如利用泛域名转发为博客用户提供二级域名等,均可实现。

    更牛B的是隐藏转发时可以实现动态标题(国内独此一家)。

    另外还有MFPad+版本,可以加keywords等参数。

    感兴趣的可以直接锤击这里http://www.mfpad.com/

    上图:

     

    此外,我再介绍下使用方法,供不会使用的白菜们参考:

    首先要注册一个米发账户了~~似乎废话了~~~然后添加域名,这里要主要,如果你想转发url.yourname.com,在添加域名的地方输入yourname.com就可以了.

     

    然后会自动跳转到管理页面,点添加转发记录

    添加完之后要同步数据到节点:(很重要)

    提交后查看你的节点信息,复制那个CNAME地址,登录到DNS控制面板做解析:

    然后就坐等DNS解析生效吧。

     

    如果觉得上面的步骤太多,可以直接切换到MFPad+版本,配置很简单的哦,无需同步操作,只需设置转发和解析,并且功能更强大。配图:

     

    这个转发设置够简单的吧,到此结束。米发 http://www.mfpad.com/

    转载于:https://www.cnblogs.com/shuziren/archive/2011/11/05/mfpad_recommend.html

    展开全文
  • 如何快速转发csdn博客?

    千次阅读 多人点赞 2017-02-14 21:25:31
    前言  对于喜欢逛CSDN的人来说,看别人的博客确实能够对自己有不小的提高,有时候看到特别好的博客想转载下载,但是不能一个字一个字的敲了,这时候我们就想快速转载别人的博客,把别人的博客移到自己的空间里面...
    来源:http://blog.csdn.net/bolu1234/article/details/51867099

    前言

      对于喜欢逛CSDN的人来说,看别人的博客确实能够对自己有不小的提高,有时候看到特别好的博客想转载下载,但是不能一个字一个字的敲了,这时候我们就想快速转载别人的博客,把别人的博客移到自己的空间里面,当然有人会说我们可以收藏博客啊,就不需要转载,(⊙o⊙)… 也对。。

    实现

      因为我自己当初想转载的时候却不知道该怎么转载,所以学会了之后就把方法写出来,帮助那些想转载却不知道该怎么转载的人(大神勿笑)。
      我们首先打开要转载的博客,然后鼠标右键就会出现下面的菜单:

    这里写图片描述

      我们点击【审查元素】,就会出现当前HTML页面的代码,如下:

    20150912104633872

      我们选中“article_content”从图片左边我们也可以看到,博客的内容已经被我们选中了,也就是我们想要转载的内容,然后右键,就会出现下面的菜单:

    这里写图片描述

      我们选中【Copy as HTML】就可以把其中要转载的内容复制下来,接下来的就是粘贴了。
      我们先新建一篇文章,打开markdown编辑器(因为在普通的编辑器我没有找到方法/(ㄒoㄒ)/~~),然后粘贴一下,就会出现下面的内容:

    20150912105209122

      可以在右边看到,博客内容已经被转载了,然后发表就可以了。

      最后特别要注意的是,我们发表的时候一定要选择【转载】,尊重原创!!

    小结

      因为自己当时也苦恼不知道该如何转载,所以我希望这篇文章能够帮助别人,虽然可能只是很简单的内容,但是,新手可能还真是不知道,—>比如我/(ㄒoㄒ)/~~

    展开全文
  • servlet1转发servlet2 servlet1 package cn.cfg.foward; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet....
  • 第9期——直接转发和隧道转发

    千次阅读 2018-06-08 13:28:34
    AC FIT AP架构的网络中存在两种报文,一类是AC管理控制AP的报文,称为管理报文(也叫控制报文),另一类是STA...业务报文存在两种转发方式,直接转发(本地转发)和隧道转发(集中转发),隧道转发方式下业务报文需...
  • 无线网络中本地转发和集中转发的不同,本地转发相当于不经过AC设备,直接在交换机中转走
  • 转发与重定向

    万次阅读 多人点赞 2018-07-27 15:03:47
    转发是服务器行为,重定向是客户端行为。转发耗时比重定向少。 转发——&gt;客户浏览器发送HTTP请求——&gt;web服务器接受请求——&gt;调用内部一个方法在容器内部完成请求处理和转发动作——&gt;...
  • SpringBoot中处理的转发重定向

    万次阅读 多人点赞 2018-11-06 23:15:45
    转发:一次请求,服务器内部调用另外的组件处理,request和response可以共用,有限制性,只能转发到本应用中的某些资源,页面或者controller请求 课可以访问WEB-INF目录下面的页面 重定向:两次请求,地址会改变...
  • 转发重定向的区别和使用

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

    千次阅读 热门讨论 2016-04-27 00:08:01
    servlet和servlet之间可以实现相互跳转,servlet的跳转可以将一个项目的模块进行划分,这样更加方便了开发人员的操作,servlet之间的跳转分为两种,一种是转发,英文名称Forward,另一种是重定向,英文名称Redirect...
  • 一篇文章搞懂转发重定向的区别

    千次阅读 2018-05-24 09:27:27
    一、转发 转发的原理,可以通过下图展示: 浏览器的请求发送给组件1,组件1经过一些处理之后,将request和response对象“传递”给组件2,由组件2继续处理,然后输出响应(当然,也可以继续向其他组件“传递”),...
  • JAVA 重定向转发

    千次阅读 2015-11-22 15:14:04
    一、调用方式我们知道,在servlet中调用转发重定向的语句如下:request.getRequestDispatcher("new.jsp").forward(request, response); //转发到new.jspresponse.sendRedirect("new.jsp"); //重定向到new.jsp在...
  • 页面的转发重定向

    千次阅读 2016-12-05 13:12:25
    请求转发导入部分: 生活中常常会遇到这样的例子,例如打电话找某个单位的某个人,一般电话会呼叫到单位的总台,然后总台会根据我们提供的分机号转接到对应的分机最后我们就能进行正常的通话,其实这就又一个电话...
  • servlet之转发重定向的区别

    千次阅读 2017-09-05 16:11:07
    转发(服务器端跳转): 一次请求 request.getRequestDispatcher("new.jsp").forward(request, response); 重定向(客户端跳转): 两...转发重定向: 1.转发是在服务器端完成,因此称为服务器端跳转  重定向是在客户端完成
  • spring mvc 请求转发重定向

    万次阅读 多人点赞 2014-02-12 16:15:29
    spring mvc3中的addFlashAttribute方法 ...   记得在spring mvc2中,当保存POJO到数据库后,要返回成功页面,如果这个时候要带点信息,  则要这样:  Java代码: ... //第三个参数(UserModel user
  • 深入浅出Java 重定向和请求转发的区别

    万次阅读 多人点赞 2014-04-08 07:58:08
    客户首先发送一个请求到服务器端,服务器端发现匹配的servlet,并指定它去执行,当这个servlet执行完之后,它要调用getRequestDispacther()方法,把请求转发给指定的student_list.jsp,整个流程都是在服务器端完成的...
  • [java] view plain copy  print? "font-family:FangSong_GB2312;font-size:18px;">import java.text.*;  import java.util.*;  import java.io.*;  import javax.servlet....import jav
  • 在上次的小案例中用到了转发的技术,今天来仔细聊聊转发重定向的问题,以及一些小知识的汇总。一、转发1、转发的概念转发主要是将浏览器的请求交给另外一个servlet或jsp来处理,借助request对象完成,在服务器内部...
  • Spring MVC 中重定向转发

    千次阅读 2017-12-15 17:16:29
    forward是服务器内部重定向,客户端并不知道服务器把你当前请求重定向到哪里去了,地址栏的url与你之前访问的url保持不变。redirect则是客户端重定向,是服务器将你当前请求返回,然后给个状态标示给你,告诉你应该...
  • servlet转发重定向基本概念与区别

    千次阅读 2016-07-01 09:29:52
    1.转发重定向概念介绍1.1转发 浏览器的请求发送给组件1,组件1经过一些处理之后,将request和response对象“传递”给组件2,由组件2继续处理,然后输出响应(当然,也可以继续向其他组件“传递”),这个传递的...
  • 转发: span style="font-family:FangSong_GB2312;font-size:18px;">//转发,转发是在服务器端转发的,客户端是不知道的  request.getRequestDispatcher("/student_list.jsp").forward(request, response)...
  • 转发重定向的区别与联系

    千次阅读 2016-06-28 19:16:53
    转发,可以传递request的值,重定向是重新发送请求,原来的请求参数值没有了。 转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。 重定向:以前的request中存放的变量全部失效,并进入一个新的...
  • JaveEE请求转发重定向的区别

    万次阅读 多人点赞 2017-10-06 10:14:08
    一、请求转发重定向 请求转发: request.getRequestDispatcher(URL地址).forward(request, response) 处理流程: 客户端发送请求,Servlet做出业务逻辑处理。Servlet调用forword()方法,服务器Servlet把目标...
  • java 重定向转发的区别response.sendredirect("http://www.foo.com/path/error.html");重定向转发有一个重要的不同:当使用转发时,JSP容器将使用一个内部的方法来调用目标页面,新的页面继续处理同一...
  • java转发重定向

    2018-12-26 15:46:27
    作为一名程序员,特别是java web开发的程序员,在使用servlet/jsp的时候,我们必须要知道实现页面跳转的两种方式的区别和联系:即转发重定向的区别。    1、RequestDispatcher.forward方法只能将请求转发给同...
  • 本文通过现实生活的例子引出重定向和请求转发,通过图解的方式讲解了整执行流程
  • Spring MVC 转发重定向

    万次阅读 多人点赞 2017-01-15 21:03:53
    本文介绍Spring MVC中转发重定向的区别。 转发重定向 开始Java EE时,可能会对转发(forward)和重定向(redirect)这个两个概念不清楚。本文先通过代码实例和运行结果图片感性 认识二者的区别,然后给出二者的...
  • 一、用sendRedirect方法实现请求重定向 sendRedirect方法用于生成302响应码和Location响应头,从而通知客户端去重新访问Location响应头中指定的URL。 RedirectServlet.java importjava.io.IOException; ....
  • 今天这里分享一下Servlet中的重定向转发,具体作用看似两个都可以用作跳转页面,但是其中还是有很大的差别的,这里就为大家简单讲解原理及直观的测试一下。 二.重定向 1.原理 简单解释过程:如图,浏览器A...

空空如也

1 2 3 4 5 ... 20
收藏数 1,029,373
精华内容 411,749
关键字:

转发