在Tomcat / Spring中映射静态和动态文件?
题
我在web.xml中使用以下内容来配置servlet以动态生成PDF。
<servlet-mapping>
<servlet-name>pdfServlet</servlet-name>
<url-pattern>*.pdf</url-pattern>
</servlet-mapping>
现在,我还必须提供一些静态PDF文件。什么是最简洁的配置方式?我目前只提供四到五个动态文件,如果这有用的话,不要指望它会增加。
解决方案
您根本不需要配置静态文件;如果Tomcat可以找到一个文件,它将为它提供服务。只有在希望Tomcat调用某些代码时才需要配置。
其他提示
这是一个令人惊讶的恼人问题,我还没有找到一个令人满意的解决方案。
我确信你知道问题的基础是你的web.xml被配置为将所有* .pdf请求发送到你的Spring servlet。显而易见的是,servlet可以识别哪些请求是针对静态PDF的,然后将请求内部转发到该静态文件,但由于该文件可能以.pdf结尾,因此请求将返回通过servlet再次,ad nauseum。
我尝试过的唯一解决方法是让servlet从servlet上下文中手动读取静态PDF(使用 ServletContext.getResource()
),并将其写入servlet输出流,确保正确设置各种标头。这不是很好。
我能想到的唯一选择是使 web.xml
中的 url-pattern
稍微宽泛一些,这样只有动态PDF请求才能被路由到servlet和静态PDF的请求被路由到文件,但这需要某种文档的命名约定,这可能不是一个选项。
不隶属于 StackOverflow