编程中遇到的路径问题

先总观路径问题:

绝对路径:可以独立地准确访问资源(带访问协议)。

相对路径:必须结合参照路径才可以准确定位。

+--------------------------------------------------------------------------------------------------------------------------------------------+

我们首先要明白: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>中的路径只能是以斜杠开头的相对路径,因为它根本不是请求,只是起标识作用,故没有资源路径。

下面路径与上面带斜杠路径的设置等效

前台路径:

后台路径:

请求转发:

重定向:

+--------------------------------------------------------------------------------------------------------------------------------------+

 另外:

./  表示同一级目录

../  表示上一级路径

但是个人觉得这种方式在后端开发中不常用。

猜你喜欢

转载自www.cnblogs.com/Libinkai/p/9332928.html