Servlet 无法使用 Tomcat 8 中的某些路径
Servlet not working with some paths in Tomcat 8
我需要为我的应用程序中的所有 PDF 文件设置 content-disposition header 响应。所以我认为最好的方法是使用 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 文件夹中。有什么建议吗?
请帮忙,我整天都被这个问题困住了:'(
是的,网络应用程序是独立的应用程序。一般来说,一个应用程序真的不知道另一个应用程序。 Tomcat 中 webapps 下的每个 文件夹都是一个不同的应用程序。
你有三个选择:
- 使文件夹
resources
成为一个完整的 webapp(至少有一个 WEB-INF
目录)并且 link 到 /resources/files/myPDF.pdf
.
- 将 PDF 移动到您的网络应用程序下,我相信您说的是不可能的。
- 获取您的 webapp 的文件源路径并创建一个可以发送这些文件的文件服务器 servlet。
最简单的选项是 1。您没有提及任何关于安全性的内容(这意味着 任何人 都可以访问您服务器上的 /resources
)但最简单的是在 resources
目录下创建一个 WEB-INF/web.xml
文件。它基本上是空的:
<?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 网络应用程序。
如果您需要修改默认值 HttpResponse
,那么您还需要 resources
网络应用中的一些代码。
我需要为我的应用程序中的所有 PDF 文件设置 content-disposition header 响应。所以我认为最好的方法是使用 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 文件夹中。有什么建议吗? 请帮忙,我整天都被这个问题困住了:'(
是的,网络应用程序是独立的应用程序。一般来说,一个应用程序真的不知道另一个应用程序。 Tomcat 中 webapps 下的每个 文件夹都是一个不同的应用程序。
你有三个选择:
- 使文件夹
resources
成为一个完整的 webapp(至少有一个WEB-INF
目录)并且 link 到/resources/files/myPDF.pdf
. - 将 PDF 移动到您的网络应用程序下,我相信您说的是不可能的。
- 获取您的 webapp 的文件源路径并创建一个可以发送这些文件的文件服务器 servlet。
最简单的选项是 1。您没有提及任何关于安全性的内容(这意味着 任何人 都可以访问您服务器上的 /resources
)但最简单的是在 resources
目录下创建一个 WEB-INF/web.xml
文件。它基本上是空的:
<?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 网络应用程序。
如果您需要修改默认值 HttpResponse
,那么您还需要 resources
网络应用中的一些代码。