7.1 web.xml'nin genel şeması

Web.xml dosyası, uygulama yapılandırma bilgilerini depolar. Zorunlu bir parçası değildir, ancak bir web uygulamasını yapılandırmak için çok yaygın olarak kullanılır.

Bu dosya WEB-INF klasöründe bulunmalıdır . Tomcat başlatıldığında içeriğini okur ve içerdiği konfigürasyonu kullanır. Dosya hatalar içeriyorsa, Tomcat ayrıca bir hata görüntüler.

Örnek 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"Servlet adının ve servlet sınıfının eşlemesi burada yeşil renkle yazılmıştır"HelloServlet" . Servlet adının ve URL öbeğinin eşlemesi mavi renkle yazılmıştır"HelloWorld""http://localhost/welcome" . Dolayısıyla burada /welcome yoluna erişirken servleti çağırmanız gerektiği yazıyor HelloServlet.class.

Kırmızı renk, istek üzerine verilmesi gereken dosyayı gösterir http://localhost/- bu sözde karşılama sayfasıdır . Kullanıcı tarayıcıya web uygulamamızın köküne karşılık gelen adı yazarsa, o zaman index.html.

7.2 sunucu uygulaması, sunucu uygulaması eşlemesi

Bir sunucu uygulaması, farklı URL'lerdeki isteklere hizmet verebilir, bu nedenle web-xml'de sunucu uygulaması ve URL'lerle eşlemesi ayrı yazılır. İlk olarak, her birine benzersiz bir dizi adı vererek sunucu uygulamalarını tanımlarız ve ardından her bir sunucu uygulamasının hangi url ile nasıl eşleştiğini belirtiriz.

Örnek 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>

Bu örnekte, iki sunucu uygulaması bildirilir ve her biri farklı bir url şablonuyla eşlenir. Sunucu uygulaması, RemotingServletadresine giden tüm isteklere hizmet eder/remoting/* . Sunucu uygulaması, RestApiServletadresine giden tüm isteklere hizmet eder/api/* . Servlet'ler ayrıca yükleme sırasına sahiptir - başlangıçta yükleme parametresi.

7.3 Sunucu Uygulaması Seçenekleri

Web.xml'nin yardımıyla parametreler sunucu uygulamasına başlatılması sırasında iletilebilir, arayüz aracılığıyla kullanılabilir olacaklardır ServletConfig. Ayrıca tüm web uygulaması için parametreler ayarlayabilirsiniz, bunlar ServletContext.

Örnek 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>

Yeşil renkle vurgulanan kod, parametrelerini ayarladığımız yerdirServletContext . İki tane var:

  • productionModefalse değeri ile
  • appPropertiesConfigiki dizgiden oluşan bir dizi ile:
    • classpath:local-app.properties
    • classpath:web-app.properties

Servlet için parametreler mavi renkle belirtilmiştirApplicationServlet , bunlara aşağıdakiler yoluyla erişilebilecektir ServletConfig:

  • applicationcom.codegym.App değeriyle
  • widgetsetcom.codegym.WidgetSet değeri ile
  • uicom.codegym.AppUI değeri ile

7.4 filtre, filtre eşleme

Web uygulaması ayrıca özel utility servlets - filters. Çeşitli hizmet görevlerini yerine getirirler: aramaları yeniden yönlendirme, yetkilendirmeyi kontrol etme vb.

Örnek 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>

İstek sunucu uygulamasına ulaşmadan önce RemotingServletfiltre tarafından işlenecektir TotalFiler. Bu filtre, web uygulamamıza giden tüm istekleri engellemek için yapılandırılmıştır . Bu, eşlendiği url şablonu tarafından açıkça ima edilir: /*.

Sonraki derslerde servlet'ler ve filtreler hakkında daha fazla bilgi edineceksiniz.