spring MVC开发中静态页面访问路径为什么出错
2016-09-06
一般网站部署后,访问路径是不带项目名称的,比如最代码的服务器部署目录:/data/www/zuidaima/,在tomcat的conf/server.xml中host的访问配置是:
<Host name="localhost" appBase="webapps"
unpackWARs="false" autoDeploy="false"
xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/data/www/zuidaima/" path="/">
</Host>
spring MVC开发中静态页面访问路径出错的原因有很多种,原因也很复杂,下面分析几种常见并给出相应分析和解决方案:
1、.java web容器中项目部署时的访问路径
一般网站部署后,访问路径是不带项目名称的,比如服务器部署目录:/data/www/name/,在tomcat的conf/server.xml中host的访问配置是:
<Host name="localhost" appBase="webapps"
unpackWARs="false" autoDeploy="false"
xmlValidation="false" xmlNamespaceAware="false">
<Context docBase="/data/www/name/" path="/">
</Host>
这样http的访问地址就是http://www.name.com/
而在eclipse jee集成tomcat版本本地开发时,eclipse的配置中path的配置是带有项目路径的
所以访问的时候除了要有端口外,还得带上项目路径,比如:http://localhost:8080/name/
建议Path设置为空,这样本地debug时,所有访问路径和线上是一致的,不会出现线上访问404的情况。
2、mvc开发中view层中访问路径的问题
比如jsp中配置静态页面的地址:
<link href="/resource/css/bootstrap.min.css" rel="stylesheet" />
则该文件在项目的本地目录则是:/data/www/name/resource/css/bootstrap.min.css,则其通过http访问是http://www.name.com/resource/css/bootstrap.min.css
其中/resource/css/bootstrap.min.css以/开头则表示是相对于项目根目录而言,则本地访问中,根目录配置是:/data/www/name/,而web网页http访问中根路径是http://www.name.com/。
但是如果出现resource/css/bootstrap.min.css的不以/开头的配置,则其访问路径是相对于当前访问目录而言的,比如首页,分享页,这样配置,所有文件都是可以访问的,因为首页当前目录就是/根目录,但是如果访问比如:http://www.name.com/user/2318804493993984.htm,这样访问就404错误,http真实访问目录是:http://www.name.com/user/resource/css/bootstrap.min.css,这样对照到服务器资源明显就是错误的路径,所以出现这样的配置:
<link href="../resource/css/bootstrap.min.css" rel="stylesheet" />
相当于http://www.name.com/user/../resource/css/bootstrap.min.css,这样和http://www.name.com/resource/css/bootstrap.min.css是一个作用,是否有点豁然贯通了?
所以建议在web开发中,尽量是用相对路径的根目录配置法,这样一目了然,http访问路径和服务器配置路径是一一对应的,当然在很多情况下,静态资源和动态请求是分开域名提供服务的,比如网站的css是:http://static.name.com/resource/css/bootstrap.min.css,这样如果不在同一个域名那只能通过绝对路径访问了。
javascript写错了
url拼错了
数据错误