pyra glassfish web xml 过滤器 url 解析
payara glassfish web xml filter url parsing
我有一种下面的过滤器映射我的网站 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)
恐怕不支持像 /Application/*.html
那样通过后缀和前缀混合映射。您需要使用以下模式之一进行映射:
/Application/*
(所有带有 /Application
前缀的都将被映射)
/*.html
(所有带有 html
后缀的都将被映射)
如果你想将它们混合在一起,你可以通过前缀(第一个选项)映射到一个代理 servlet,它会解析请求中的 URL 并使用 ServletContext.html#getNamedDispatcher 和 forward(req, resp)
,对于名为 application-html
:
的 servlet 就像这样
if (request.getRequestURI().endsWith(".html")) {
request.getServletContext()
.getNamedDispatcher("application-html")
.forward(request, response)
}
我有一种下面的过滤器映射我的网站 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)
恐怕不支持像 /Application/*.html
那样通过后缀和前缀混合映射。您需要使用以下模式之一进行映射:
/Application/*
(所有带有/Application
前缀的都将被映射)/*.html
(所有带有html
后缀的都将被映射)
如果你想将它们混合在一起,你可以通过前缀(第一个选项)映射到一个代理 servlet,它会解析请求中的 URL 并使用 ServletContext.html#getNamedDispatcher 和 forward(req, resp)
,对于名为 application-html
:
if (request.getRequestURI().endsWith(".html")) {
request.getServletContext()
.getNamedDispatcher("application-html")
.forward(request, response)
}