绝对路径与相对路径

http://127.0.0.1:8080/05-accessPath/test/show.do是即将要访问的资源地址,接下来以其为例进行说明。

绝对路径
以协议开头的路径为绝对路径(在网络访问中有http的)。http://127.0.0.1:8080/05-accessPath/test/show.do就是绝对路径。不细说。
相对路径
不以协议开头的路径为相对路径(在网络访问中没有http的)。相对路径又分为“不以/开头的相对路径”
和“以/开头的相对路径”。细说如下:
A.以/开头的相对路径根据路径出现的位置又分为前台路径和后台路径
说明:前台路径和后台路径都是以/开头的,然而对于前台路径和后台路径/的意义是不一样的,因为前台路径和后台路径的参照路径是不一样的。前台路径的参照路径是当前Web服务器的根路径(http://127.0.0.1:8080),后台路径的参照路径是当前Web应用的根路径【Web应用的根路径即WebRoot】(http://127.0.0.1:8080/05-accessPath)。要知道系统实际是将程序员写的相对路径和相对路径的参照路径组合成绝对路径从而找到资源。
以后台路径为例,程序员写的后台路径是【1】/test/show.do,后台路径的参照路径是【2】http://127.0.0.1:8080/05-accessPath,系统将【1】和【2】组合成绝对路径http://127.0.0.1:8080/05-accessPath/test/show.do从而找到资源。
以前台路径为例,程序员写的前台路径是【1】/05-accessPath/test/show.do,前台路径的参照路径是【2】http://127.0.0.1:8080,系统将【1】和【2】组合成绝对路径http://127.0.0.1:8080/05-accessPath/test/show.do从而找到资源。
(a)前台路径(由浏览器解析执行的代码中所包含的路径):静态页面(html、css、js)中的路径;CSS中的background:img("");JS中的window.location.href=""以及动态页面(jsp)里的静态部分(非Java代码块即静态部分包括:图片的src里的路径、引入css和js的src里的路径、form表单的action里的路径、超链接)。
注意:
1.写超链接时,/05-accessPath/test/show.do可以,但是这样写项目名就写固定了。为了解决这个问题,最好写成${pageContext.request.contextPath}/test/show.do,其中的EL表达式代表/05-accessPath
2.写超链接时,路径写成show.do也可以,具体原因见不以/开头的相对路径。
(b)后台路径(由服务器解析执行的代码及文件中所包含的路径):java代码里出现的路径、配置文件里出现的路径【xml文件中的路径(xml文件是要被java代码加载入内存创建成对象,并由java代码解析的)】或jsp里的动态部分(Java代码块:不经常用,而用jstl代替)。
B.不以/开头的相对路径:参照路径即访问路径(麻烦,因为参照路径会变
说明:请求路径由访问路径和资源名称组成。
资源路径:test/show.do
问题:参照路径即访问路径,所以在原来访问后的基础上再次访问,参照路径会变。
第一次请求时程序员写的相对路径为test/show.do,参照路径即访问路径http://127.0.0.1:8080/05-accessPath/,系统组合成的绝对路径是http://127.0.0.1:8080/05-accessPath/test/show.do,可以找到资源。
第二次请求时程序员写的相对路径为test/show.do,参照路径即访问路径http://127.0.0.1:8080/05-accessPath/test/,而不是当前文件所在的路径http://127.0.0.1:8080/05-accessPath/,系统组合成的绝对路径是http://127.0.0.1:8080/05-accessPath/test/test/show.do,找不到资源。
解决方案:
(a)绝对路径与相对路径
(b)
绝对路径与相对路径
注意:base标签会为当前页面的所有的不以/开头的请求前面都自动加上basePath这个路径。
-------------------------------------------------------------------------------------------------------------------

后台路径特例(属于“以/开头的相对路径”的特例

http://127.0.0.1:8080/05-accessPath/show.jsp是即将要访问的资源地址,接下来以其为例进行说明。

重定向(response 的 sendRedirect()方法)
重定向的意思是从浏览器又发了一次请求,浏览器解析的路径是当前Web服务器的根路径。正确写法如下:
(1)response.sendRedirect(request.getContextPath() + "/show.jsp");【request.getContextPath() 得到的是Web应用的根路径即WebRoot】。
(2)response.sendRedirect("show.jsp");
错误写法如下:
response.sendRedirect("/show.jsp");
原文地址:https://www.cnblogs.com/caogen1991/p/7921738.html