JavaWeb 重定向和转发传参的路径问题

前置知识

  1. / 表示根目录
  2. ./表示当前目录,可省略
  3. …/表示上一级目录
  4. 一个Java Web完整的url请求组成
    协议//ServerIP:port/context root/ServletPath?query string

问题背景

在JavaWeb开发的前端界面,我们一般采用绝对路径。
这里简单聊一下绝对路径的好处。
当一个html里面含有a链接标签、form表单、iframe框架时,如果href属性或者action属性采用相对路径,并且其中带着ServletPath。
形如 <a href = "user.do? ……
如果这个html文件的文件路径很深,形如
context root/aaa/bbb/ccc/ddd/xx.html
因为a标签和此html处在同级目录,则它的href指向的完整路径则是
context root/aaa/bbb/ccc/ddd/user.do?
这样无论是在web.xml中的url-pattern或者servlet类的注释配置会变得很长,非常不方便。

问题

在编程过程中,我发现有几个地方是不用加斜杠,不采用绝对路径的。

  1. request的getRequestDispatcher方法
  2. response的sendRedirect方法
  3. js中会用到的window.location.href

第一个是服务器的内部转发,目标资源地址由服务器解析,如果转发前的servletPath已经是在根目录下(根目录为context root),则
getRequestDispatcher(“/index”)和getRequestDispatcher(“index”)是一样的。

第二个是重定向,第三个是js的全局变量。目标资源地址由浏览器解析,在浏览器端完成的。因此此时的根目录是ServerIP:port
所以sendRedirect(“/index”)或window.location.href="/index"是绝对不可取的,它实际效果是形如 http://localhost:8080/index 直接把context root跳过了!!!

而以上这些采用相对路径的请求,是将前一个发送的请求作为参考点形成新的请求。
设前一个请求是https://localhost:8080/webapp01/index/aaa/bbb/ccc
如果采用相对路径,新的请求则是https://localhost:8080/webapp01/index/aaa/bbb/xxx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值