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

问题描述:

我在web.xml中使用以下配置来动态生成PDF的servlet。在Tomcat/Spring中映射静态和动态文件?

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

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

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

+0

我以前在所有PDF请求中都有Tomcat调用代码;它们都是由iText动态构建的。现在,我需要Tomcat来传递静态文件。这不会被servlet映射捕获吗? – 2009-10-21 16:11:13

+0

啊,你的意思是静态的PDF文件(即*匹配你的URL规则的文件)。好的,不能帮你:) – 2009-10-21 17:09:02

+0

是的。是的,似乎唯一的解决方案是单独映射所有动态的,没有通配符。 – 2009-10-21 19:53:42

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

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

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

我能想到的唯一选择是让url-patternweb.xml不那么宽泛,以便只有动态PDF请求才能路由到servlet,并且静态PDF请求会路由到该文件,但这需要某种文档的命名约定,这可能不是一种选择。

+0

我可能会尝试命名约定;手动提供静态文件似乎不那么干净。基本上,我们正在从使用iText转为使用XDP(XML + PDF)来生成动态文档,但XDP需要提供静态PDF模板。 – 2009-10-21 16:13:11