我将所有请求映射到/* 到特定的 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/