web-dev-qa-db-fra.com

Quelle est la signification de url-pattern dans web.xml et comment configurer servlet?

J'ai configuré manuellement web.xml pour ma candidature. Maintenant, je suis confronté à des problèmes lors de l'exécution de mon application. J'essaie d'accéder à ma servlet à partir de ma page jsp. Mais, il jette l'erreur en tant que page not found.

Les servlets sont placés sous l'emplacement du dossier

<application folder>/WEB-INF/classes/<package>

Alors, quelles devraient être les entrées pour les servlets dans url-pattern et servlet-mapping. Ainsi, servlet peut être accessible via une URL.

44
gkumar

url-pattern est utilisé dans web.xml pour mapper votre servlet vers une URL spécifique. Veuillez voir ci-dessous le code XML, un code similaire que vous pouvez trouver dans votre web.xml fichier de configuration.

<servlet>
    <servlet-name>AddPhotoServlet</servlet-name>  //servlet name
    <servlet-class>upload.AddPhotoServlet</servlet-class>  //servlet class
</servlet>
 <servlet-mapping>
    <servlet-name>AddPhotoServlet</servlet-name>   //servlet name
    <url-pattern>/AddPhotoServlet</url-pattern>  //how it should appear
</servlet-mapping>

Si vous changez url-pattern de AddPhotoServlet de /AddPhotoServlet à /MyUrl. Ensuite, AddPhotoServlet servlet peut être accessible à l'aide de /MyUrl. Bon pour des raisons de sécurité, lorsque vous souhaitez masquer l'URL de votre page.

Java Servlet url-pattern Spécification:

  1. Une chaîne commençant par un caractère '/' et se terminant par un '/ *' Le suffixe est utilisé pour le mappage de chemin.
  2. Une chaîne commençant par un préfixe '*.' est utilisée comme mappage d'extension.
  3. Une chaîne contenant uniquement le caractère '/' indique le servlet "par défaut" de l'application. Dans ce cas, le chemin de la servlet est l'URI de la demande moins le chemin du contexte et les informations sur le chemin sont nulles.
  4. Toutes les autres chaînes sont utilisées uniquement pour les correspondances exactes.

Référence: spécification Java Servlet

Vous pouvez également lire ceci Basics of Java Servlet

68
Ravi

Le servlet-mapping a deux balises enfant, url-pattern et servlet-name. url-pattern spécifie le type d'URL pour lequel le servlet indiqué dans nom-servlet doit être appelé. Sachez que le conteneur utilisera la casse pour les comparaisons de chaînes pour la correspondance de servlets.

Première spécification de url-pattern Un fichier web.xml Pour le contexte de serveur sur le conteneur de servlets sur le serveur .com correspond au modèle dans <url-pattern>/status/*</url-pattern> comme suit:

http://server.com/server/status/synopsis               = Matches
http://server.com/server/status/complete?date=today    = Matches
http://server.com/server/status                        = Matches
http://server.com/server/server1/status                = Does not match

Deuxième spécification de url-pattern Un contexte situé sur le chemin d'accès/exemples sur l'agent à example.com correspond au modèle de <url-pattern>*.map</url-pattern> comme suit:

 http://server.com/server/US/Oregon/Portland.map    = Matches
 http://server.com/server/US/server/Seattle.map     = Matches
 http://server.com/server/Paris.France.map          = Matches
 http://server.com/server/US/Oregon/Portland.MAP    = Does not match, the extension is uppercase
 http://example.com/examples/interface/description/mail.mapi  =Does not match, the extension is mapi rather than map`

Troisième spécification de url-mapping, Un mappage contenant le motif <url-pattern>/</url-pattern> Correspond à une demande si aucun autre motif ne correspond. C'est le mappage par défaut. Le servlet associé à ce modèle est appelé le servlet par défaut.

Le mappage par défaut est souvent dirigé vers la première page d'une application. Le fait de fournir explicitement un mappage par défaut garantit également que les demandes d'URL mal formées dans le retour de l'application sont gérées par l'application plutôt que de renvoyer une erreur.

L'élément servlet-mapping ci-dessous mappe l'instance de servlet server avec le mappage par défaut.

<servlet-mapping>
  <servlet-name>server</servlet-name>
  <url-pattern>/</url-pattern>
</servlet-mapping>

Pour le contexte qui contient cet élément, toute demande qui n'est pas gérée par un autre mappage est transmise au servlet server.

Et surtout, nous devrions connaître la règle pour le mappage du chemin d’URL

  1. Le conteneur essaiera de trouver une correspondance exacte du chemin de la requête au chemin de la servlet. Une correspondance réussie sélectionne le servlet.
  2. Le conteneur essaiera de manière récursive de faire correspondre le préfixe de chemin le plus long. Ceci est fait en descendant dans l’arbre des chemins un répertoire à la fois, en utilisant le caractère ’/’ comme séparateur de chemin. La correspondance la plus longue détermine le servlet sélectionné.
  3. Si le dernier segment du chemin de l'URL contient une extension (par exemple .jsp), le conteneur de servlets tentera de faire correspondre un servlet qui gère les demandes d'extension. Une extension est définie comme la partie du dernier segment après le dernier caractère ’.’.
  4. Si aucune des trois règles précédentes ne donne lieu à une correspondance de servlet, le conteneur tentera de fournir le contenu correspondant à la ressource demandée. Si un servlet "par défaut" est défini pour l'application, il sera utilisé.

Référence RL Pattern

31
Sanshayan