一、为什么要写路径?二、为什么写路径这事有点复杂?三、准则四、写路径的步骤五、动态获取上下文路径
一、为什么要写路径?
整个系统要根据功能拆分成许许多多独立的资源资源之间既要完成自身的功能又要和其他资源配合写路径就是为了从一个资源跳转到下一个资源
二、为什么写路径这事有点复杂?
1、先开发再部署
工程目录:我们写代码的地方,但是在服务器上运行的不是这个。部署目录:经过Java源文件编译和目录重组后,IDEA就替我们准备好了可以在服务器上运行的部署目录。区别:因为从工程目录到部署目录经过了目录重组,所以它们的目录结构是不同的。基准:用户通过浏览器访问服务器,而服务器上运行的是部署目录,所以写路径的时候参考部署目录而不是工程目录。对应关系:工程目录下的web目录对应部署目录的根目录,同时部署目录的根目录也是路径中的Web应用根目录。
2、路径的各个组成部分
从最前面一直到Web应用名称这里都是固定写法,到资源名这里要看具体是什么资源。
①具体文件
我们写代码的时候都是在工程目录下操作,所以参照工程目录来说最方便。按照工程目录的目录结构来说,从web目录开始按照实际目录结构写就好了(不包括web目录本身)。
②Servlet
访问Servlet的路径是我们在web.xml中配置的,大家可能注意到了,url-pattern里面的路径我们也是斜杠开头的,但是这个开头的斜杠代表Web应用根目录。
同样是开头的斜杠,超链接路径中的开头斜杠代表服务器根目录,Servlet地址开头的斜杠,代表Web应用根目录,怎么记呢?请看下面的准则。
三、准则
用通俗的大白话来解释:一个路径由谁来解析,其实就是这个路径是谁来用。
那么具体来说,哪些路径是浏览器解析的,哪些路径是服务器解析的呢?
浏览器解析的路径举例:
所有HTML标签中的路径重定向过程中指定的路径
服务器解析的路径举例:
所有web.xml中配置的路径请求转发过程中指定的路径
四、写路径的步骤
五、动态获取上下文路径
1、上下文路径的概念
上下文路径(context path)=/Web应用名称
2、动态获取
由于项目部署的时候,上下文路径是可以变化的,所以写死有可能发生错误。此时我们通过request对象动态获取上下文路径就不用担心这个问题了。调用下面这个方法,每一次获取的都是当前环境下实际的上下文路径的值。
request.getContextPath()