7.1 Ogólny schemat pliku web.xml
Plik web.xml przechowuje informacje o konfiguracji aplikacji. Nie jest to jego obowiązkowa część, ale jest bardzo szeroko stosowana do konfigurowania aplikacji internetowej.
Plik ten musi znajdować się w folderze WEB-INF . Podczas uruchamiania Tomcat odczytuje jego zawartość i używa zawartej w nim konfiguracji. Jeśli plik zawiera błędy, Tomcat również wyświetla błąd.
Przykład pliku 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"
Odwzorowanie nazwy serwletu i klasy serwletu jest tutaj zapisane na zielono"HelloServlet"
. Odwzorowanie nazwy serwletu i fragmentu adresu URL jest zapisane na niebiesko"HelloWorld"
"http://localhost/welcome"
. Dlatego tutaj jest napisane, że uzyskując dostęp do ścieżki /welcome, musisz wywołać serwlet HelloServlet.class
.
Kolorem czerwonym oznaczono plik, który należy podać na żądanie http://localhost/
– jest to tzw. strona powitalna . Jeśli użytkownik po prostu wpisze w przeglądarce nazwę odpowiadającą katalogu głównego naszej aplikacji internetowej, wówczas zawartość pliku index.html
.
Serwlet 7.2, mapowanie serwletów
Jeden serwlet może obsługiwać żądania pod różnymi adresami URL, więc w web-xml serwlet i jego mapowanie na adresy URL są pisane oddzielnie. Najpierw opisujemy serwlety, nadając każdemu unikalną nazwę ciągu, a następnie określamy, w jaki sposób każdy serwlet odwzorowuje adres URL.
Przykład pliku 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>
W tym przykładzie zadeklarowano dwa serwlety i każdy z nich jest odwzorowany na inny szablon adresu URL. Serwlet RemotingServlet
obsługuje wszystkie żądania kierowane do/remoting/*
. Serwlet RestApiServlet
obsługuje wszystkie żądania kierowane do/api/*
. Serwlety mają również kolejność ładowania - parametr load-on-startup.
7.3 Opcje serwletu
Za pomocą web.xml można przekazać parametry do serwletu podczas jego inicjalizacji, będą one dostępne przez interfejs ServletConfig
. Możesz także ustawić parametry dla całej aplikacji internetowej, będą one dostępne poprzez ServletContext
.
Przykład pliku 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>
Kod podświetlony na zielono to miejsce, w którym ustawiamy parametry dlaServletContext
. Jest ich dwóch:
productionMode
z wartością fałszappPropertiesConfig
z tablicą dwóch ciągów:classpath:local-app.properties
classpath:web-app.properties
Parametry serwletu są zaznaczone na niebieskoApplicationServlet
, będą dla niego dostępne poprzez ServletConfig
:
application
z wartością com.codegym.Appwidgetset
z wartością com.codegym.WidgetSetui
z wartością com.codegym.AppUI
Filtr 7.4, mapowanie filtrów
Aplikacja internetowa może również zawierać specjalne pliki utility servlets - filters
. Wykonują różne zadania serwisowe: przekierowują połączenia, sprawdzają autoryzację itp.
Przykład pliku 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>
Zanim żądanie dotrze do serwletu RemotingServlet
, zostanie przetworzone przez filtr TotalFiler
. Ten filtr jest skonfigurowany do przechwytywania wszystkich żądań , które trafiają do naszej aplikacji internetowej. Jest to wyraźnie zasugerowane przez szablon adresu URL, do którego jest mapowany: /*
.
Więcej o serwletach i filtrach przeczytasz w kolejnych wykładach.
GO TO FULL VERSION