请求路径由两部分构成:资源路径与资源名称。即
请求路径 = 资源路径 + 资源名称
资源路径与资源名称的分水岭为:请求路径中的最后一个斜杠。斜杠前的部分称为资源路径,斜杠后的部分称为资源名称。例如:
请求路径: http://localhost:8888/01-primary/some.do
资源路径: http://localhost:8888/01-primary
资源名称: some.do
根据是否可以唯一的定位一个资源标准,可以将路径划分为两类:绝对路径与相对路径。
绝对路径:可以唯一的定位一个资源。在Web应用中,一般情况下,以请求协议开头的路径为绝对路径。绝对路径以URL形式表示。
相对路径:仅仅依靠此路径,无法唯一的定位一个资源。但若将其再与一个参照路径相结合后,就可以转换为一个可以定位资源的绝对路径,这样的路径,称为相对路径。在Web应用中,一般情况下,不以请求协议开头的路径为相对路径。相对路径以URI形式表示。
转换关系: 绝对路径 = 参照路径 + 相对路径
以相对路径是否以斜杠开头划分,可以将相对路径划分为两类:以斜杠开头的相对路径,与不以斜杠开头的相对路径。
对于以斜杠开头的相对路径,再根据路径出现的位置的不同,可以划分为两类:前台路径与后台路径。
前台路径:出现在HTML文件,及JSP文件的静态部分中的以斜杠开头的相对路径,称为前台路径。例如,出现在<img/>的src中的路径、<a/>的href中的路径、<form/>的action中的路径、<script/>的src等前台路径的解析者是浏览器。
后台路径:出现在Java代码、JSP文件的动态部分、及XML、Properties等配置文件中的以斜杠开头的相对路径,称为后台路径。后台路径的解析者是服务器。
不以斜杠开头的相对路径,其路径解析者,根据路径出现的位置不同,分别可以是浏览器或服务器。
不同的路径解析者,对同一个相对路径的解析结果是不同的。当然,所谓解析结果,指的是将相对路径转换为的最终的绝对路径。由于绝对路径 = 参照路径 + 相对路径,所以这里的解析规则,就是指为这个相对路径匹配上一个怎样的对照路径。或者说,我们要学习的重点是,浏览器、服务器对相对路径所匹配的参照路径是谁。
前台路径:其参照路径为当前Web服务器的根。
后台路径:其参照路径为当前Web应用的根。
不以斜杠开头的相对路径:其参照路径为当前请求路径的资源路径
http://localhost:8888/01-primary/xxx/some.do
http://localhost:8888 当前Web服务器的根。
http://localhost:8888/01-primary Web应用的根
http://localhost:8888/01-primary/xxx/ /资源路径
资源定义路径:绝对路径
资源请求路径:参照路径+相对路径
只有当资源定义路径=资源请求路径 才能访问资源。
我的总结:jsp及静态页面不加"/" java及配置文件中加"/"
特例
Response的sendRedirect()方法中的以斜杠开头的相对路径,按照前面的定义,其为后台路径。后台路径的参照路径应为当前WEB应用的根,但实际却不是,而是当前WEB服务器的根。
webconent 下写jsp登录页面跳转 用"/", ${pageContext.request.contextPath}"/ "