7.1 Schéma général de web.xml

Le fichier web.xml stocke les informations de configuration de l'application. Ce n'est pas une partie obligatoire de celui-ci, mais il est très largement utilisé pour configurer une application Web.

Ce fichier doit se trouver dans le dossier WEB-INF . Lorsque Tomcat démarre, il lit son contenu et utilise la configuration qu'il contient. Si le fichier contient des erreurs, Tomcat affiche également une erreur.

Exemple web.xml :



<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
  http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" version="4.0">
  
  <servlet>
       <servlet-name>HelloWorld</servlet-name>
       <servlet-class>HelloServlet</servlet-class>
   </servlet>
    
  <servlet-mapping>
      <servlet-name>HelloWorld</servlet-name>
      <url-pattern>/welcome</url-pattern>
  </servlet-mapping>
 
  <welcome-file-list>
      <welcome-file>index.html</welcome-file>
  </welcome-file-list>
  
</web-app>

"HelloWorld"Le mappage du nom de servlet et de la classe de servlet est écrit ici en vert"HelloServlet" . Le mappage du nom de la servlet et du bloc d'URL est écrit en bleu"HelloWorld""http://localhost/welcome" . Ainsi, il est dit ici que lors de l'accès au chemin /welcome, vous devez appeler le servlet HelloServlet.class.

La couleur rouge indique le fichier qui doit être fourni sur demande http://localhost/- c'est ce qu'on appelle la page d'accueil . Si l'utilisateur tape simplement dans le navigateur le nom correspondant à la racine de notre application web, alors le contenu du fichier index.html.

7.2 servlet, mappage de servlet

Un servlet peut servir des requêtes à différentes URL, donc dans web-xml, le servlet et son mappage aux URL sont écrits séparément. Tout d'abord, nous décrivons les servlets, en donnant à chacun un nom de chaîne unique, puis nous spécifions comment chaque servlet correspond à quelle URL.

Exemple web.xml :



<web-app>
  
  <servlet>
    <servlet-name>remoting</servlet-name>
    <servlet-class>com.codegym.RemotingServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>
 
  <servlet-mapping>
    <servlet-name>remoting</servlet-name>
    <url-pattern>/remoting/*</url-pattern>
  </servlet-mapping>
 
  <servlet>
    <servlet-name>restapi</servlet-name>
    <servlet-class>com.codegym.RestApiServlet</servlet-class>
    <load-on-startup>2</load-on-startup>
  </servlet>
 
  <servlet-mapping>
    <servlet-name>restapi</servlet-name>
    <url-pattern>/api/*</url-pattern>
  </servlet-mapping>  
 
</web-app>

Dans cet exemple, deux servlets sont déclarés et chacun est mappé à un modèle d'URL différent. Le servlet RemotingServletsert toutes les requêtes qui vont à/remoting/* . Le servlet RestApiServletsert toutes les requêtes qui vont à/api/* . Les servlets ont également l'ordre de chargement - le paramètre de chargement au démarrage.

7.3 Options des servlets

A l'aide de web.xml, des paramètres peuvent être passés à la servlet lors de son initialisation, ils seront disponibles via l'interface ServletConfig. Vous pouvez également définir des paramètres pour l'ensemble de l'application Web, ils seront disponibles via le fichier ServletContext.

Exemple web.xml :



<web-app>
  <context-param>
     <description>Server production mode</description>
     <param-name>productionMode</param-name>
     <param-value>false</param-value>
  </context-param>
 
  <context-param>
     <param-name>appPropertiesConfig</param-name>
     <param-value>
        classpath:local-app.properties
        classpath:web-app.properties
     </param-value>
  </context-param>
 
  <servlet>
     <servlet-name>mainservlet</servlet-name>
     <servlet-class>com.codegym.ApplicationServlet</servlet-class>
     <init-param>
        <param-name>application</param-name>
        <param-value>com.codegym.App</param-value>
     </init-param>
     <init-param>
        <param-name>widgetset</param-name>
        <param-value>com.codegym.WidgetSet</param-value>
     </init-param>
     <init-param>
        <param-name>ui</param-name>
        <param-value>com.codegym.AppUI</param-value>
     </init-param>
  </servlet>
</web-app>

Le code surligné en vert est l'endroit où nous définissons les paramètres pourServletContext . Il y a deux d'entre eux:

  • productionModeavec la valeur faux
  • appPropertiesConfigavec un tableau de deux chaînes :
    • classpath:local-app.properties
    • classpath:web-app.properties

Les paramètres de la servlet sont indiqués en bleuApplicationServlet , ils lui seront accessibles via ServletConfig:

  • applicationavec la valeur com.codegym.App
  • widgetsetavec la valeur com.codegym.WidgetSet
  • uiavec la valeur com.codegym.AppUI

7.4 filtre, mappage de filtre

L'application Web peut également contenir des fichiers utility servlets - filters. Ils effectuent diverses tâches de service : rediriger les appels, vérifier l'autorisation, etc.

Exemple web.xml :



<web-app>
 
  <servlet>
      <servlet-name>remoting</servlet-name>
      <servlet-class>RemotingServlet</servlet-class>
      <load-on-startup>1</load-on-startup>
  </servlet>
 
  <servlet-mapping>
      <servlet-name>remoting </servlet-name>
      <url-pattern>/remoting/*</url-pattern>
  </servlet-mapping>
 
  <filter>
      <filter-name>total_filter</filter-name>
      <filter-class>com.javrush.TotalFilter</filter-class>
  </filter>
 
  <filter-mapping>
      <filter-name>total_filter</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>
 
</web-app>

Avant que la requête n'atteigne la servlet RemotingServlet, elle sera traitée par le filtre TotalFiler. Ce filtre est configuré pour intercepter toutes les requêtes qui vont à notre application Web. Ceci est clairement indiqué par le modèle d'URL auquel il est mappé : /*.

Vous en apprendrez plus sur les servlets et les filtres dans les conférences suivantes.