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

标签 java spring servlets web.xml

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

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

现在,我还必须提供一些静态 PDF 文件。配置它的最干净的方法是什么?我目前只提供四到五个动态文件,并且预计不会增加(如果这有帮助的话)。

最佳答案

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

我相信您已经知道,问题的根源在于您的 web.xml 配置为将对 *.pdf 的所有请求发送到您的 Spring servlet。显然,要尝试的事情是让 servlet 识别哪些请求是针对静态 PDF 的,然后将请求在内部转发到该静态文件,但由于该文件可能以 .pdf 结尾,因此该请求将仅通过 servlet 返回再次令人作呕。

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

我能想到的唯一选择是制作 url-patternweb.xml有点不太宽泛,因此只有动态 PDF 请求才会路由到 servlet,而静态 PDF 请求才会路由到文件,但这需要对文档进行某种命名约定,这可能不是一个选项。

关于java - 在 Tomcat/Spring 中映射静态和动态文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1601442/

相关文章:

JFrame/JFXPanel 中的 Java-FX 菜单栏 : First click not recognized

Java.lang.VerifyError

java - 我的 REST 方法应该有一个单独的 Controller 吗?

java tomcat : how to use JOAuth properly

java - 关于 JSP include 指令和 JSP include 标记的一些信息

java - 为什么我的示例不抛出 ConcurrentModificationException

java - 使用 Jackson 获取动态属性名称

java - 用于浏览器和 Web 服务的 Spring

spring - 在 Angular 5 中接收 Flux SSE

java - 将数据传递给 servlet