转发_转发重定向 - CSDN
精华内容
参与话题
  • 重定向和转发的区别

    万次阅读 多人点赞 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

    展开全文
  • Linux开启路由转发功能

    万次阅读 2018-06-06 17:25:53
    标记一下,今天想让一台Red Hat Enterprise Linux 7开通iptables的nat转发功能,找了半天。A服务器:192.168.30.20/24B服务器:192.168.30.1/24,eth0; 192.168.40.1/24,eth1C服务器:192.168.40.20/24目标:让A...

    标记一下,今天想让一台Red Hat Enterprise Linux 7开通iptables的nat转发功能,找了半天。

    A服务器:192.168.30.20/24

    B服务器:192.168.30.1/24,eth0;  192.168.40.1/24,eth1

    C服务器:192.168.40.20/24

    目标:让A可以ping和ssh到c机器。这就需要通过B服务器来跳转。

    操作过程:

    1、在B服务器上开启内核路由转发参数

    临时生效:

    echo "1" > /proc/sys/net/ipv4/ip_forward

    永久生效的话,需要修改sysctl.conf:

    net.ipv4.ip_forward = 1

    执行sysctl -p马上生效

    2、B服务器开启iptables nat转发

    iptables  -t nat  -A POSTROUTING  -s 192.168.30.0/24 -d 192.168.40.0/24 -o eth1 -j  MASQUERADE

    # 配置源地址30网段,目标地址40网段的地址转换,从eth1网卡出。

    iptables -t nat -A POSTROUTING -s 192.168.40.0/24  -d 192.168.30.0/24 -o eth0 -j MASQUERADE

    #配置源地址40网段,目标地址30网段的地址转换,从eth0网卡出。

    永久保存:iptables-save > /etc/sysconfig/iptables

    TIP:注意对应网卡。

    3、在A和C服务器上设置路由为B服务器IP

    A:  route add -net 192.168.40.0 netmask 255.255.255.0 gw 192.168.30.1

    C: route add -net 192.168.30.0 netmask 255.255.255.0 gw 192.168.40.1

    本文永久更新链接地址http://www.linuxidc.com/Linux/2016-12/138661.htm

    展开全文
  • 内网转发工具的使用

    千次阅读 2020-04-22 23:01:59
    内网转发 reGeorg结合proxychains代理链(HTTP隧道) EW(EarthWorm)结合proxychains代理链 EW正向代理 EW反向代理 Ssocks正向代理(Linux)​ Netsh实现端口转发 Netsh实现SSH到内网主机(远程端口转发) Netsh...
  • 路由转发route详解

    千次阅读 2019-10-21 20:28:19
        广播     路由     lo网卡 什么是广播 广播(BROADCAST): 一对多,局域网内的所有主机都可以广播,如果同一时间多个host同时广播,会造成信息干扰,实现同一广播域内的有效通信 ...
  • 第9期——直接转发和隧道转发

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

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

    万次阅读 2015-11-04 15:24:33
    1.本地转发和集中转发示意图 1.1本地转发 1.2集中转发 1.3 本地转发和集中转发对比列表 本地转发和集中转发的特点 2.1 本地转发的特点 利用瘦AP本地转发方式进行大规模组网,可以完全代替目前主要采用的...
  • Spring boot转发请求

    万次阅读 2018-09-08 10:10:12
    转发请求 Forward 表示转发到一个地址 ThymeleafViewResolver Spring MVC的视图解析器 作用,根据视图名,得到视图对象 createView 创建视图对象 viewName,方法的返回值 得到视图名 进行一些判断 如果...
  • 最近开发小程序遇到了一个需求,在页面内定义一个转发按钮,只能在页面内点击这个转发按钮才能触发转发,右上角转发隐藏掉。 实现效果: 页面内部转发按钮: 实现方法: 微信小程序官方文档中提到,使用wx....
  • 小程序携带参数转发

    万次阅读 2017-10-24 15:55:45
    小程序携带参数转发 在项目中有做一个需求,老师转发一张图片,学生登录的时候要获取老师转发图片中的信息,这个信息就要在转发的路径path中定义。 需要转发的图片: 上图绿色部分的文字需要发送一个request才能获取...
  • 交换机的三种转发模式

    万次阅读 2018-01-05 13:25:42
    交换机有三种转发模式: 1)直通式转发 是指交换机在收到数据帧后,不进行缓存和校验,而是直接转发到目的端口。 2)存储式转发 交换机首先在缓冲区存储接收到的整个数据帧,然后进行CRC校验,检查数据帧是否...
  • 微信小程序转发自定义图片

    万次阅读 2018-02-01 16:51:55
    需求:自定义一个按钮来实现转发功能,想使转发界面换成我自定义的图片而不是缩略图,并且转发时需要传一些参数。 必须慢慢调试 先改用系统的转发方法(onShareAppMessage)试试,发现居然有用,So 知道...
  • Windows开启路由转发

    万次阅读 2013-08-12 18:00:51
    Windows中IP路由转发功能缺省是关闭的。 关闭的话1) 打开注册表编辑器。 2) 在注册表编辑器中,定位以下注册表项: HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/ Services/Tcpip /Parameters 选择下面的项目: ...
  • nginx的纯代理转发简单配置

    万次阅读 2018-08-24 10:16:44
    worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; ...
  • 打开windows路由转发功能

    万次阅读 2013-09-15 08:59:28
    Windows中IP路由转发功能缺省是关闭的。 关闭的话 1) 打开注册表编辑器。 2) 在注册表编辑器中,定位以下注册表项: HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ Services\Tcpip \Parameters 选择下面的项目...
  • 怎样实现url隐形转发

    万次阅读 2015-06-19 21:08:33
    URL转发是域名解析的一种,因为被滥用,现在开放的URL转发服务已经越来越少了。一般的域名注册商都不提供域名URL转发功能。当前不需要转入域名,即可使用的开放URL转发的有dnspod和nat123,以下说说它们的使用方法。  ...
  • 微信小程序转发功能的实现

    万次阅读 2018-09-10 18:22:16
    前段时间做了一个微信小程序的项目,在项目中有实现过小程序的转发功能,这里给大家分享一下,有不对的地方勿喷 微信小程序官方文档:https://developers.weixin.qq.com/miniprogram/dev/api/ 实现小程序转发有二种...
  • openwrt端口转发功能

    万次阅读 2019-04-02 16:32:10
    在宿舍(局域网IP)远程控登录实验室PC(局域网IP)时,由于PC置于Openwrt下,无法直接远程连接,需要用到Openwrt的端口转发功能 第一步,允许防火墙端口转发功能(Network->Firewall) 即允许WAN口的外部接入...
1 2 3 4 5 ... 20
收藏数 614,081
精华内容 245,632
关键字:

转发