java web 中的转发和重定向
假设应用程序的 contextPath 为 /ctx,在 http://localhost:8080/ctx/a/b 资源中,我们转发和重定向到 http://localhost:8080/ctx/x/y 资源,分别应该怎么写?
转发,是在同一个应用程序中,请求从由资源 A 处理,到由资源 B 处理。资源 A 和资源 B 属于同一个应用程序的资源,它们总是相对于该应用程序的 contextPath 而言的。转发的资源可以使用相对路径(不以 "/" 开头)和绝对路径(以 "/" 开头,这里的绝对,其实也是相对于某个环境而言的)。转发的资源若使用 "/" 开头,代表的是该资源在该应用程序中是绝对的,注意,是在应用程序的这个前提下是绝对的。
资源 A = http://localhost:8080/ctx/a/b,资源 B = http://localhost:8080/ctx/x/y。在资源 A 中 getRequestDispatcher("/x/y"),由于是以 "/" 开头,因此在应用程序内部是绝对的,即在 http://localhost:8080/ctx 这个环境下,/x/y 代表的是绝对地址。注意,我并没有写 getRequestDispatcher(request.getContextPath() + "/x/y"),这样写的话,同样是在 http://localhost:8080/ctx 这个环境下的绝对地址为 request.getContextPath() + "/x/y",那么完整的资源是 http://localhost:8080/ctx/ctx/x/y,并不是我们所期望的资源。
在资源 A 中 getRequestDispatcher("x/y") 会如何呢?由于转发的资源不是以 "/" 开头,因此它是一个相对地址,相对于谁呢?相对于做转发操作的资源的地址,即相对于 http://localhost:8080/ctx/a/b,其路径为 http://localhost:8080/ctx/a,因此,转发后的资源的地址为 http://localhost:8080/ctx/a/x/y!如果由资源 /ctx/a/b 转发到 /ctx/a/c,由于这两个资源所处的路径相同,我们当然可以这样写:getRequestDispatcher("c")
综上所述,不建议使用相对路径来转发资源。尽量使用绝对地址来转发资源,同时,不要在资源的前面又画蛇添足的加上 request.getContextPath(),因为转发操作本来就是在同一个应用程序之间来处理的!
重定向,不仅可以重定向到当前应用程序(http://localhost:8080/ctx)中的其它资源,还可以重定向到同一个站点上的其它应用程序(http://localhost:8080/another)中的资源,甚至是使用绝对 URL 重定向到其它站点的资源。
被重定向的资源若是以 "/" 开头,如 /x/y,实际上是相对于主机而言的,即完整的资源路径为 http://localhost:8080/x/y,这并不是我们想要的资源。
被重定向的资源若不是以 "/" 开头,如 x/y,实际上是相对于做重定向操作的资源(http://localhost:8080/ctx/a/b)而言的,即完整的资源路径为 http://localhost:8080/ctx/a/x/y,这也不是我们想要的资源。当然,使用这种方式,我们重定向到 /ctx/a/c,即 sendRedict("c") 当然是没问题的。
使用绝对 URL 还可以将资源重定向到其它站点的资源。
综上所述,做重定向操作时,若想重定向同一个应用程序的其它资源时,同样不推荐使用相对路径,尽量使用绝对路径,同时,务必在资源前面加上 request.getContextPath()。
一句话总结:创建 RequestDispatcher 对象时指定的 URL 以“/”开头,它是相对于当前 WEB 应用程序的根目录;HttpServletResponse.sendRedirect 方法的 URL 以“/”开头,它是相对于整个 WEB 站点的根目录。
java web 中的转发和重定向的更多相关文章
- Java Web中请求转发和请求包含
1.都是在一个请求中跨越多个Servlet 2.多个Servlet在一个请求中,他们共享request对象.就是在AServle中setAttribute()保存数据在BServlet中由getAtt ...
- java web中servlet、jsp、html 互相访问的路径问题
java web中servlet.jsp.html 互相访问的路径问题 在java web种经常出现 404找不到网页的错误,究其原因,一般是访问的路径不对. java web中的路径使用按我的分法可 ...
- java web中路径问题。
转自:http://blog.csdn.net/liang5630/article/details/38474543 如有侵权,请及时联系本人及时删除 在java web种经常出现 404找不到网页的 ...
- Java Web 中 过滤器与拦截器的区别
过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法u ...
- JAVA WEB 中的编码分析
JAVA WEB 中的编码分析 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} pre.src {background-co ...
- Java web中常见编码乱码问题(一)
最近在看Java web中中文编码问题,特此记录下. 本文将会介绍常见编码方式和Java web中遇到中文乱码问题的常见解决方法: 一.常见编码方式: 1.ASCII 码 众所周知,这是最简单的编码. ...
- Java web中常见编码乱码问题(二)
根据上篇记录Java web中常见编码乱码问题(一), 接着记录乱码案例: 案例分析: 2.输出流写入内容或者输入流读取内容时乱码(内容中有中文) 原因分析: a. 如果是按字节写入或读取时乱码, ...
- 深入分析Java Web中的编码问题
编码问题一直困扰着我,每次遇到乱码或者编码问题,网上一查,问题解决了,但是实际的原理并没有搞懂,每次遇到,都是什么头疼. 决定彻彻底底的一次性解决编码问题. 1.为什么要编码 计算机的基本单元是字节, ...
- 解决java web中safari浏览器下载后文件中文乱码问题
解决java web中safari浏览器下载后文件中文乱码问题 String fileName = "测试文件.doc"; String userAgent = request.g ...
随机推荐
- Android Service 详解
一个Service也是一种应用程序组件,它运行在后台以提供某种服务,通常不具有可见的用户界面.其它的应用程序组件可以启动一个 Service,即使在用户切换到另外一个应用程序后,这个Service还是 ...
- SELECT /*!40001 SQL_NO_CACHE */ * INTO OUTFILE '/tmp/ClientActionTrack2015112511.txt' 不堵塞事务
mysql> insert into ClientActionTrack20151125(clientSn,ip,url,httpMethod,requestParams,requestHead ...
- .NET开发不可错过的25款高效工具
这些年来,微软的 .NET 开发团队不断在更新升级开发工具,这也提供了一个机会,让我们能对 .NET 系列的开发工具做出不断的评估和规范.以下是我们总结出的一些 .NET 开发不可错过的高效工具. 1 ...
- 【log4js】
手动创建日志目录 定时清理 nodejs之日志管理 玩转Nodejs日志管理log4js access.log-2015-11-20
- JavaScript实现网页背景自动变色
JavaScript实现网页背景自动变色,自己变换颜色,设定时间和颜色值即可,在你设定的颜色值.一定时间内自动切换网页背景颜色. <!DOCTYPE HTML PUBLIC "-//W ...
- Visual Studio 2015 企业版 官方中文版.iso
Visual Studio 2015 企业版 官方中文版.iso 附上链接 不要积分 谢谢: http://download.csdn.net/detail/onebelowzero2012/9561 ...
- oracle全托管驱动Oracle.ManagedDataAccess
oracle官方的托管驱动,发布只需一个6M多的dll,支持EF 支持分布式事务,使用步骤如下: 1,Download ODP.NET, Managed Driver .zip file to a d ...
- JavaScript---网络编程(4)-Date、Math、Global和自定义对象
本节博客进行Date对象.Math对象.Global对象和自定义对象的用法演示. 首先是一个out.js文件内容(输出到网页中的自定义输出方法): function println(parma){ d ...
- C#开发移动平台iOS、Android 与Windows
1.Xamarin http://www.csdn.net/article/2014-02-28/2818585-Xamarin-CSDN-mobile-develop
- (转)Zend Studio 10.6.1破解注册图文详解
原文来自:http://www.softown.cn/soft/zend-studio/windows/10.6.1#downloads 下面我们以Zend Studio 10.6.1正式版为例来介绍 ...