您的位置:首页 > 其它

一次页面引用文件无法正确加载问题的解决

2015-10-13 10:21 489 查看
转载请注明出处:http://blog.csdn.net/dongdong9223/article/details/49094127

本文出自【我是干勾鱼的博客

使用Tomcat时,我习惯直接修改Tomcat下conf/server.xml文件,在里面添加项目路径,而不是在eclipse中设置Tomcat,将项目部署上去。

这次出现了一个问题。我发现我部署的一个项目页面展示非常慢,在浏览器里调试发现,是因为很多在页面中被引入的文件,例如js、css等都无法正确加载。进一步调试发现,这些引用文件的前面都带有<%=request.getContextPath()%>,而且这些被引入的文件调用路径都不对,比如在页面中调用:

<script type="text/javascript" src='<%=request.getContextPath()%>/view/resource/jquery/jquery.js'></script>


对于<%=request.getContextPath()%>的作用,可以参考我的另一篇博文《不同情况下request.getContextPath()值的区别 》。如果将项目根路径设置为空的话,这个文件在页面被浏览器加载时,应该是加上服务器路径然后被加载,如:

http://localhost:8080/view/resource/jquery/jquery.js


但我的项目页面中的调用文件被加载的时候没有在文件路径前面自动增加服务器路径,导致文件加载失败:

/view/resource/jquery/jquery.js


非常奇怪,服务器路径应该是自动被添加的,怎么会没有增加上呢?找了好久,最终明白了,是因为Tomcat项目服务配置错误!

平时想在Tomcat中增加一个不同端口号的项目,可以直接在conf/server.xml中增加脚本片段:

<Service name="Catalina">

<Connector port="8081" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />

<Connector port="8010" protocol="AJP/1.3" redirectPort="8443" />

<Engine name="Catalina" defaultHost="localhost">

<Host name="localhost"  appBase="webapps"
unpackWARs="true" autoDeploy="true">

<Context path="" docBase="D:\proj\TestProj\webapp" reloadable="true" />

</Host>
</Engine>
</Service>


这样可以使用8081端口访问这个项目。注意这段片段中Context标签的path值,它是项目的根路径,有时为了方便会将根路径设置为空,这样url写着方便。我的本意是将根路径设置为空,结果这里不注意,写成了斜杠“/”。写成斜杠不要紧,如果你引用的文件路径前面带了:

<%=request.getContextPath()%>


直接导致页面中引用文件的前面多了一个斜杠,变成:

<script type="text/javascript" src='//view/resource/jquery/jquery.js'></script>


看到没有,引用文件前面多了一个斜杠,变成两个斜杠。而巧合的是,服务器路径一般是:

http://localhost:8080/...


这样的形式,http冒号后面恰巧也是两个斜杠,这会迷惑服务器以为这个路径已经增加过服务器路径了,所以服务器路径不再被添加,该文件也就不会被正确引用了。

而如果引用文件路径前如果没有“<%=request.getContextPath()%>”,则因为没有出现两个斜杠,服务器路径被正确加载,所以能够被正确加载。

又长了一个教训,如果你想图方便,将项目根路径设置为空,千万要将path的值设置成两个双引号:

<Context path="" docBase="D:\proj\TestProj\webapp" reloadable="true" />


中间不要放包括斜杠在内的任何东西。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: