7.1 Allgemeines Schema von web.xml
In der Datei web.xml werden Anwendungskonfigurationsinformationen gespeichert. Es ist kein zwingender Bestandteil davon, wird aber sehr häufig zur Konfiguration einer Webanwendung verwendet.
Diese Datei muss sich im WEB-INF- Ordner befinden . Wenn Tomcat startet, liest es seinen Inhalt und verwendet die darin enthaltene Konfiguration. Wenn die Datei Fehler enthält, zeigt Tomcat ebenfalls einen Fehler an.
Beispiel 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"
Die Zuordnung des Servlet-Namens zur Servlet-Klasse ist hier in Grün geschrieben"HelloServlet"
. Die Zuordnung des Servlet-Namens und des URL-Blocks ist in Blau geschrieben"HelloWorld"
"http://localhost/welcome"
. Daher heißt es hier, dass Sie beim Zugriff auf den /welcome-Pfad das Servlet aufrufen müssen HelloServlet.class
.
Die rote Farbe kennzeichnet die Datei, die auf Anfrage angegeben werden muss http://localhost/
– dies ist die sogenannte Willkommensseite . Wenn der Benutzer einfach den Namen in den Browser eingibt, der dem Stammverzeichnis unserer Webanwendung entspricht, wird der Inhalt der index.html
.
7.2 Servlet, Servlet-Mapping
Ein Servlet kann Anforderungen an verschiedene URLs bedienen, daher werden in Web-XML das Servlet und seine Zuordnung zu URLs separat geschrieben. Zuerst beschreiben wir die Servlets, indem wir jedem einen eindeutigen Stringnamen geben, und dann geben wir an, wie jedes Servlet welcher URL zugeordnet wird.
Beispiel 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>
In diesem Beispiel werden zwei Servlets deklariert und jedes einer anderen URL-Vorlage zugeordnet. Das Servlet RemotingServlet
bedient alle Anfragen, die an gehen/remoting/*
. Das Servlet RestApiServlet
bedient alle Anfragen, die an gehen/api/*
. Servlets haben auch die Reihenfolge vom Laden – den Load-on-Startup-Parameter.
7.3 Servlet-Optionen
Mit Hilfe von web.xml können dem Servlet während seiner Initialisierung Parameter übergeben werden, die über die Schnittstelle verfügbar sind ServletConfig
. Sie können auch Parameter für die gesamte Webanwendung festlegen. Diese sind über verfügbar ServletContext
.
Beispiel 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>
Der grün hervorgehobene Code ist der Ort, an dem wir die Parameter festlegenServletContext
. Es gibt zwei davon:
productionMode
mit dem Wert falseappPropertiesConfig
mit einem Array aus zwei Strings:classpath:local-app.properties
classpath:web-app.properties
Die Parameter für das Servlet sind blau markiertApplicationServlet
und stehen ihm zur Verfügung über ServletConfig
:
application
mit dem Wert com.codegym.Appwidgetset
mit dem Wert com.codegym.WidgetSetui
mit dem Wert com.codegym.AppUI
7.4 Filter, Filterzuordnung
Die Webanwendung kann auch spezielle utility servlets - filters
. Sie übernehmen verschiedene Serviceaufgaben: Anrufe umleiten, Berechtigung prüfen usw.
Beispiel 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>
Bevor die Anfrage das Servlet erreicht RemotingServlet
, wird sie vom Filter verarbeitet TotalFiler
. Dieser Filter ist so konfiguriert, dass er alle Anfragen abfängt , die an unsere Webanwendung gehen. Dies wird durch die URL-Vorlage, der es zugeordnet ist, deutlich angedeutet: /*
.
In den folgenden Vorlesungen erfahren Sie mehr über Servlets und Filter.
GO TO FULL VERSION