【问题标题】:Servlet not working with some paths in Tomcat 8 [duplicate]Servlet 不适用于 Tomcat 8 中的某些路径 [重复]
【发布时间】:2020-10-16 13:28:20
【问题描述】:

我需要为我的应用程序中的所有 PDF 文件设置内容处置标头响应。所以我认为最好的方法是使用 servlet:

public class PdfServlet extends HttpServlet {

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    System.out.println("---> Servlet working");
    //Some code here
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    System.out.println("---> Servlet working");
    //Some code here
}

}

我像这样配置了我的应用程序 web.xml:

<servlet>
    <servlet-name>pdfServlet</servlet-name>
    <servlet-class>net.universia.pymes.servlets.PdfServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>pdfServlet</servlet-name>
    <url-pattern>*.pdf</url-pattern>
</servlet-mapping>

我需要获取的 PDF 是 {TOMCAT_HOME}/webapps/resources/files/*.pdf 中的静态文件,问题是当我指向那个 Url (localhost:8080/resources/files/myPDF.pdf ) 在浏览器中,servlet 不打印任何内容,也不调用 servlet。但是,当我从浏览器中点击 docbase 文件夹中的 PDF {TOMCAT_HOME}/webapps/FRONTEND_BANCO_CO/res/myPDF.pdf --> localhost:8080/res/myPDF.pdf 时,它确实有效,它打印了消息我在 doGet() 方法中。即使我点击了一个不存在但最后有 .pdf 的 url,它也会执行 servlet 并且可以工作。

我尝试将资源文件夹从 {TOMCAT_HOME}/webapps/resources/ 移动到 {TOMCAT_HOME}/webapps/FRONTEND_BANCO_CO/resources/ 并且它有效。所以我得出结论,这与我在 server.xml 中的上下文标记处的路径属性有关:

<Context path="" reloadable="true" docBase="FRONTEND_BANCO_CO"></Context>

我无法更改路径属性,所以这不是一个选项。我也不能将资源文件夹留在 docbase 文件夹中。有什么建议吗? 请帮忙,我整天都被这个问题困扰:'(

【问题讨论】:

    标签: java pdf tomcat servlets content-disposition


    【解决方案1】:

    是的,网络应用程序是独立的应用程序。一般来说,一个应用程序真的不知道另一个应用程序。 Tomcat 中 webapps 下的每个文件夹都是一个不同的应用程序

    您有三个选择:

    1. 使文件夹resources成为一个完整的webapp(至少有一个WEB-INF目录)并链接到/resources/files/myPDF.pdf
    2. 将 PDF 移动到您的 web 应用下,我相信您说这是不可能的。
    3. 获取您的 webapp 的文件源路径并创建一个可以发送这些文件的文件服务器 servlet。

    最简单的选择是 1。您没有提及任何有关安全性的内容(意味着 任何人 都可以访问您服务器上的 /resources),但最简单的方法是在下面创建一个 WEB-INF/web.xml 文件你的resources 目录。基本上是空的:

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
             version="3.1">
    </web-app>
    

    这现在应该允许您点击 http:://localhost:8080/resources/files/myPDF.pdf,因为 resources 目录现在是 JEE Web 应用程序。

    如果您需要修改默认的HttpResponse,那么您还需要resources webapp 中的一些代码。

    【讨论】:

    • 谢谢你,你救了我的一天!!我选择了第一个选择,现在它就像一个魅力。
    猜你喜欢
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 2023-04-07
    相关资源
    最近更新 更多