3

我有一种下面的过滤器映射我的 web xml。但是部署失败。有替代方案吗?谢谢

<filter-mapping>
    <filter-name>TestFilter</filter-name>
    <url-pattern>*.js</url-pattern>
</filter-mapping> <!-- this works -->

<filter-mapping>
    <filter-name>TestFilter</filter-name>
    <url-pattern>/Application/*.html</url-pattern>
</filter-mapping> <!-- this doesn't work with parsing error as below-->

错误

java.lang.IllegalArgumentException: Invalid URL Pattern: [{0}]
at org.glassfish.web.deployment.node.WebResourceCollectionNode.setElementValue(WebResourceCollectionNode.java:136)
at com.sun.enterprise.deployment.node.SaxParserHandler.endElement(SaxParserHandler.java:583)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:609)
4

1 回答 1

1

恐怕/Application/*.html不支持按后缀和前缀混合映射,如。您需要使用以下模式之一进行映射:

  • /Application/*(所有带/Application前缀的都将被映射)
  • /*.html(所有带html后缀的都会被映射)

如果您想将它们混合在一起,您可以通过前缀(第一个选项)映射到代理 servlet,该代理 servlet 将解析请求中的 URL 并将其转发到适当的 servlet 与ServletContext.html#getNamedDispatcherforward(req, resp),就像这样一个名为application-html

if (request.getRequestURI().endsWith(".html")) {
  request.getServletContext()
    .getNamedDispatcher("application-html")
    .forward(request, response)
}
于 2017-05-01T10:40:55.873 回答