Tomcat服务缓存别名



我试图在两个位置提供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无关,而是与我设置映射的方式有关。

EDIT:我已经检查了curl中的头,我可以看到tomcat没有发送Last-Modified头,所以我不明白为什么任何浏览器都会缓存它。另外,使用curl,我可以看到/在我更新jsp时被更新了,但是/advanced/没有。

EDIT2:我在org.apache.jasper.compiler.Compiler#isOutDated(boolean)花了一些时间,我发现只有我访问的第一个URL是标记为过时的。我访问的第二个URL从来没有被标记为过时。因此,就好像tomcat保留了两个JspServlet实例,但共享了相同的过期信息,所以当一个JspServlet将其标记为过期并设置reload时,第二个JspServlet永远不会重新编译它,也不会提供重新编译的版本。我如何解决/解决这个问题?

如果您认为这是tomcat中的错误,请打开错误报告。开发人员通常能够快速找到漏洞。这个bug刚刚修复,将会在7.0.62中出现。8.0.22 .

最新更新