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 RemotingServlet
betjener alle forespørsler som går til/remoting/*
. Servleten RestApiServlet
betjener 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:
productionMode
med verdi falskappPropertiesConfig
med 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
:
application
med verdi com.codegym.Appwidgetset
med verdi com.codegym.WidgetSetui
med 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.
GO TO FULL VERSION