7.1 Allmänt schema för web.xml
Web.xml-filen lagrar applikationskonfigurationsinformation. Det är inte en obligatorisk del av det, men det används mycket ofta för att konfigurera en webbapplikation.
Denna fil måste finnas i WEB-INF- mappen . När Tomcat startar läser den dess innehåll och använder den konfiguration den innehåller. Om filen innehåller fel visar Tomcat också ett fel.
Exempel 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"
Mappningen av servletnamnet och servletklassen skrivs här i grönt"HelloServlet"
. Mappningen av servletnamnet och URL-biten är skriven i blått"HelloWorld"
"http://localhost/welcome"
. Således står det här att när du kommer åt /välkomstvägen måste du anropa servleten HelloServlet.class
.
Den röda färgen indikerar filen som behöver lämnas på begäran http://localhost/
- detta är den så kallade välkomstsidan . Om användaren helt enkelt skriver i webbläsaren namnet som motsvarar roten av vår webbapplikation, så kommer innehållet i index.html
.
7.2 servlet, servlet-mappning
En servlet kan betjäna förfrågningar på olika URL:er, så i web-xml skrivs servleten och dess mappning till URL:er separat. Först beskriver vi servletarna och ger var och en ett unikt strängnamn, och sedan anger vi hur varje servlet mappar till vilken url.
Exempel 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>
I det här exemplet deklareras två servlets, och var och en mappas till en annan webbadressmall. Servleten RemotingServlet
betjänar alla förfrågningar som går till/remoting/*
. Servleten RestApiServlet
betjänar alla förfrågningar som går till/api/*
. Servlets har också ordningen från laddning - parametern load-on-startup.
7.3 Servlet-alternativ
Med hjälp av web.xml kan parametrar skickas till servleten under dess initialisering, de kommer att vara tillgängliga via gränssnittet ServletConfig
. Du kan också ställa in parametrar för hela webbapplikationen, de kommer att vara tillgängliga via ServletContext
.
Exempel 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>
Den grönmarkerade koden är där vi ställer in parametrarna förServletContext
. Det finns två av dem:
productionMode
med falskt värdeappPropertiesConfig
med en uppsättning av två strängar:classpath:local-app.properties
classpath:web-app.properties
Parametrarna för servleten är indikerade i blått,ApplicationServlet
de kommer att vara tillgängliga för den genom ServletConfig
:
application
med värde com.codegym.Appwidgetset
med värde com.codegym.WidgetSetui
med värde com.codegym.AppUI
7.4 filter, filterkartläggning
Webbapplikationen kan även innehålla speciella utility servlets - filters
. De utför olika serviceuppgifter: omdirigera samtal, kontrollera auktorisering, etc.
Exempel 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>
Innan begäran når servleten RemotingServlet
kommer den att behandlas av filtret TotalFiler
. Detta filter är konfigurerat för att fånga upp alla förfrågningar som går till vår webbapplikation. Detta antyds tydligt av URL-mallen som den är mappad till: /*
.
Du kommer att läsa mer om servlets och filter i följande föreläsningar.