estrutura web.xml

All lectures for PT purposes
Nível 1 , Lição 377
Disponível

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 RemotingServletatende a todas as solicitações que vão para/remoting/* . O servlet RestApiServletatende 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:

  • productionModecom valor falso
  • appPropertiesConfigcom 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:

  • applicationcom valor com.codegym.App
  • widgetsetcom valor com.codegym.WidgetSet
  • uicom 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.

Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION