7.1 Algemeen schema van web.xml
In het bestand web.xml wordt informatie over de toepassingsconfiguratie opgeslagen. Het is er geen verplicht onderdeel van, maar wordt wel heel veel gebruikt om een webapplicatie te configureren.
Dit bestand moet zich in de map WEB-INF bevinden . Wanneer Tomcat opstart, leest het de inhoud en gebruikt het de configuratie die het bevat. Als het bestand fouten bevat, geeft Tomcat ook een fout weer.
Voorbeeld 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"
De toewijzing van de servletnaam en de servletklasse wordt hier in het groen weergegeven"HelloServlet"
. De mapping van de servletnaam en de URL - chunk is in blauw geschreven"HelloWorld"
"http://localhost/welcome"
. Hier staat dus dat wanneer u het pad /welcome opent, u de servlet moet aanroepen HelloServlet.class
.
De rode kleur geeft het bestand aan dat op verzoek moet worden verstrekt http://localhost/
- dit is de zogenaamde welkomstpagina . Als de gebruiker gewoon in de browser de naam typt die overeenkomt met de root van onze webapplicatie, dan wordt de inhoud van het index.html
.
7.2 servlet, servlet-mapping
Eén servlet kan verzoeken op verschillende URL's verwerken, dus in web-xml worden de servlet en de toewijzing ervan aan URL's afzonderlijk geschreven. Eerst beschrijven we de servlets, waarbij we elk een unieke tekenreeksnaam geven, en vervolgens specificeren we hoe elke servlet naar welke URL verwijst.
Voorbeeld 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>
In dit voorbeeld worden twee servlets gedeclareerd en elk wordt toegewezen aan een ander URL-sjabloon. De servlet RemotingServlet
bedient alle verzoeken die naar/remoting/*
. De servlet RestApiServlet
bedient alle verzoeken die naar/api/*
. Servlets hebben ook de volgorde van laden - de load-on-startup-parameter.
7.3 Servlet-opties
Met behulp van web.xml kunnen tijdens de initialisatie parameters aan de servlet worden doorgegeven, ze zullen beschikbaar zijn via de interface ServletConfig
. U kunt ook parameters instellen voor de gehele webapplicatie, deze zijn beschikbaar via de ServletContext
.
Voorbeeld 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>
De groen gemarkeerde code is waar we de parameters voor instellenServletContext
. Er zijn er twee:
productionMode
met waarde onwaarappPropertiesConfig
met een array van twee strings:classpath:local-app.properties
classpath:web-app.properties
De parameters voor de servlet zijn blauw aangegevenApplicationServlet
en zijn beschikbaar via ServletConfig
:
application
met waarde com.codegym.Appwidgetset
met waarde com.codegym.WidgetSetui
met waarde com.codegym.AppUI
7.4 filter, filtermapping
De webapplicatie kan ook speciale utility servlets - filters
. Ze voeren verschillende servicetaken uit: oproepen doorverbinden, autorisatie controleren, enz.
Voorbeeld 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>
Voordat het verzoek de servlet bereikt RemotingServlet
, wordt het door het filter verwerkt TotalFiler
. Dit filter is geconfigureerd om alle verzoeken die naar onze webapplicatie gaan te onderscheppen. Dit wordt duidelijk aangegeven door de url-template waaraan het is toegewezen: /*
.
In de volgende colleges leest u meer over servlets en filters.
GO TO FULL VERSION