7.1 Skema umum web.xml

File web.xml menyimpan informasi konfigurasi aplikasi. Ini bukan bagian wajib, tetapi sangat banyak digunakan untuk mengonfigurasi aplikasi web.

File ini harus berada di folder WEB-INF . Ketika Tomcat dijalankan, ia membaca isinya dan menggunakan konfigurasi yang dikandungnya. Jika file tersebut mengandung error, maka Tomcat juga menampilkan error.

Contoh 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"Pemetaan nama servlet dan kelas servlet ditulis di sini dengan warna hijau"HelloServlet" . Pemetaan nama servlet dan potongan URL ditulis dengan warna biru"HelloWorld""http://localhost/welcome" . Jadi, dikatakan di sini bahwa saat mengakses jalur /welcome, Anda perlu memanggil servlet HelloServlet.class.

Warna merah menunjukkan file yang perlu diberikan atas permintaan http://localhost/- inilah yang disebut halaman selamat datang . Jika pengguna cukup mengetik di browser nama yang sesuai dengan root aplikasi web kita, maka isi dari file index.html.

7.2 servlet, pemetaan servlet

Satu servlet dapat melayani permintaan di URL yang berbeda, jadi di web-xml, servlet dan pemetaannya ke URL ditulis secara terpisah. Pertama, kami menjelaskan servlet, memberi masing-masing nama string yang unik, dan kemudian kami menentukan bagaimana setiap servlet memetakan ke url mana.

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

Dalam contoh ini, dua servlet dideklarasikan, dan masing-masing dipetakan ke template url yang berbeda. Servlet RemotingServletmelayani semua permintaan yang masuk ke/remoting/* . Servlet RestApiServletmelayani semua permintaan yang masuk ke/api/* . Servlet juga memiliki urutan loading - parameter load-on-startup.

7.3 Opsi Servlet

Dengan bantuan web.xml, parameter dapat diteruskan ke servlet selama inisialisasinya, parameter tersebut akan tersedia melalui antarmuka ServletConfig. Anda juga dapat mengatur parameter untuk seluruh aplikasi web, mereka akan tersedia melalui ServletContext.

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

Kode yang disorot dengan warna hijau adalah tempat kami mengatur parameter untukServletContext . Ada dua di antaranya:

  • productionModedengan nilai palsu
  • appPropertiesConfigdengan array dua string:
    • classpath:local-app.properties
    • classpath:web-app.properties

Parameter untuk servlet ditunjukkan dengan warna biruApplicationServlet , mereka akan tersedia melalui ServletConfig:

  • applicationdengan nilai com.codegym.App
  • widgetsetdengan nilai com.codegym.WidgetSet
  • uidengan nilai com.codegym.AppUI

7.4 filter, pemetaan filter

Aplikasi web mungkin juga berisi file utility servlets - filters. Mereka melakukan berbagai tugas layanan: mengalihkan panggilan, memeriksa otorisasi, dll.

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

Sebelum permintaan mencapai servlet RemotingServlet, itu akan diproses oleh filter TotalFiler. Filter ini dikonfigurasi untuk mencegat semua permintaan yang masuk ke aplikasi web kami. Ini jelas diisyaratkan oleh templat url yang dipetakan ke: /*.

Anda akan membaca lebih lanjut tentang servlet dan filter dalam kuliah berikut.