• Servlet请求转发RequestDispatcher接口


    在Servlet中,利用RequestDispatcher对象,可以将请求转发给另外一个Servlet或JSP页面,甚至是HTML页面,来处理对请求的响应。

    一,RequestDispatcher接口方法简介  

         1,RequestDispatcher对象由Servlet容器来创建,封装一个由路径所标识的服务器资源。    

         2,RequestDispatcher接口中定义了二种方法用于请求转发:    

               forward(ServletRequest,ServletResponse)方法:      

                       将请求转发给服务器上另外一个Servlet,JSP页面,或者HTML文件      这个方法必须在响应被提交给客户端之前调用,否则抛出异常。      

                      方法调用后在响应中的没有提交的内容被自动消除。    

               include(ServletRequest,ServletResponse)方法 :     

                     用于在响应中包含其他资源(Servlet,JSP页面或HTML文件)的内容。      

                     即请求转发后,原先的Servlet还可以继续输出响应信息,转发到的Servlet对请求做出的响应将并入原先Servlet的响应对象中。      

          3,forward方法和include方法的区别:

                      forward方法调用后在响应中的没有提交的内容被自动消除。   include方法使原先的Servlet和转发到的Servlet都可以输出响应信息。   

    二,得到RequestDispatcher对象  

          三种方法可以得到RequestDispatcher对象:   

                 1,利用ServletRequest接口中的getRequestDispatcher(String  path)方法。   

                 2,ServletContext接口中getNamedDispatcher(String  path)和getRequestDispatcher(String  path)方法。 

         ServletRequest接口和ServletContext接口中getRequestDispatcher方法区别:   

                  1,参数的区别    

                          参数虽然都是资源路径名,ServletContext接口的中参数路径,只能使用绝对路径,必须以“/”开始,是相对于当前Servlet上下文根,    ServletRequest接口中的参数路径不仅可以相对于当前Servlet上下文根,还可以相对与当前Servlet路径,它之所以可以使用相对路劲,是因为在getRequestDispatcher(url)方法中封装了ServletContext.getRealPath()以获得相应的项目根路径,再通过字符串相加,从而可以获得一个完整的路径。

                 2,跨WEB应用程序访问资源    

                          通过ServletContext.getContext()方法获取另个WEB应用程序的上下文环境对象来调用getRequestDispatcher(String  path)方法,将请求转发到另个WEB应用程序的资源。但是需要在当前WEB应用程序配置中设置<context>元素,指定crossContext属性值为true。

    三,ServletResqonse接口中的sendReadirect()方法和forward()方法的区别  

           二个方法都是用于请求转发的方法,转发给另外的资源为客户端服务。但二者有本质的区别

           sendReadirect()方法原理:   

                  1,客户端发送请求,Servlet1做出处理。   

                  2,Servlet1调用sendReadirect()方法,将客户端的请求 重新定位 到Servlet2。   

                  3,客户端浏览器访问Servlet2.  

                  4,Servlet2对客户端浏览器做出响应。 

           forward()方法原理:  

                 1,客户端发送请求,Servlet1做出处理。  

                 2,Servlet1调用sendReadirect()方法,将请求转发给Servlet2来处理请求,为客户端服务。   

                 3,Servlet2对客户端浏览器做出响应。      

          区别:   

               1,定位与转发   

                        sendReadirect()方法是重新定位到另外一个资源来处理请求,前后页面不是一个request,URL会重新定位,让浏览器端重新访问另外一个资源。forward()方法是是请求转发,前后页面共享一个request,这个是在服务端运行的,对浏览器来说是透明的,URL不会变化,隐藏了处理对象的变化。

               2,处理请求的资源的范围

                      sendReadirect()方法可以跨WEB应用程序和服务器重新定位资源来处理请求。forward()方法只能在应用程序内部转发。

               3,传值

                     sendReadirect这种方式要传值出去的话,只能在url中带parameter或者放在session中,无法使用request.setAttribute来传递,所以该方式只适用于无传值跳转。

                     forward使用这种方式跳转,传值可以使用三种方法:url中带parameter,session,request.setAttribute

    本文转自:http://blog.csdn.net/qfs_v/article/details/2551762

    http://blog.csdn.net/mr_li13/article/details/50373972

  • 相关阅读:
    POJ_2184_Cow_Exhibition_(动态规划,背包)
    POJ_2392_Space_Elevator_(动态规划,背包)
    POJ_2914_Minimum_Cut_(Stoer_Wagner)
    POJ_3068_Shortest_pair_of_paths_(最小费用流)
    POJ_3666_Making_the_Grade_(动态规划)
    BZOJ_1565_[NOI2009]_植物大战僵尸_(Tarjan+最大流+最大权闭合图)
    POJ_2987_Firing_(最大流+最大权闭合图)
    BZOJ_1497_[NOI2006]_最大获利_(最大流+最大权闭合图)
    BZOJ_1798_&_Codevs_2216_[AHOI_2009]_行星序列_(线段树)
    Codevs_1690_开关灯_(线段树)
  • 原文地址:https://www.cnblogs.com/nizuimeiabc1/p/8463489.html
Copyright © 2020-2023  润新知