38
<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> 

Obige ist der Ausschnitt aus Tomcat web.xml. Das URL-Muster *NEXTEVENT* beim Start wirftjava.lang.IllegalArgumentException: Ungültige <url-pattern> in Servletzuordnung

java.lang.IllegalArgumentException: Ungültige < url-pattern> in Servletzuordnung

Es wird stark auf den Fehler hinweisen kann, wenn jemand geschätzt.

Antwort

89
<url-pattern>*NEXTEVENT*</url-pattern> 

Das URL-Muster ist nicht gültig. Es kann entweder mit einem Stern enden oder mit einem beginnen (um eine Dateierweiterungszuordnung zu bezeichnen).

Die URL-Muster Spezifikation:

  • Ein String mit einem Zeichen ‚/‘ beginnt und endet mit einer ‚/ *‘ Suffix wird für die Pfadzuordnung verwendet.
  • Eine Zeichenfolge, die mit einem Präfix '*.' Beginnt, wird als Erweiterung mapping verwendet.
  • Eine Zeichenfolge, die nur das Zeichen '/' enthält, gibt das "Standard" Servlet der Anwendung an. In diesem Fall ist der Servlet-Pfad die Anforderung URI minus dem Kontextpfad und Pfadinfo ist Null.
  • Alle anderen Zeichenfolgen werden nur für exakte Übereinstimmungen verwendet.

Siehe Abschnitt 12.2 der Java Servlet Specification Version 3.1 für weitere Details.

+3

Hier ist eine nette Erklärung der Servlet-Mappings: http://javapapers.com/servlet/what-is-servlet-mapping/ – ripper234

1

Eine Problemumgehung, die das erreichen kann, besteht darin, einen Servlet-Filter hinzuzufügen, um z. schreibe NEXTEVENT zu/NEXTEVENT/(die vor dem NEXTEVENT)/ (die nach NEXTEVENT) oder etwas ähnliches.