访问路径的组成
URL(Uniform Resource Locator,统一资源定位符),其由两部分组成:资源路径+资源名称。资源名称指的是要访问资源的直接名称,如(index.html、index.jsp、102915653等),那么资源路径很简单就是除资源名称以外的其他部分了。URL是URI(Uniform Resource Identifier,统一资源标识符)的子集,
根据“资源路径是否可以独立完成资源准确定位”的判别标准,可以将路径分为绝对路径和相对路径。
绝对路径
绝对路径指的是根据给出的访问路径可以准确定位到资源的路径,对于计算机中Web应用的绝对路径,则是带访问协议的路径,如https://mp.csdn.net/mdeditor/102979770
相对路径
相对路径指的是根据给出的访问路径无法无法准确定位到资源的路径,其必须结合参照路径才可以准确定位资源,参照路径的不同所形成的准确定位资源的绝对路径也是不同的。
所以绝对路径 = 参照路径 + 相对路径。在WEB应用程序中,浏览器或服务器会自动为不同的相对路径添加不同的参照路径,使其变成绝对路径。我们在程序中写代码的时候写的路径一般是相对路径。所以我们要知道服务器添加参照路径的规则。
斜杠开头的相对路径
前台路径
前台路径指的***由浏览器解析执行***的代码中包含的路径,如:html,css,js,jsp中的静态代码的路径(HTML标签中的路径 href="" src="" action="" background:(img="")),他们都属于前台路径。浏览器为他们自动添加的参照路径是http://127.0.0.1:8080
,即Web服务器的根目录。
前台路径的作用是为用户提交对某种资源的请求,查找定位服务器中的某些资源。起一个查找的作用
后台路径
后台路径指的是由服务器解析执行的代码中所包含的路径,如:Java代码中的路径、jsp动态代码(Java代码块)、xml配置文件。他们都属于前台路径。服务器为他们自动添加的参照路径是http://127.0.0.1:8080/项目应用名称
,即Web应用的根目录。
后台路径的作用是标识出该资源路径在服务器的路径。以便于浏览器可以按照这个设定路径来查找相应资源。起一个标识的作用。
request.getRequestDispatcher("/QQServlet").forward(request,response);
上面的请求转发中的绝对路径就是http://127.0.0.1:8080/项目应用名称/QQServlet
,在这里另提一点是,浏览器不可见。
以路径名称开头的相对路径
这样的路径不论出现在哪里,其参照路径永远是当前访问路径的资源路径,也是我们之前提到资源路径。
特例
在重定向的时候,按照常理他应该属于后台路径,其应该被服务器标识为https://localhost:8080/untitiled/Servlet
,但是这是错误的。
response.sendRedirect("/Servlet");
因为对于response.sendRedirect
不仅可以完成在当前Web应用的重定向,还可以跳转到其他项目中,所以他的参照路径为http://127.0.0.1:8080
,即Web服务器的根目录。
所以对于这种情况的正确写法是
response.sendRedirect(request.getContextPath()+"/Servlet");
总结
我们在写代码的时候,可以先加上斜杠,然后分析他属于前台还是后台,然后将其补全成绝对路径,然后判断时候可以定位到确定资源。如果定位不到就把斜杠去掉,分析他当前的资源路径,然后写出正确的相对路径。