7.1 Generelt skjema for web.xml

Web.xml-filen lagrer informasjon om programkonfigurasjon. Det er ikke en obligatorisk del av det, men det er veldig mye brukt til å konfigurere en nettapplikasjon.

Denne filen må være plassert i WEB-INF- mappen . Når Tomcat starter opp, leser den innholdet og bruker konfigurasjonen den inneholder. Hvis filen inneholder feil, viser Tomcat også en feil.

Eksempel 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"Kartleggingen av servletnavnet og servletklassen er her skrevet med grønt"HelloServlet" . Tilordningen av servletnavnet og URL-delen er skrevet i blått"HelloWorld""http://localhost/welcome" . Dermed står det her at når du får tilgang til /velkomstbanen, må du kalle servleten HelloServlet.class.

Den røde fargen indikerer filen som må gis på forespørsel http://localhost/- dette er den såkalte velkomstsiden . Hvis brukeren bare skriver inn navnet i nettleseren som tilsvarer roten til nettapplikasjonen vår, vil innholdet i index.html.

7.2 servlet, servlet-mapping

En servlet kan betjene forespørsler på forskjellige URL-er, så i web-xml skrives servleten og dens tilordning til URL-er separat. Først beskriver vi servletene, og gir hver et unikt strengnavn, og deretter spesifiserer vi hvordan hver servlet tilordnes hvilken url.

Eksempel 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 dette eksemplet er to servlets deklarert, og hver er tilordnet en annen url-mal. Servleten RemotingServletbetjener alle forespørsler som går til/remoting/* . Servleten RestApiServletbetjener alle forespørsler som går til/api/* . Servlets har også rekkefølgen fra lasting - parameteren load-on-startup.

7.3 Servlet-alternativer

Ved hjelp av web.xml kan parametere sendes til servleten under initialiseringen, de vil være tilgjengelige gjennom grensesnittet ServletConfig. Du kan også angi parametere for hele nettapplikasjonen, de vil være tilgjengelige via ServletContext.

Eksempel 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>

Koden uthevet i grønt er der vi setter parameterne forServletContext . Det er to av dem:

  • productionModemed verdi falsk
  • appPropertiesConfigmed en rekke av to strenger:
    • classpath:local-app.properties
    • classpath:web-app.properties

Parametrene for servleten er indikert i blåttApplicationServlet , de vil være tilgjengelige for den gjennom ServletConfig:

  • applicationmed verdi com.codegym.App
  • widgetsetmed verdi com.codegym.WidgetSet
  • uimed verdi com.codegym.AppUI

7.4 filter, filterkartlegging

Nettapplikasjonen kan også inneholde spesielle utility servlets - filters. De utfører ulike tjenesteoppgaver: omdirigere anrop, sjekke autorisasjon, etc.

Eksempel 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>

Før forespørselen når servleten RemotingServlet, vil den bli behandlet av filteret TotalFiler. Dette filteret er konfigurert til å fange opp alle forespørsler som går til vår nettapplikasjon. Dette er tydelig antydet av url-malen den er tilordnet: /*.

Du vil lese mer om servlets og filtre i følgende forelesninger.