3.路径问题详解

首先 ,什么是路径问题呢? 比如说我们有一个 1.jsp,然后 它想去访问一个 在 某个包下的 servlet,通过这个 servlet ,去跳转到2.jsp

那么我们的 1.jsp 是要有个 超链接去 访问 servlet的 ,那么这个超链接应该怎么写,是不是直接写上在web.xml 中 配置的servlet的映射路径,要不要加上 "/",

到了这个 servelt,我们的 路径又该怎么写才能最后跳转到2.jsp页面,网上的观点是这样的:


先搞清楚几个概念:访问路径 ,绝对路径,相对路径

  1.访问路径,一个完整的URL访问路径 是由两部分组成:访问路径 + 资源名称,比如我们有一个web项目HelloWorld,

  这个HelloWorld根目录下呢,有一个1.jsp,我们去访问这个1.jsp,是输入whttp://localhost:8080/HelloWorld/1.jsp,这个链接吧

   index.jsp就是我们的资源名称,剩下的那部分http://localhost:8080/HelloWorld/ (注意最后面是带了一个 / 的)就是我们的访问路径,


  根据 “访问路径是否可以独立完成资源的准确定位”,可以将访问路径分为绝对路径和相对路径
  2.绝对路径,就是可以准确定位到资源的路径,说白了就是带有具体协议的路径,

  比如说什么 http://localhost:8080/HelloWorld/index.jsp 能够准确访问到 这个 index.jsp,这就是一个绝对路径


  除了绝对路径就是相对路径了,顾名思义啊, 相对路径要有相对的对象,它必须要结合其参照路径才可以找到资源,

  也就是说 绝对路径 = 参照路径 + 相对路径



我们这里主要讨论的也就是相对路径 的 参照路径 的问题,

根据相对路径是否以斜杠开头,这个路径是在前台还是在后台,这个相对路径的参照路径是不同的

我们先讨论 以斜杠开头的相对路径,分为前台路径和 后台路径

  1.所谓前台路径,就是指在浏览器解析执行的代码中所包含的路径,比如,出现在html、css、js等中的路径

   比如最前面提出的要通过 1.jsp 去访问 servlet,写在1.jsp超链接中的路径,就是前台路径,如果这个路径以 斜杠 开头,

   那么这个 前台路径的参照路径 是web服务器的根路径 就是我们的 http://localhost:8080

   这样的话 我们在1.jsp里面写的路径要不要 加上 斜杠呢?如果我们加上 斜杠,因为这是个前台路径,我们前面说到,

   它的参照路径是web服务器的根路径 http://localhost:8080,那么它构成的路径是 参照路径 + 相对路径 = http://localhost:8080/servlet的映射名,

   这样写肯定不可以吧,连访问哪个web应用都不知道

  2.好,然后我们来看看什么是后台路径,它是指服务器解析执行的代码及文件中所包含的路径,比如说我们java代码中的路径,肯定包括servlet了

   后台路径的参照路径是 web应用的根路径(http://localhost:8080/HelloWorld)

   如果通过 我们的 1.jsp访问到了 servlet,servlet想去跳转到2.jsp,应该怎么写,要不要加上斜杠 ,如果加上斜杠 ,

   它的参照路径是web应用的根路径 ,然后它构成的路径是 参照路径 + 相对路径 http://localhost:8080/HelloWorld/2.jsp,这样是可以访问到的吧

  3.好,最后我们来看下 不以斜杠 开头的相对路径

   不以斜杠开头的相对路径,无论是前台路径 ,还是后台路径,它的参照路径 都是当前资源的访问路径 ,

   一个完整的URL 由两部分构成,访问路径 和 资源名称

   我们前面说到的 1.jsp去访问servlet 不能加上 “/”,如果不加上 斜杠,它的参照路径是当前资源的访问路径,

   我们访问1.jsp的时候,是输入http://localhost:8080/HelloWorld/1.jsp的吧,把1.jsp这个资源名称拿掉,

   剩下的就是我们的访问路径http://localhost:8080/HelloWorld/

   最后构成的路径是 参照路径 + 相对路径 = 访问路径 + 相对路径 = http://localhost:8080/HelloWorld/servlet/TestServlet,

   这样就能够访问到我们的servlet,然后servlet, 去跳转到 2.jsp

  如果是后台页面跳转的方式是重定向的话还有一点特殊,即使是在后台,但是加了 / 后,它的参照路径是 web应用的根路径(但是仔细想想重定向的原理也能理解)
总结一下:前台路径的参照路径 是web服务器的根路径,后台路径的参照路径是web应用的根路径, 不加斜杠,参照路径就是访问路径

原文地址:https://www.cnblogs.com/xuzekun/p/7403275.html