我将所有请求映射到特定的servlet上。
这种配置隐藏了我的静态内容。
如何允许访问特定的文件(例如crossdomain.xml)?
如何允许访问特定的文件(例如crossdomain.xml)?
http://localhost:8080/abc.jpg -> ServletA
http://localhost:8080/static/abc.jpg -> ServletB
http://localhost:8080/xyz/abc.jpg -> ServletA
您可以选择编写一个Servlet来处理静态内容,该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-pattern
,例如 / app / *
。 / static
。 Filter
,它被映射到 /*
,它会自动继续任何 / static
请求链,并将其他请求分派到 / app
。简而言之:
<filter>
<filter-name>filter</filter-name>
<filter-class>com.example.Filter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<servlet>
<servlet-name>controller</servlet-name>
<servlet-class>com.example.Controller</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>controller</servlet-name>
<url-pattern>/pages/*</url-pattern>
</servlet-mapping>
doFilter()
中,使用以下内容:String uri = ((HttpServletRequest) request).getRequestURI();
if (uri.startsWith("/static/")) {
chain.doFilter(request, response); // Goes to default servlet.
} else {
request.getRequestDispatcher("/app" + uri).forward(request, response);
}
还有一个直接的Servlet映射,像这样<servlet-mapping><servlet-name>StaticContentServlet</servlet-name><url-pattern>/crossdomain.xml</url-pattern></servlet-mapping>
可能你可以将你的静态内容放置在不同的URL下,例如/static/*
,然后将此URL映射到一个Servlet,以响应静态内容。