在Tomcat / Spring中映射静态和动态文件?

时间:2009-10-21 15:02:19

标签: java spring servlets web.xml

我在web.xml中使用以下内容来配置servlet以动态生成PDF。

<servlet-mapping>
    <servlet-name>pdfServlet</servlet-name>
    <url-pattern>*.pdf</url-pattern>
</servlet-mapping>

现在,我还必须提供一些静态PDF文件。什么是最简洁的配置方式?我目前只提供四到五个动态文件,如果这有用的话,不要指望它会增加。

2 个答案:

答案 0 :(得分:3)

这是一个令人惊讶的恼人问题,我还没有找到一个令人满意的解决方案。

我确信你知道问题的基础是你的web.xml被配置为将所有* .pdf请求发送到你的Spring servlet。显而易见的是,servlet可以识别哪些请求是针对静态PDF的,然后将请求内部转发到该静态文件,但由于该文件可能以.pdf结尾,因此请求将返回通过servlet再次,ad nauseum。

我尝试过的唯一解决方法是让servlet手动从servlet上下文中读取静态PDF(使用ServletContext.getResource()),并将其写入servlet输出流,确保设置各种标题正确。这不是很好。

我能想到的唯一选择是使url-pattern中的web.xml不那么广泛,以便只有动态PDF请求被路由到servlet,并且静态PDF请求被路由到该文件,但这需要您的文档的某种命名约定,这可能不是一个选项。

答案 1 :(得分:1)

您根本不需要配置静态文件;如果Tomcat可以找到一个文件,它将为它提供服务。只有在希望Tomcat调用某些代码时才需要配置。