7.1 Esquema geral do web.xml
O arquivo web.xml armazena informações de configuração do aplicativo. Não é parte obrigatória dele, mas é muito utilizado para configurar uma aplicação web.
Este arquivo deve estar localizado na pasta WEB-INF . Quando o Tomcat é inicializado, ele lê seu conteúdo e usa a configuração que ele contém. Se o arquivo contiver erros, o Tomcat também exibirá um erro.
Exemplo 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"
O mapeamento do nome do servlet e da classe do servlet é escrito aqui em verde"HelloServlet"
. O mapeamento do nome do servlet e da parte da URL é escrito em azul"HelloWorld"
"http://localhost/welcome"
. Assim, diz aqui que ao acessar o caminho /welcome, você precisa chamar o servlet HelloServlet.class
.
A cor vermelha indica o arquivo que deve ser fornecido mediante solicitação http://localhost/
- esta é a chamada página de boas-vindas . Se o usuário simplesmente digitar no navegador o nome correspondente à raiz do nosso aplicativo da web, o conteúdo do arquivo index.html
.
7.2 servlet, mapeamento de servlet
Um servlet pode atender a solicitações em diferentes URLs, portanto, em web-xml, o servlet e seu mapeamento para URLs são escritos separadamente. Primeiro, descrevemos os servlets, dando a cada um um nome de string exclusivo e, em seguida, especificamos como cada servlet mapeia para cada url.
Exemplo 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>
Neste exemplo, dois servlets são declarados e cada um é mapeado para um modelo de URL diferente. O servlet RemotingServlet
atende a todas as solicitações que vão para/remoting/*
. O servlet RestApiServlet
atende a todas as solicitações que vão para/api/*
. Servlets também têm a ordem de carregamento - o parâmetro load-on-startup.
7.3 Opções de servlet
Com a ajuda do web.xml, os parâmetros podem ser passados para o servlet durante sua inicialização, eles estarão disponíveis através da interface ServletConfig
. Você também pode definir parâmetros para todo o aplicativo da Web; eles estarão disponíveis por meio do arquivo ServletContext
.
Exemplo 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>
O código destacado em verde é onde definimos os parâmetros paraServletContext
. Existem dois deles:
productionMode
com valor falsoappPropertiesConfig
com um array de duas strings:classpath:local-app.properties
classpath:web-app.properties
Os parâmetros para o servlet estão indicados em azulApplicationServlet
, eles estarão disponíveis através de ServletConfig
:
application
com valor com.codegym.Appwidgetset
com valor com.codegym.WidgetSetui
com valor com.codegym.AppUI
7.4 filtro, mapeamento de filtro
O aplicativo da web também pode conter arquivos utility servlets - filters
. Eles executam várias tarefas de serviço: redirecionar chamadas, verificar autorização, etc.
Exemplo 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>
Antes que a requisição chegue ao servlet RemotingServlet
, ela será processada pelo filtro TotalFiler
. Este filtro está configurado para interceptar todas as requisições que vão para a nossa aplicação web. Isso é claramente sugerido pelo modelo de URL para o qual é mapeado: /*
.
Você lerá mais sobre servlets e filtros nas aulas a seguir.
GO TO FULL VERSION