一次页面引用文件无法正确加载问题的解决
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()%>,而且这些被引入的文件调用路径都不对,比如在页面中调用:
对于<%=request.getContextPath()%>的作用,可以参考我的另一篇博文《不同情况下request.getContextPath()值的区别 》。如果将项目根路径设置为空的话,这个文件在页面被浏览器加载时,应该是加上服务器路径然后被加载,如:
但我的项目页面中的调用文件被加载的时候没有在文件路径前面自动增加服务器路径,导致文件加载失败:
非常奇怪,服务器路径应该是自动被添加的,怎么会没有增加上呢?找了好久,最终明白了,是因为Tomcat项目服务配置错误!
平时想在Tomcat中增加一个不同端口号的项目,可以直接在conf/server.xml中增加脚本片段:
这样可以使用8081端口访问这个项目。注意这段片段中Context标签的path值,它是项目的根路径,有时为了方便会将根路径设置为空,这样url写着方便。我的本意是将根路径设置为空,结果这里不注意,写成了斜杠“/”。写成斜杠不要紧,如果你引用的文件路径前面带了:
直接导致页面中引用文件的前面多了一个斜杠,变成:
看到没有,引用文件前面多了一个斜杠,变成两个斜杠。而巧合的是,服务器路径一般是:
这样的形式,http冒号后面恰巧也是两个斜杠,这会迷惑服务器以为这个路径已经增加过服务器路径了,所以服务器路径不再被添加,该文件也就不会被正确引用了。
而如果引用文件路径前如果没有“<%=request.getContextPath()%>”,则因为没有出现两个斜杠,服务器路径被正确加载,所以能够被正确加载。
又长了一个教训,如果你想图方便,将项目根路径设置为空,千万要将path的值设置成两个双引号:
中间不要放包括斜杠在内的任何东西。
本文出自【我是干勾鱼的博客】
使用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" />
中间不要放包括斜杠在内的任何东西。
相关文章推荐
- 神经网络入门3
- RAC 11G修改不同网段的IP地址
- Android的frameworks层键盘事件处理流程分析
- 用jquery技术实现table的奇数行变色
- 矩形操作工具箱
- arcgis10.3下载,arcgis pro的下载地址
- 项目的创建流程
- Imputing missing data with R; MICE package
- 神经网络入门2
- OWIN是什么?OWIN的英文全称是Open Web Interface for .NET。
- Leetcode 4 Median of Two Sorted Arrays
- 获取一张文字位图
- STL - 容器 - vector简单应用
- TSql stuff 函数用法
- Add and Search Word - Data structure design 解答
- 性能测试之Nginx性能调优课程
- 神经网络入门1
- 获取文本宽度和高度
- 服务协议
- 查看 MySQL 数据库中每个表占用的空间大小