7.1 Generelt skema for web.xml

Web.xml-filen gemmer applikationskonfigurationsoplysninger. Det er ikke en obligatorisk del af det, men det er meget udbredt til at konfigurere en webapplikation.

Denne fil skal være placeret i WEB-INF- mappen . Når Tomcat starter op, læser den dens indhold og bruger den konfiguration, den indeholder. Hvis filen indeholder fejl, viser Tomcat også en fejl.

Eksempel 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"Kortlægningen af ​​servletnavnet og servletklassen er her skrevet med grønt"HelloServlet" . Tilknytningen af ​​servletnavnet og URL-delen er skrevet med blåt"HelloWorld""http://localhost/welcome" . Således står der her, at når du tilgår /velkomststien, skal du kalde servlet'en HelloServlet.class.

Den røde farve angiver den fil, der skal gives efter anmodning http://localhost/- dette er den såkaldte velkomstside . Hvis brugeren blot indtaster i browseren navnet, der svarer til roden af ​​vores webapplikation, så er indholdet af index.html.

7.2 servlet, servlet-mapping

En servlet kan betjene anmodninger på forskellige URL'er, så i web-xml skrives servlet'en og dens tilknytning til URL'er separat. Først beskriver vi servlet'erne, giver hver et unikt strengnavn, og derefter specificerer vi, hvordan hver servlet maps til hvilken url.

Eksempel 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>

I dette eksempel er to servlets erklæret, og hver er knyttet til en anden url-skabelon. Servlet'en RemotingServletbetjener alle anmodninger, der går til/remoting/* . Servlet'en RestApiServletbetjener alle anmodninger, der går til/api/* . Servlets har også rækkefølgen fra indlæsning - parameteren load-on-startup.

7.3 Servlet muligheder

Ved hjælp af web.xml kan parametre sendes til servlet'en under initialiseringen, de vil være tilgængelige via grænsefladen ServletConfig. Du kan også indstille parametre for hele webapplikationen, de vil være tilgængelige via ServletContext.

Eksempel 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>

Koden fremhævet med grønt er, hvor vi indstiller parametrene forServletContext . Der er to af dem:

  • productionModemed værdi falsk
  • appPropertiesConfigmed en række af to strenge:
    • classpath:local-app.properties
    • classpath:web-app.properties

Parametrene for servlet'en er angivet med blåtApplicationServlet , de vil være tilgængelige for den gennem ServletConfig:

  • applicationmed værdi com.codegym.App
  • widgetsetmed værdi com.codegym.WidgetSet
  • uimed værdi com.codegym.AppUI

7.4 filter, filter-mapping

Webapplikationen kan også indeholde særlige utility servlets - filters. De udfører forskellige serviceopgaver: omdirigere opkald, kontrollere autorisation osv.

Eksempel 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>

Før anmodningen når servlet'en RemotingServlet, vil den blive behandlet af filteret TotalFiler. Dette filter er konfigureret til at opfange alle anmodninger , der går til vores webapplikation. Dette antydes tydeligt af den url-skabelon, den er knyttet til: /*.

Du vil læse mere om servlets og filtre i de følgende foredrag.