java - 使用默认 servlet 时如何允许访问静态内容

标签 java servlets

我将所有请求映射到/* 到特定的 servlet。 此配置隐藏了我的静态内容。

如何允许访问特定文件(例如 crossdomain.xml)?

最佳答案

当您将/* 映射到特定的 servlet 时,所有请求都将转发到该 servlet,除非您提供到另一个 servlet 的更明确的映射。

也就是说,如果您将/* 映射到 ServletA,并将/static/* 映射到 ServletB,那么接下来的 Servlet 将被调用。

http://localhost:8080/abc.jpg            -> ServletA
http://localhost:8080/static/abc.jpg     -> ServletB
http://localhost:8080/xyz/abc.jpg        -> ServletA

因此,您有一个选择是编写一个 Servlet 来处理静态内容,它将获取文件并将其作为响应返回。您可以将该 servlet 映射到前缀为/static/* 的前缀。这需要更新对静态文件的所有 URL 引用以包含此“/static”部分。

如果这对您来说不可行,那么您可能可以使用相同的 servlet,但映射到多个 URL 模式(可能通过扩展),如下所示。

<servlet>
    <servlet-name>static-servlet</servlet-name>
    <servlet-class>xxx.yyy.StaticServlet</servlet-class>
</servlet>

<servlet-mapping>
    <servlet-name>static-servlet</servlet-name>
    <url-pattern>*.xml</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>static-servlet</servlet-name>
    <url-pattern>*.jpg</url-pattern>
</servlet-mapping>

如果您希望将其细化到每个文件的级别,您也可以将 servlet 映射到您的文件 URL。

关于java - 使用默认 servlet 时如何允许访问静态内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6197562/

相关文章:

javascript - 如何在 JavaScript 文件中正确编写 servlet url

java - 访问Tomcat中的相关文件

java - java类中的Struts2国际化

java - ReSTLet 客户端卡住 HTTPS 请求

java - 如何在JSP中调用JS函数?

java - 获取 JSTL 页面表上的 JSON 数据

java - CouchDB 中的全文搜索

java - Android SQLiteDatabase - 从数据库中删除值后 ListView 和数据库 ID 不匹配

java - Docker 中的 Spring Boot 静态文件夹

html - Java Web 小服务程序 : writing plain text on an existing html template file