7.1 Generelt skema for web.xml
Web.xml-filen gemmer applikationskonfigurationsoplysninger. Det er ikke en obligatorisk del af det, men det er meget udbredt til at konfigurere en webapplikation.
Denne fil skal være placeret i WEB-INF- mappen . Når Tomcat starter op, læser den dens indhold og bruger den konfiguration, den indeholder. Hvis filen indeholder fejl, viser Tomcat også en fejl.
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"
Kortlægningen af servletnavnet og servletklassen er her skrevet med grønt"HelloServlet"
. Tilknytningen af servletnavnet og URL-delen er skrevet med blåt"HelloWorld"
"http://localhost/welcome"
. Således står der her, at når du tilgår /velkomststien, skal du kalde servlet'en HelloServlet.class
.
Den røde farve angiver den fil, der skal gives efter anmodning http://localhost/
- dette er den såkaldte velkomstside . Hvis brugeren blot indtaster i browseren navnet, der svarer til roden af vores webapplikation, så er indholdet af index.html
.
7.2 servlet, servlet-mapping
En servlet kan betjene anmodninger på forskellige URL'er, så i web-xml skrives servlet'en og dens tilknytning til URL'er separat. Først beskriver vi servlet'erne, giver hver et unikt strengnavn, og derefter specificerer vi, hvordan hver servlet maps til 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 eksempel er to servlets erklæret, og hver er knyttet til en anden url-skabelon. Servlet'en RemotingServlet
betjener alle anmodninger, der går til/remoting/*
. Servlet'en RestApiServlet
betjener alle anmodninger, der går til/api/*
. Servlets har også rækkefølgen fra indlæsning - parameteren load-on-startup.
7.3 Servlet muligheder
Ved hjælp af web.xml kan parametre sendes til servlet'en under initialiseringen, de vil være tilgængelige via grænsefladen ServletConfig
. Du kan også indstille parametre for hele webapplikationen, de vil være tilgængelige 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 fremhævet med grønt er, hvor vi indstiller parametrene forServletContext
. Der er to af dem:
productionMode
med værdi falskappPropertiesConfig
med en række af to strenge:classpath:local-app.properties
classpath:web-app.properties
Parametrene for servlet'en er angivet med blåtApplicationServlet
, de vil være tilgængelige for den gennem ServletConfig
:
application
med værdi com.codegym.Appwidgetset
med værdi com.codegym.WidgetSetui
med værdi com.codegym.AppUI
7.4 filter, filter-mapping
Webapplikationen kan også indeholde særlige utility servlets - filters
. De udfører forskellige serviceopgaver: omdirigere opkald, kontrollere autorisation osv.
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 anmodningen når servlet'en RemotingServlet
, vil den blive behandlet af filteret TotalFiler
. Dette filter er konfigureret til at opfange alle anmodninger , der går til vores webapplikation. Dette antydes tydeligt af den url-skabelon, den er knyttet til: /*
.
Du vil læse mere om servlets og filtre i de følgende foredrag.
GO TO FULL VERSION