7.1 Pangkalahatang schema ng web.xml

Ang web.xml file ay nag-iimbak ng impormasyon sa configuration ng application. Ito ay hindi isang ipinag-uutos na bahagi nito, ngunit ito ay napakalawak na ginagamit upang i-configure ang isang web application.

Ang file na ito ay dapat na matatagpuan sa WEB-INF folder . Kapag nagsimula ang Tomcat, binabasa nito ang mga nilalaman nito at ginagamit ang configuration na nilalaman nito. Kung ang file ay naglalaman ng mga error, ang Tomcat ay nagpapakita rin ng isang error.

Halimbawa 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"Ang pagmamapa ng pangalan ng servlet at ang klase ng servlet ay nakasulat dito sa berde"HelloServlet" . Ang pagmamapa ng pangalan ng servlet at ang tipak ng URL ay nakasulat sa asul"HelloWorld""http://localhost/welcome" . Kaya, sinasabi dito na kapag ina-access ang /welcome path, kailangan mong tawagan ang servlet HelloServlet.class.

Ang pulang kulay ay nagpapahiwatig ng file na kailangang ibigay kapag hiniling http://localhost/- ito ang tinatawag na welcome page . Kung i-type lang ng user sa browser ang pangalang naaayon sa ugat ng aming web application, kung gayon ang mga nilalaman ng index.html.

7.2 servlet, servlet-mapping

Ang isang servlet ay maaaring maghatid ng mga kahilingan sa iba't ibang mga URL, kaya sa web-xml, ang servlet at ang pagmamapa nito sa mga URL ay nakasulat nang hiwalay. Una, inilalarawan namin ang mga servlet, na nagbibigay sa bawat isa ng natatanging pangalan ng string, at pagkatapos ay tinukoy namin kung paano nagmamapa ang bawat servlet sa kung aling url.

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

Sa halimbawang ito, dalawang servlet ang ipinahayag, at ang bawat isa ay nakamapa sa ibang template ng url. Ang servlet RemotingServletay naghahatid ng lahat ng mga kahilingan na napupunta sa/remoting/* . Ang servlet RestApiServletay naghahatid ng lahat ng mga kahilingan na napupunta sa/api/* . Ang mga Servlet ay mayroon ding pagkakasunud-sunod mula sa paglo-load - ang parameter ng load-on-startup.

7.3 Mga opsyon sa Servlet

Sa tulong ng web.xml, maaaring maipasa ang mga parameter sa servlet sa panahon ng pagsisimula nito, magiging available ang mga ito sa pamamagitan ng interface ServletConfig. Maaari ka ring magtakda ng mga parameter para sa buong web application, magiging available ang mga ito sa pamamagitan ng ServletContext.

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

Ang code na naka-highlight sa berde ay kung saan namin itinakda ang mga parameter para saServletContext . Dalawa sila:

  • productionModemay value na false
  • appPropertiesConfigna may hanay ng dalawang string:
    • classpath:local-app.properties
    • classpath:web-app.properties

Ang mga parameter para sa servlet ay ipinahiwatig sa asulApplicationServlet , sila ay magagamit dito sa pamamagitan ng ServletConfig:

  • applicationna may halagang com.codegym.App
  • widgetsetna may halagang com.codegym.WidgetSet
  • uina may halagang com.codegym.AppUI

7.4 filter, filter-mapping

Ang web application ay maaari ding maglaman ng espesyal na utility servlets - filters. Nagsasagawa sila ng iba't ibang mga gawain sa serbisyo: pag-redirect ng mga tawag, suriin ang pahintulot, atbp.

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

Bago maabot ang kahilingan sa servlet RemotingServlet, ipoproseso ito ng filter TotalFiler. Ang filter na ito ay na-configure upang harangin ang lahat ng mga kahilingan na pumunta sa aming web application. Ito ay malinaw na ipinapahiwatig ng template ng url kung saan ito nakamapa sa: /*.

Magbabasa ka ng higit pa tungkol sa mga servlet at filter sa mga sumusunod na lektura.