我正在尝试在两个位置提供jsp文件。 (jsp文件使用request.getRequestURI()
来决定要投放的内容。)我正在使用下面的web.xml
。
<welcome-file-list>
<!--no / here or url pattern will need //-->
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Main</servlet-name>
<jsp-file>/index.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>Main</servlet-name>
<url-pattern>/advanced/</url-pattern>
</servlet-mapping>
虽然它工作正常,但tomcat似乎将jsp缓存在/advanced/
而不是/
处的缓存。我怎样才能解决这个问题,以便两者都相同? (我不想缓存开发,仅用于生产。)
我只能在tomcat的work
目录中看到一个java文件,所以我想这个问题与我使用jsp的事实无关,但与我设置映射的方式有关。
编辑:我已经检查了curl中的标头,我可以看到tomcat没有发送Last-Modified
标头,所以我不明白为什么任何浏览器都会缓存它。另外,使用curl,我可以看到/更新为更新jsp,但/ advanced /不是。
EDIT2:我在org.apache.jasper.compiler.Compiler#isOutDated(boolean)
花了一些时间,我发现只有我访问的第一个网址是标记为outDated的网址。我访问的第二个URL从未标记为outDated。所以就好像tomcat保留了JspServlet
的两个实例,但共享该文件的相同outDated信息,所以当一个JspServlet
将其标记为outDated并设置reload
时,第二个JspServlet永远不会重新编译它也不提供重新编译的版本。我该如何修复/解决此问题?
答案 0 :(得分:0)
如果您认为它是tomcat中的错误,open a bug report。开发人员通常可以快速分类错误。这个错误刚刚fixed,将在7.0.62&amp; 8.0.22。