先总观路径问题:
绝对路径:可以独立地准确访问资源(带访问协议)。
相对路径:必须结合参照路径才可以准确定位。
+--------------------------------------------------------------------------------------------------------------------------------------------+
我们首先要明白:tomcat服务器是一个容器,里面有一个或多个项目。其中下图中的web目录是某个项目的根目录。
我新建了pathTest工程,举例说明:
+---------------------------------------------------------------------------------------------------------------------------------------------------------------+
1.以斜杠开头的相对路径:
1.1 前台路径:由浏览器解析执行的代码中所包含的路径(html,css,js及jsp中静态部分的路径)。前台路径的参照路径是web服务器的根路径即http://127.0.0.1:8080。将前台路径转化为绝对路径,是由浏览器自动完成的,作用是为用户提交对某种资源的请求,是要查找并定位服务器中某种资源,即查找。
此处参照路径为:http://localhost,相对路径为/pathTest/images/test.jpg,转化后的绝对路径为http://localhost/pathTest/images/test.jpg(如果设置默认80端口,端口号可以不明确写出来)
1.2后台路径:由服务器所执行的代码及文件中所包含的路径(java、jsp动态部分,xml等配置文件)。后台路径的参考路径是web应用的根路径,如http://127.0.0.1:8080/webAppName(项目工程名字)。将后台路径转化为绝对路径的工作由服务器完成。其作用是标识该资源在服务器中的路径,以便客户端能够按照这个设定路径来查找相应的资源,即标识。
FristServlet(请求转发时路径注意大小写,以web.xml配置为准),这是一个后台路径,参照路径为http://localhost/pathTest,相对路径为/secondServlet,转化后的绝对路径为http://localhost/pathTest/secondServlet。
SecondServlet
web.xml配置注册Servlet
1.3特例!!!!!response.sendRedirect()进行重定向。若其参数路径为以斜杠开头相对路径,那么这个后台路径是个特例。这是由sendRedirect()的本质决定的,该方法可以跳转到其它项目的资源,服务器无法得知访问哪个项目。所以这个后台路径的参照路径为当前web服务器的根目录。可以使用request.getContextPath()获取路径。
注意:只有这种重定向的以斜杠开头的相对路径是特例,其它重定向遵循路径转化定理。
修改如下:
2.以名称开头的相对路径(无斜杠)
无论是出现在前台还是后台,以名称开头的相对路径其参照路径都是当前访问路径的资源路径。即使是response.sendRedirect()方法的参数路径,若不以斜杠开头,其也属于以路径名称开头的相对路径,参照路径为当前访问路径的资源路径。web.xml中Servlet的配置<url-pattern></url-pattern>中的路径只能是以斜杠开头的相对路径,因为它根本不是请求,只是起标识作用,故没有资源路径。
下面路径与上面带斜杠路径的设置等效
前台路径:
后台路径:
请求转发:
重定向:
+--------------------------------------------------------------------------------------------------------------------------------------+
另外:
./ 表示同一级目录
../ 表示上一级路径
但是个人觉得这种方式在后端开发中不常用。