7.1 Skema am web.xml

Fail web.xml menyimpan maklumat konfigurasi aplikasi. Ia bukan bahagian wajib, tetapi ia digunakan secara meluas untuk mengkonfigurasi aplikasi web.

Fail ini mesti terletak dalam folder WEB-INF . Apabila Tomcat dimulakan, ia membaca kandungannya dan menggunakan konfigurasi yang terkandung di dalamnya. Jika fail mengandungi ralat, maka Tomcat juga memaparkan ralat.

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 dalam warna hijau"HelloServlet" . Pemetaan nama servlet dan bahagian URL ditulis dengan warna biru"HelloWorld""http://localhost/welcome" . Oleh itu, ia mengatakan di sini bahawa apabila mengakses laluan /welcome, anda perlu memanggil servlet HelloServlet.class.

Warna merah menunjukkan fail yang perlu diberikan atas permintaan http://localhost/- ini adalah yang dipanggil halaman selamat datang . Jika pengguna hanya menaip dalam penyemak imbas nama yang sepadan dengan akar aplikasi web kami, maka kandungan index.html.

7.2 servlet, pemetaan servlet

Satu servlet boleh menyampaikan permintaan pada URL yang berbeza, jadi dalam web-xml, servlet dan pemetaannya ke URL ditulis secara berasingan. Mula-mula, kami menerangkan servlet, memberikan setiap satu nama rentetan yang unik, dan kemudian kami menentukan cara setiap servlet memetakan 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 diisytiharkan, dan setiap satunya dipetakan ke templat url yang berbeza. Servlet RemotingServletmenyediakan semua permintaan yang pergi ke/remoting/* . Servlet RestApiServletmenyediakan semua permintaan yang pergi ke/api/* . Servlets juga mempunyai susunan daripada memuatkan - parameter muatkan semasa permulaan.

7.3 Pilihan Servlet

Dengan bantuan web.xml, parameter boleh dihantar ke servlet semasa pemulaannya, ia akan tersedia melalui antara muka ServletConfig. Anda juga boleh menetapkan parameter untuk keseluruhan aplikasi web, ia 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>

Kod yang diserlahkan dalam warna hijau adalah tempat kami menetapkan parameter untukServletContext . Terdapat dua daripadanya:

  • productionModedengan nilai palsu
  • appPropertiesConfigdengan tatasusunan dua rentetan:
    • classpath:local-app.properties
    • classpath:web-app.properties

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

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

7.4 penapis, pemetaan penapis

Aplikasi web juga mungkin mengandungi utility servlets - filters. Mereka melakukan pelbagai tugas perkhidmatan: ubah hala panggilan, semak kebenaran, dsb.

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 sampai ke servlet RemotingServlet, ia akan diproses oleh penapis TotalFiler. Penapis ini dikonfigurasikan untuk memintas semua permintaan yang pergi ke aplikasi web kami. Ini jelas dibayangkan oleh templat url yang dipetakan kepada: /*.

Anda akan membaca lebih lanjut mengenai servlet dan penapis dalam kuliah berikut.