javaweb中web.xml和server.xml的配置冲突如何解决?

项目中用到一个过滤器,因为和tomcat静态资源路径配置上的冲突,导致过滤器失效。
相关代码如下:


server.xml

<!-- 静态资源路径配置 -->
<Context crossContext="true" docBase="/var/docs/pdf/" path="/pdf" reloadable="true"/>

通过此配置,可以由 localhost:8080/pdf/aaa.pdf 访问到静态资源。


web.xml:

    <filter>
        <filter-name>PDFFilter</filter-name>
        <filter-class>com.plt.filter.PDFFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>PDFFilter</filter-name>
        <url-pattern>*.pdf</url-pattern>
    </filter-mapping>

通过此配置,所有 .pdf 的静态资源请求都会先进入过滤器。


当web.xml加入过滤器配置后,由 localhost:8080/pdf/aaa.pdf 发生的访问静态资源请求不再经过过滤器;
得从 localhost:8080/aaa.pdf 或者 localhost:8080/pdfx/aaa.pdf 进入才能匹配到过滤器(即/pdf这一路由输入不正确),可是这样又无法访问到静态资源;
将过滤器匹配规则改为 /pdf/* 的话,无论如何也都无法进入过滤器;
希望能实现形似 /pdf/*.pdf 的匹配逻辑,可是该逻辑不被规则允许。
此问题如何解决?

阅读 3.1k
2 个回答

web.xml再配置下面看看

<filter>
    <filter-name>PDFFilter</filter-name>
    <filter-class>com.plt.filter.PDFFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>PDFFilter</filter-name>
    <url-pattern>/pdf/*.pdf</url-pattern>
</filter-mapping>

直接写一个servlet,登陆的读取pdf, 输出信息. 没登录的返回个提示.
离了tomcat不会输出静态资源了么?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题