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 RemotingServletbedient alle Anfragen, die an gehen/remoting/* . Das Servlet RestApiServletbedient 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:

  • productionModemit dem Wert false
  • appPropertiesConfigmit 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:

  • applicationmit dem Wert com.codegym.App
  • widgetsetmit dem Wert com.codegym.WidgetSet
  • uimit 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.