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> 

Au-dessus est l'extrait de Tomcat de web.xml. Le modèle d'URL *NEXTEVENT* au démarrage lancejava.lang.IllegalArgumentException: non valide <url-pattern> dans la cartographie servlet

java.lang.IllegalArgumentException: non valide < url-pattern> dans la cartographie de servlet

Il sera très apprécié si quelqu'un peut faire allusion à l'erreur.

Répondre

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

Le modèle d'URL n'est pas valide. Il peut se terminer par un astérisque ou commencer par un astérisque (pour indiquer un mappage d'extension de fichier).

La spécification url-pattern:

  • un début chaîne avec un caractère «/» et se terminant par le suffixe «/* » est utilisé pour le mappage de trajet.
  • Une chaîne commençant par un préfixe '*.' Est utilisée en tant que mappage .
  • Une chaîne contenant uniquement le caractère '/' indique la servlet "par défaut" de l'application. Dans ce cas le chemin de servlet est la demande URI moins le chemin de contexte et l'information de chemin est nulle.
  • Toutes les autres chaînes sont utilisées uniquement pour les correspondances exactes.

Voir la section 12.2 de la Java Servlet Specification version 3.1 pour plus de détails.

+3

Voici une bonne explication des mappages de servlet: http://javapapers.com/servlet/what-is-servlet-mapping/ – ripper234

1

Une solution de contournement permettant d'y parvenir consiste à ajouter un filtre de servlet pour effectuer des réécritures d'URL, par exemple. réécrire NEXTEVENT à/NEXTEVENT/(celui avant le NEXTEVENT)/ (celui après NEXTEVENT) ou quelque chose de similaire.