Servlet请求转发 RequestDispatcher接口-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

Servlet请求转发 RequestDispatcher接口

小旋风柴进 2016-02-29 15:29:41 1314

在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路径    
        2,跨WEB应用程序访问资源    
            通过ServletContext.getContext()方法获取另个WEB应用程序的上下文环境对象来    调用getRequestDispatcher(String  path)方法 将请求转发到另个WEB应用程序的资源。                       

还需要在当前WEB应用程序配置中设置元素,指定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()方法是重新定位到另外一个资源来处理请求,URL会重新定位,让客户端重新访问另外一个资源。    forward()方法是转发到另外一个资源来处理请求。URL不会变化。隐藏了处理对象的变化。   
         2,处理请求的资源的范围   
       sendReadirect()方法可以跨WEB应用程序和服务器重新定位资源来处理请求。    forward()方法只能在应用程序内部转发。
Java 容器
分享到
取消 提交回答
全部回答(1)
  • 小旋风柴进
    2019-07-17 18:50:22

    sendRedirect是server向客户端(通常是浏览器)返回CODE 3XX来让客户端重新请求另外一个url.

    forward是server将请求交由server上另外的资源处理,对客户端来说整个过程是透明的。

    forward也是可跨web应用的,前提是在同一server里,并且server不限制跨context访问

    0 0
+ 订阅

云原生时代,是开发者最好的时代

推荐文章
相似问题