博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Web项目中的路径问题
阅读量:5036 次
发布时间:2019-06-12

本文共 2271 字,大约阅读时间需要 7 分钟。

Web项目中的路径问题

一、绝对路径和相对路径

绝对路径:绝对路径就是形如http://ip:port/web项目名/资源名的写法

相对路径:任何不以http://ip:port/开头的写法 都称之为相对路径,包括以下几种:

  • /开头的写法,形如/demo.jsp/img/a.jpg
  • ./开头(等于啥也不写),形如image/a.jpg(这种写法等价于./image/a.jpg)

  • ../开头,形如../image/a.jpg

而用户要访问服务器中资源,要通过浏览器,我们在各种资源中写的相对路径(例如表单提交的路径,超链接跳转的路径,请求转发跳转的路径,重定向的路径),在用户浏览器的地址栏里,最终都会被转换为绝对路径,因为浏览器(客户端)的作用,就是查找资源,这个查找到资源的路径,就必须是绝对路径,否则是无法定位资源的

二、相对路径中是否以"/"开头的区别

以下的讨论建立在假设项目名(Application Context)为/test的基础上,项目结构如图:

1644205-20190508220902400-1273159305.jpg

1.前台路径(html/jsp文件中的路径)

  • 路径是以/开头的:这个/就等于浏览器中的http://ip:port/也就是服务器的路径

    • 例如:在a.html中有以下超链接
    跳转
    • 点击这个超链接的结果是浏览器地址框变为:http://ip:port/b.html
    • 此时,是找不到/test项目下的b.html资源的,浏览器会报404 NOT FOUND
  • 路径不以/开头:此时以浏览器地址正在访问的这个资源所在的目录为基准

    • 例如:在a.html中有以下超链接
    跳转
    • 点击这个超链接的结果是浏览器地址栏变为:http://ip:port/test/b.html

    • 此时,可以找到/test项目下的b.html资源

2.后端路径(Servlet)

  • 后端路径如果是以/开头的,这里的/就等于浏览器中的http://ip:port/test/也就是项目的路径
  • 但是后端的路径有特殊情况

2.1请求转发跳转

2.1.1路径以/开头

请求转发跳转,是服务器内部的跳转,浏览器地址栏不变.所以是后端的路径跳转,因此/还是代表http://ip:port/test/

例如:在DemoServlet(urlPatterns="/demo")中有以下代码

//其他代码省略request.getRequestDispatcher("/a.html").forward(request,response);
  • 如果访问DemoServlet,需要在浏览器地址栏中输入http://ip:port/test/demo,然后,地址栏不变,但是显示的页面变成了a.html中的内容,证明浏览器访问到了a.html这个资源
  • 实际上,浏览器访问的是http://ip:port/test/a.html但是浏览器地址栏还是显示的http://ip:port/test/demo,这是请求转发跳转的特点,也能证明请求转发跳转中/代表项目路径http://ip:port/test/
2.1.2路径不以/开头

此时,此时以浏览器地址正在访问的这个资源所在的目录为基准

例如:在DemoServlet(urlPatterns="/demo")中有以下代码

//其他代码省略request.getRequestDispatcher("a.html").forward(request,response);
  • 访问DemoServlet,需要在浏览器地址栏中输入http://ip:port/test/demo,然后,也会访问到a.html这个资源
  • 因为此时浏览器访问/demo这个servlet,所在的目录为http://ip:port/test/,所以只需在这个目录后加上a.html,结果也就是a.html的绝对路径,所以访问成功

2.2重定向跳转

2.2.1路径以/开头

重定向跳转,是浏览器的跳转,浏览器地址改变.所以,可以认为是前台路径的跳转,因此,这里的/代表服务器路径http://ip:port/

例如:在DemoServlet(urlPatterns="/demo")中有以下代码

//其他代码省略response.sendRedirect("/a.html");
  • 如果访问DemoServlet,需要在浏览器地址栏中输入http://ip:port/test/demo,然后,地址栏改变为:http://ip:port/a.html,此时,是访问不到资源的,浏览器报404
  • 因为在重定向跳转中/代表http://ip:port/
2.2.2路径不以/开头

此时,此时以浏览器地址正在访问的这个资源所在的目录为基准

例如:在DemoServlet(urlPatterns="/demo")中有以下代码

//其他代码省略response.sendRedirect("a.html");
  • 如果访问DemoServlet,需要在浏览器地址栏中输入http://ip:port/test/demo,然后,地址栏改变为:http://ip:port/test/a.html,访问到了a.html
  • 因为此时浏览器访问/demo这个servlet,所在的目录为http://ip:port/test/,所以只需在这个目录后加上a.html,结果也就是a.html的绝对路径,所以访问成功

转载于:https://www.cnblogs.com/story-xc/p/10835081.html

你可能感兴趣的文章
HDU 4126 Genghis Khan the Conqueror 最小生成树+树形dp
查看>>
c++链接mysql5.7
查看>>
Ubuntu安装UFW防火墙
查看>>
心有所向,逐之
查看>>
java test
查看>>
13.敏捷项目管理——超越范围、进度和成本笔记
查看>>
00.敏捷回顾——引言笔记
查看>>
3.2.3.1 匹配单个字符
查看>>
字符串逆序的方法
查看>>
该类型的 CollectionView 不支持从调度程序线程以外的线程对其 SourceCollection 进行的更改。...
查看>>
C50和机器学习
查看>>
Java中this用法总结
查看>>
Sharepoint学习笔记—习题系列--70-573习题解析 -(Q28-Q31)
查看>>
关于使用Timer定时监测网络是否ping通
查看>>
定时器setTimeout()的传参方法
查看>>
导出成WORD文档(转)
查看>>
MyCat 枚举分片设计思考,查询命中条件
查看>>
selenium 截图 java、python、ruby,
查看>>
Maven 的聚合
查看>>
sbt使用详解
查看>>