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

文章详细介绍了在使用Tomcat部署项目时遇到的问题,即页面加载速度慢,原因是Tomcat项目服务配置错误导致的路径引用问题。通过调整conf/server.xml中的Context标签path值,避免在路径前添加斜杠来解决此问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载请注明出处:http://blog.youkuaiyun.com/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" /> 

中间不要放包括斜杠在内的任何东西。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值