7.1 Обща схема на web.xml
Файлът web.xml съхранява информация за конфигурацията на приложението. Не е задължителна част от него, но се използва много широко за конфигуриране на уеб приложение.
Този файл трябва да се намира в папката WEB-INF . Когато Tomcat стартира, той чете съдържанието си и използва конфигурацията, която съдържа. Ако файлът съдържа грешки, тогава Tomcat също показва грешка.
Пример 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"
Съпоставянето на името на сървлета и класа на сервлета е изписано тук в зелено"HelloServlet"
. Съпоставянето на името на сървлета и URL частта е изписано в синьо"HelloWorld"
"http://localhost/welcome"
. По този начин тук се казва, че когато осъществявате достъп до пътя /welcome, трябва да извикате сървлета HelloServlet.class
.
Червеният цвят показва file, който трябва да бъде предоставен при поискване http://localhost/
- това е така наречената page за добре дошли . Ако потребителят просто въведе в браузъра името, съответстващо на корена на нашето уеб приложение, тогава съдържанието на index.html
.
7.2 сервлет, сървлет-картографиране
Един сървлет може да обслужва заявки на различни URL addressи, така че в web-xml сървлетът и неговото съпоставяне към URL addressи се записват отделно. Първо, ние описваме сървлетите, давайки на всеки уникално име на низ, и след това уточняваме How всеки сървлет се съпоставя към кой url.
Пример 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>
В този пример са декларирани два сървлета и всеки е картографиран към различен url шаблон. Сървлетът RemotingServlet
обслужва всички заявки, които отиват към/remoting/*
. Сървлетът RestApiServlet
обслужва всички заявки, които отиват към/api/*
. Сървлетите също имат реда от зареждане - параметърът load-on-startup.
7.3 Опции на сървлета
С помощта на web.xml параметрите могат да бъдат предадени на сървлета по време на неговата инициализация, те ще бъдат достъпни през интерфейса ServletConfig
. Можете също да зададете параметри за цялото уеб приложение, те ще бъдат достъпни чрез ServletContext
.
Пример 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>
Маркираният в зелено code е мястото, където задаваме параметрите заServletContext
. Има две от тях:
productionMode
със стойност falseappPropertiesConfig
с масив от два низа:classpath:local-app.properties
classpath:web-app.properties
Параметрите за сървлета са посочени в синьоApplicationServlet
, те ще бъдат достъпни за него чрез ServletConfig
:
application
със стойност com.codegym.Appwidgetset
със стойност com.codegym.WidgetSetui
със стойност com.codegym.AppUI
7.4 филтър, филтър-картографиране
Уеб приложението може също да съдържа специални utility servlets - filters
. Те изпълняват различни сервизни задачи: пренасочване на повиквания, проверка на авторизация и др.
Пример 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>
Преди заявката да достигне сървлета RemotingServlet
, тя ще бъде обработена от филтъра TotalFiler
. Този филтър е конфигуриран да прихваща всички заявки , които отиват към нашето уеб приложение. Това е ясно намекнато от url шаблона, към който е съпоставен: /*
.
Ще прочетете повече за сървлетите и филтрите в следващите лекции.
GO TO FULL VERSION