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 RemotingServletbetjänar alla förfrågningar som går till/remoting/* . Servleten RestApiServletbetjä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:

  • productionModemed falskt värde
  • appPropertiesConfigmed 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:

  • applicationmed värde com.codegym.App
  • widgetsetmed värde com.codegym.WidgetSet
  • uimed 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 RemotingServletkommer 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.