问题
<servlet>
<servlet-name>myservlet</servlet-name>
<servlet-class>workflow.WDispatcher</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myservlet</servlet-name>
<url-pattern>*NEXTEVENT*</url-pattern>
</servlet-mapping>
Above is the snippet from Tomcat\'s web.xml
. The URL pattern *NEXTEVENT*
on start up throws
java.lang.IllegalArgumentException: Invalid <url-pattern> in servlet mapping
It will be greatly appreciated if someone can hint at the error.
回答1:
<url-pattern>*NEXTEVENT*</url-pattern>
The URL pattern is not valid. It can either end in an asterisk or start with one (to denote a file extension mapping).
The url-pattern specification:
- A string beginning with a ‘/’ character and ending with a ‘/*’ suffix is used for path mapping.
- A string beginning with a ‘*.’ prefix is used as an extension mapping.
- A string containing only the ’/’ character indicates the "default" servlet of the application. In this case the servlet path is the request URI minus the context path and the path info is null.
- All other strings are used for exact matches only.
See section 12.2 of the Java Servlet Specification Version 3.1 for more details.
回答2:
A workaround that can achieve that is to add a servlet filter to do URL re-writes e.g. re-write NEXTEVENT to /NEXTEVENT/(the one before the NEXTEVENT)/(the one after NEXTEVENT) or something similar.
来源:https://stackoverflow.com/questions/26732/java-lang-illegalargumentexception-invalid-url-pattern-in-servlet-mapping