44
<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. ­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­

ɢʀᴜɴᴛ
  • 32,025
  • 15
  • 116
  • 110

2 Answers2

102
<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.

Doctor Eval
  • 3,541
  • 3
  • 20
  • 20
McDowell
  • 107,573
  • 31
  • 204
  • 267
  • 3
    Here is a nice explanation of servlet mappings: http://javapapers.com/servlet/what-is-servlet-mapping/ – ripper234 Apr 25 '11 at 11:13
1

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.

talg
  • 1,759
  • 6
  • 22
  • 30