在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

转载于:https://www.cnblogs.com/nizuimeiabc1/p/8463489.html

Servlet请求转发RequestDispatcher接口相关推荐

  1. Servlet 请求转发(forword)与重定向(sendredirect)的区别

    servlet请求转发与重定向的区别: request.setAttribute("test","hello"); request.getRequestDisp ...

  2. 解决servlet请求转发、响应重定向无法实现页面跳转问题

    问题:login.html能正常运行,但当用户名和密码正确后,点击登录按钮,通过html页面的action属性值和servlet页面的urlPatterns属性值,实现servlet请求转发,无法实现 ...

  3. 重定向sendredirect(URL)和请求转发requestDispatcher(servlet).forword(req,resp)

    请求转发和重定向的区别 什么是请求转发(request.getRequestDispatcher(目标).forward(request,response)) 请求转发是服务器将请求转发给别的serv ...

  4. servlet请求转发

    来源:http://www.2cto.com/kf/201610/554591.html 请求转发:Servlet(源组件)先对客户请求做一些预处理操作(数据处理),然后把请求转发给其他Web组件(目 ...

  5. Servlet请求转发中文乱码解决

    2019独角兽企业重金招聘Python工程师标准>>> 在Servlet的使用过程中,如果在请求转发的同时需要获得输出流并且写出数据的时候,需要设定resp 的编码格式,否则的话,跳 ...

  6. httpservletresponse 重定向浏览器不变的原因_JavaWeb——Servlet——请求转发与响应重定向...

    导语:在实际的软件开发过程中,往往需要多个Servlet来实现不同的功能,就需要对多个Servlet进行组合调用.多个Servlet之间如何进行通信和跳转?而这就需要用到请求转发与响应重定向技术. 原 ...

  7. servlet中请求转发(forword)与重定向(sendredirect)的区别

    servlet请求转发与重定向的区别: request.setAttribute("test","hello"); request.getRequestDisp ...

  8. 【Java12】tomcatservlet(nginx,web.xml,生命周期,适配器优化),requestresponse(请求转发,登陆案例(1),重定向,文件下载)

    文章目录 1.nginx的conf文件:以前网络编程中B/S架构中服务器是用socket写,用文件输入流读一个文件,读到后socket通过outputstream写出去,这些过程有了nginx后再也不 ...

  9. 分析:重定向和请求转发

    分析:重定向和请求转发 重定向 HttpServletResponse对象的sendRedirect(java.lang.String location)方法称作重定向. 如果location地址前面 ...

  10. 详解请求转发和重定向

    ** 详解请求转发和重定向 **servlet请求转发与重定向的区别: request.setAttribute("test","hello"); reques ...

最新文章

  1. python中实数怎么表示_如何用实数的模来计算pow()?
  2. Java知识整理——垃圾回收
  3. 万分之二用百分之怎么表示_农村建房时,“砖砌的化粪池”怎么做?听完内行人的分析,明白了...
  4. html自动生成工具_「写论文神器」一个好用的论文自动生成工具,内含30w 文献数据...
  5. P7 P8:训练神经网络
  6. caffe.proto源码分析
  7. excel 自动获得拟合系数,自动引用,计算
  8. cadence17.2小白eda365skill 安装教程
  9. uniapp分销商城源码开发
  10. matlab脉宽调制pwm,脉宽调制matlab仿真
  11. 解决:金山词霸界面太小
  12. springboot集成solr实现全局搜索系列
  13. Tomat报错 The APR based Apache Tomcat Native library which allows optimal performance in production
  14. java对有英文的日期进行格式化
  15. mysql修改配置文件进行优化
  16. 电子测量-不同电压波形对不同检波特性电压表的影响分析
  17. HTML+CSS+JS个人网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计
  18. 张居正-良心与理想-当年明月
  19. java实现m3u8文件抓取器
  20. python四叶玫瑰数判断_四叶玫瑰数

热门文章

  1. c语言ie编程,IEC语言:梯形图(共章).ppt
  2. 关于getline的细节
  3. mysql java 日期_Mysql和JAVA中的几个日期操作
  4. 小D课堂 - 零基础入门SpringBoot2.X到实战_第2节 SpringBoot接口Http协议开发实战_11、SpringBoot2.x目录文件结构讲解...
  5. 阶段3 1.Mybatis_09.Mybatis的多表操作_5 完成user的一对多查询操作
  6. 牛客寒假算法基础集训营2 A 处女座的签到题及一丢丢nth_elemen容器的简单用法...
  7. [py]__name__ 属于哪个文件
  8. haproxy1.7编译安装配置
  9. 5-21 求前缀表达式的值(25分)
  10. 支付宝新漏洞引发恐慌,那如何关闭小额免密支付呢