前几天做前后端分离的时候遇到了路径引用的问题,在jsp中可以通过${pageContext.request.contextPath }取出部署的程序应用名(绝对路径),而在html中就不能这样做了,如果在html中写入绝对路径,由于服务器与开发环境的路径不一致,项目发布的时候就需要更改绝对路径,那么就会给开发造成很大的不便。
在windows下,根目录是文件夹所在的盘符,在服务器端,根目录是tomcat下的webapp,绝对路径很难保证一致,除非直接把工程目录放在盘符下,不过也有其他解决方法,在工程目录的同一级目录下启动http-server,那么文件的绝对路径就可以与服务器端保持一致。
我的操作是在html中引用相对路径,首先要提一下路径的几种写法:
相对路径:
…/ 表示文件的上一个目录
./ 表示当前文件所在的目录(写和不写等效)
绝对路径:
/ 文件的根目录
不过也遇到了一点问题,就是我在web.xml中写了 welcome-file,也就是访问项目路径的时候会跳到首页,比如访问localhost/student 和直接访问localhost/student/html/index.html效果是一样的,但是访问localhost/student是请求转发操作,url是不会改变的,这就带来一个问题,我在index.html中引用的相对路径全部失效了,原来用…/css/xxx.css可以引用css,直接用localhost/student访问后实际加载的是localhost/css/xxx.css,就无法正确引用了。
以下也有解决方案:
1、在web.xml中去掉welcome-file
2、把index.html直接放在项目目录下而不要放在子目录,那么用相对路径的方法也是可以加载静态资源的,比如说在index.html中用css/xxx.css的方式加载css,当用欢迎页方式访问的时候还是可以用css/xxx.css的方法加载css,因为index.html和css文件夹同在一个项目目录下。