`
zachary.guo
  • 浏览: 482807 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

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 站点的根目录。
分享到:
评论
1 楼 lhs472194266 2015-09-24  
java  web 里很多教程 介绍说 区分: 绝对路径和相对路径

其实这里的绝对路径 更准确的说法是 :相对跟目录(应用或站点)的路径。

相关推荐

    java web-转发、重定向(csdn)————程序.pdf

    java web-转发、重定向(csdn)————程序

    javaweb转发和重定向

    javaweb请求转发的简单实例,演示了forward()方法和getRequestDispatcher()的不同之处

    重定向和转发的区别

    java web 重定向和转发的区别 保证一看就懂

    java web总结

    java web总结请求转发 请求重定向

    页面转向与重定向

    请求转发和重定向在页面跳转时数据的传递,为什么重定向会丢失数据,之间到底有什么区别。

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    《Java Web编程宝典(十年典藏版)》是一本集技能、范例、项目和应用为一体的学习手册,书中介绍了应用Java Web进行程序开发的各种技术、技巧。全书分4篇,共24章,其中,第1篇为技能学习篇,主要包括Java Web开发环境...

    深入体验Java Web开发内幕

     本书适合所有Web应用的开发人员、Java程序员在工作和学习中参考阅读,也适合作为相关专业本科生、研究生的学习参考资料,也可作为相关培训机构的培训教材。 【作者简介】  张孝祥中国著名IT培训教育...

    Java Web中的页面跳转.pdf

    在java Web编程中间经常出现需要从一个页面跳转到另外一个页面,如何选择跳转方式一直是java Web编程...本文总结了JSP/Servlet、Struts2和Spring中的页面跳转方法,详细分析对比了请求转发和重定向、RequestDispatc...

    java-web小Demo

    其中包括:请求编码,响应编码,转发,包含,重定向;

    Java Web应用开发:关于路径.docx

    重定向路径也是客户端路径。 服务端路径是由服务端发起请求的路径,目前学过的有include(静态、动态)、forward路径。是服务端转发请求给服务端另一组件,或者包含另一服务端组件的路径。 1.2 绝对路径和相对路径 ...

    java Struts教程

    转发和重定向标记 33 HTML标记 34 显示表单元素和输入控件 34 显示错误信息的标记 38 其他HTML标记 39 模板标记 39 一个简单的示例 41 Struts的安装 41 第一个实验:简单的JSP页 41 第二个实验:struts的国际化 42 ...

    Java语言基础下载

    转发和重定向标记 668 HTML标记 669 显示错误信息的标记 673 其他HTML标记 673 模板标记 673 内容总结 676 独立实践 676 第三十四章:Hibernate基础 677 学习目标 677 Hibernate简介 678 建立简单的Hibernate应用 ...

    理解Java Web项目中的路径问题

     先说明请求页面的写法,在web中,页面路径主要写的有以下几种  1、请求重定向  2、浏览器的请求被服务器请求到新页面(我称为“转发”)  3、超链接  4、form表单提交的action  为了演示路径写法,首先...

    java面试题

    答:JDO是java对象持久化的新的规范,为java data object的简称,也是一个用于存取某种数据仓库中的对象的标准化API。 CORBA? 答:CORBA标准是公共对象请求代理结构,用途为:用不同的程序设计语言书写,在不同的...

    JSP和Servlet面试题

    7.Jsp的重定向和转发的流程有什么区别 重定向是客户端行为,转发是服务器端行为 重定向时服务器产生两次请求,转发产生一次请求,重定向时可以转发到项目以外的任何网址,转发只能在当前项目里转发 重定向会导致...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【WEB】转发(forward)和重定向(redirect)的区别 38 forward(转发): 38 redirect(重定向): 39 区别: 39 【WEB】实现会话跟踪的技术有哪些? 40 【WEB】什么是ORM 42 【反射】反射中,Class.forName和...

    java考试系统

    myeclipse制作的资源考试 ...3.在Struts中提供了多种返回结果类型,( )结果类型表示浏览器重定向转发,但是不能重定向到WEB-INF目录下的Jsp页面 。 (A)dippatcher (B)Redirect (C)redirectAction (D)plaintext

    struts的教程.doc

    转发和重定向标记 33 HTML标记 34 显示表单元素和输入控件 34 显示错误信息的标记 38 其他HTML标记 39 模板标记 39 一个简单的示例 41 Struts的安装 41 第一个实验:简单的JSP页 41 第二个实验:struts的...

    JavaWeb实战开发

    请求方式的编码问题、response、请求转发和重定向、cookie、session执行机制、session共享问题? ? ?4.session与cookie问题及application、cookie补充说明及四种范围对象作用域? ? ?5.JDBC原理及使用Statement访问...

    conversor-monetario

    货币转换器-第一次实用Web评估4 申请进行货币兑换线框: Quant-UX( )检查清单: 转发和重定向 在MVC模型之外使用转发(即,一个servlet将请求转发到另一个servlet)。 技巧是将复杂的处理分为两个步骤,即两个...

Global site tag (gtag.js) - Google Analytics