web-dev-qa-db-fra.com

Mappage de servlet à l'aide de web.xml

J'ai une confusion concernant la structure du web.xml pour le mappage de servlet, je n'ai aucun problème en l'exécutant mais j'essaie de comprendre comment nous avons un tel modèle dans le descripteur de déploiement.

<web-app>
    <servlet>
         <servlet-name>Servlet1</servlet-name>
         <servlet-path>foo.Servlet</servlet-path>
    </servlet>
    <servlet-mapping>
         <servlet-name>Servlet1</servlet-name>
         <url-pattern>/enroll</url-pattern>
    </servlet-mapping>
</web-app>

Maintenant, autant que je sache, chaque fois qu'une demande est envoyée pour le modèle d'URL "/ enrôler", le conteneur de servlet va faire correspondre le nom de servlet avec le modèle d'URL et essaiera de trouver le chemin de servlet correspondant et transmettra le contrôle à foo.Servlet. Donc, fondamentalement, il y aurait deux passes, l'une pour trouver le nom du servlet et l'autre pour le chemin du servlet, ma question est de savoir si le conteneur est conçu pour fonctionner de la manière suivante

<web-app>
        <servlet>
             <servlet-name>foo.Servlet</servlet-path>
             <url-pattern>/enroll</url-pattern>
        </servlet>
</web-app>

quel serait l'inconvénient si nous utilisons l'approche suivante. Ce ne serait pas plus efficace et le temps de réponse serait rapide.

29
Mike

Il permet aux servlets d'avoir plusieurs mappages de servlets:

<servlet>
    <servlet-name>Servlet1</servlet-name>
    <servlet-path>foo.Servlet</servlet-path>
</servlet>
<servlet-mapping>
    <servlet-name>Servlet1</servlet-name>
    <url-pattern>/enroll</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Servlet1</servlet-name>
    <url-pattern>/pay</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>Servlet1</servlet-name>
    <url-pattern>/bill</url-pattern>
</servlet-mapping>

Il permet de mapper les filtres sur le servlet particulier:

<filter-mapping>
    <filter-name>Filter1</filter-name>
    <servlet-name>Servlet1</servlet-name>
</filter-mapping>

Votre proposition ne soutiendrait ni l'un ni l'autre. Notez que le web.xml est lu et analysé une seule fois au démarrage de l'application, pas sur chaque requête HTTP comme vous semblez le penser.

Depuis Servlet 3.0, il y a @WebServlet annotation qui minimise ce passe-partout:

@WebServlet("/enroll")
public class Servlet1 extends HttpServlet {

Voir également:

48
BalusC