首先在谈到basePath之前,我想先来讨论一下相对路径与绝对路径的区别。
相对路径-以引用文件之网页所在位置为参考基础,而建立出的目录路径。
绝对路径-以Web站点根目录为参考基础的目录路径。
其实绝对路径与相对路径的不同处,只在于描述目录路径时,所采用的参考点不同。由于对网站上所有文件而言,根目录这个参考点对所有文件都是一样的,因此,运用以根目录为参考点的路径描述方式才会被称之为绝对路径。
在这里需要讲几个特殊符号:
"/"代表根目录,".."代表上一层目录,而"../../"所代表的是上一层目录的上一层目录。假设你注册了域名www.blabla.cn,并申请了虚拟主机,你的虚拟主机提供商会给你一个目录,比如www,这个www就是你网站的根目录。
假设你在www根目录下放了一个文件index.html,这个文件的绝对路径就是: http://www.blabla.cn/index.html。
假设你在www根目录下建了一个目录叫html_tutorials,然后在该目录下放了一个文件index.html,这个文件的绝对路径就是http://www.blabla.cn/html_tutorials/index.html
了解了相对路径与绝对路劲的概念后,我们来看看所谓的bassPath是怎么写的:
String path = request.getContextPath();
String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";
看看上面的代码,我们来了解一下它具体的意思,
request.getContextPath()是在开发Web项目时,经常用到的方法,其作用是获取当前的系统路径。request.getContextPath()得到项目名,如果项目为根目录,则得到一个"",即空的字条串, 如果项目为Test, <%=request.getContextPath()% >/ 将得到Test/,服务器端的路径则会自动加上.
request.getScheme()返回的协议名称,默认是http。
request.getServerName()返回的是你浏览器中显示的主机名(例127.0.0.1).
getServerPort()获取服务器端口号(例:8080)。
我们不防把basePath打印出来看看是什么,http://127.0.0.1:8080/Test。
值得注意的是:request.getServerName()始终获取的是浏览器中显示的主机名,比如可以举个例子,我们在浏览其中输入的主机名是本地主机名192.168.1.4,那么我们在内网中可以通过http://192.168.1.4:8080/Test这个路径来访问项目,如果是外网需要访问则需要提供域名http://www.blabla.cn/Test来访问,当然内网也可以通过这个路径来访问,此时打印出来的basePath是这个路径http://www.blabla.cn:8080/Test了,而不是http://192.168.1.4:8080/Test
在开发中试用basePath能够很好的避免出现路径的问题。
相对路径-以引用文件之网页所在位置为参考基础,而建立出的目录路径。
绝对路径-以Web站点根目录为参考基础的目录路径。
其实绝对路径与相对路径的不同处,只在于描述目录路径时,所采用的参考点不同。由于对网站上所有文件而言,根目录这个参考点对所有文件都是一样的,因此,运用以根目录为参考点的路径描述方式才会被称之为绝对路径。
在这里需要讲几个特殊符号:
"/"代表根目录,".."代表上一层目录,而"../../"所代表的是上一层目录的上一层目录。假设你注册了域名www.blabla.cn,并申请了虚拟主机,你的虚拟主机提供商会给你一个目录,比如www,这个www就是你网站的根目录。
假设你在www根目录下放了一个文件index.html,这个文件的绝对路径就是: http://www.blabla.cn/index.html。
假设你在www根目录下建了一个目录叫html_tutorials,然后在该目录下放了一个文件index.html,这个文件的绝对路径就是http://www.blabla.cn/html_tutorials/index.html
了解了相对路径与绝对路劲的概念后,我们来看看所谓的bassPath是怎么写的:
String path = request.getContextPath();
String basePath = request.getScheme() + "://"+ request.getServerName() + ":" + request.getServerPort()+ path + "/";
看看上面的代码,我们来了解一下它具体的意思,
request.getContextPath()是在开发Web项目时,经常用到的方法,其作用是获取当前的系统路径。request.getContextPath()得到项目名,如果项目为根目录,则得到一个"",即空的字条串, 如果项目为Test, <%=request.getContextPath()% >/ 将得到Test/,服务器端的路径则会自动加上.
request.getScheme()返回的协议名称,默认是http。
request.getServerName()返回的是你浏览器中显示的主机名(例127.0.0.1).
getServerPort()获取服务器端口号(例:8080)。
我们不防把basePath打印出来看看是什么,http://127.0.0.1:8080/Test。
值得注意的是:request.getServerName()始终获取的是浏览器中显示的主机名,比如可以举个例子,我们在浏览其中输入的主机名是本地主机名192.168.1.4,那么我们在内网中可以通过http://192.168.1.4:8080/Test这个路径来访问项目,如果是外网需要访问则需要提供域名http://www.blabla.cn/Test来访问,当然内网也可以通过这个路径来访问,此时打印出来的basePath是这个路径http://www.blabla.cn:8080/Test了,而不是http://192.168.1.4:8080/Test
在开发中试用basePath能够很好的避免出现路径的问题。