7.1 Schema generală a web.xml
Fișierul web.xml stochează informații de configurare a aplicației. Nu este o parte obligatorie a acestuia, dar este foarte utilizat pentru a configura o aplicație web.
Acest fișier trebuie să fie localizat în folderul WEB-INF . Când Tomcat pornește, își citește conținutul și folosește configurația pe care o conține. Dacă fișierul conține erori, atunci Tomcat afișează și o eroare.
Exemplu 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"
Maparea numelui servlet-ului și a clasei servlet-ului este scrisă aici cu verde"HelloServlet"
. Maparea numelui servlet-ului și a fragmentului URL este scrisă cu albastru"HelloWorld"
"http://localhost/welcome"
. Astfel, aici scrie că atunci când accesați calea /welcome, trebuie să apelați servlet-ul HelloServlet.class
.
Culoarea roșie indică fișierul care trebuie oferit la cerere http://localhost/
- aceasta este așa-numita pagină de bun venit . Dacă utilizatorul introduce pur și simplu în browser numele corespunzător rădăcinii aplicației noastre web, atunci conținutul fișierului index.html
.
7.2 servlet, servlet-mapping
Un servlet poate servi solicitări la adrese URL diferite, astfel încât în web-xml, servletul și maparea acestuia la adrese URL sunt scrise separat. Mai întâi, descriem servlet-urile, dându-le fiecărui șir un nume unic, apoi specificăm modul în care fiecare servlet se mapează la care url.
Exemplu 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>
În acest exemplu, două servlet-uri sunt declarate și fiecare este mapată la un șablon URL diferit. Servletul RemotingServlet
servește toate cererile care ajung la/remoting/*
. Servletul RestApiServlet
servește toate cererile care ajung la/api/*
. Servlet-urile au și ordinea de la încărcare - parametrul load-on-startup.
7.3 Opțiuni de servlet
Cu ajutorul web.xml, parametrii pot fi transferați servlet-ului în timpul inițializării acestuia, ei vor fi disponibili prin interfața ServletConfig
. De asemenea, puteți seta parametri pentru întreaga aplicație web, aceștia vor fi disponibili prin intermediul ServletContext
.
Exemplu 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>
Codul evidențiat în verde este locul în care setăm parametrii pentruServletContext
. Sunt două dintre ele:
productionMode
cu valoare falsăappPropertiesConfig
cu o matrice de două șiruri de caractere:classpath:local-app.properties
classpath:web-app.properties
Parametrii pentru servlet sunt indicați cu albastruApplicationServlet
, îi vor fi disponibili prin ServletConfig
:
application
cu valoare com.codegym.Appwidgetset
cu valoarea com.codegym.WidgetSetui
cu valoarea com.codegym.AppUI
7.4 filtru, cartografiere a filtrului
Aplicația web poate conține, de asemenea, special utility servlets - filters
. Ei îndeplinesc diverse sarcini de serviciu: redirecționarea apelurilor, verificarea autorizației etc.
Exemplu 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>
Înainte ca cererea să ajungă la servlet RemotingServlet
, aceasta va fi procesată de filtru TotalFiler
. Acest filtru este configurat pentru a intercepta toate cererile care ajung la aplicația noastră web. Acest lucru este sugerat în mod clar de șablonul URL la care este mapat: /*
.
Veți citi mai multe despre servlet-uri și filtre în următoarele prelegeri.