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 falskappPropertiesConfigmed en rekke av to strenger:classpath:local-app.propertiesclasspath:web-app.properties
Parametrene for servleten er indikert i blåttApplicationServlet , de vil være tilgjengelige for den gjennom ServletConfig:
applicationmed verdi com.codegym.Appwidgetsetmed verdi com.codegym.WidgetSetuimed 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