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 RemotingServlet
sert toutes les requêtes qui vont à/remoting/*
. Le servlet RestApiServlet
sert 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:
productionMode
avec la valeur fauxappPropertiesConfig
avec 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
:
application
avec la valeur com.codegym.Appwidgetset
avec la valeur com.codegym.WidgetSetui
avec 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.
GO TO FULL VERSION