7.1 โครงสร้างทั่วไปของ web.xml
ไฟล์ web.xmlเก็บข้อมูลการกำหนดค่าแอปพลิเคชัน ไม่ใช่ส่วนบังคับ แต่ใช้กันอย่างแพร่หลายในการกำหนดค่าเว็บแอปพลิเคชัน
ไฟล์ นี้ต้องอยู่ใน โฟลเดอร์ WEB-INF เมื่อ Tomcat เริ่มทำงาน มันจะอ่านเนื้อหาและใช้การกำหนดค่าที่มีอยู่ หากไฟล์มีข้อผิดพลาด Tomcat จะแสดงข้อผิดพลาดด้วย
ตัวอย่าง 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"
การแม็พชื่อเซิร์ฟเล็ต และคลาสเซิร์ฟเล็ตเขียนด้วยสีเขียวที่"HelloServlet"
นี่ การแม็พชื่อเซิร์ฟเล็ต และอัน URL เขียนด้วย"HelloWorld"
"http://localhost/welcome"
สีน้ำเงิน ดังนั้นจึงบอกว่าเมื่อเข้าถึงเส้นทาง /welcome คุณต้องเรียกHelloServlet.class
servlet
สีแดงหมายถึงไฟล์ที่ต้องได้รับตามคำขอhttp://localhost/
- นี่คือหน้าต้อนรับที่เรียกว่า หากผู้ใช้เพียงพิมพ์ชื่อในเบราว์เซอร์ที่ตรงกับรูทของเว็บแอปพลิเคชันของเรา เนื้อหาของindex.html
.
7.2 เซิร์ฟเล็ต การทำแผนที่เซิร์ฟเล็ต
เซิร์ฟเล็ตหนึ่งสามารถให้บริการคำขอที่ URL ที่แตกต่างกัน ดังนั้นใน web-xml เซิร์ฟเล็ตและการแม็พกับ URL จะถูกเขียนแยกกัน ขั้นแรก เราอธิบายเซิร์ฟเล็ต โดยตั้งชื่อสตริงเฉพาะให้แต่ละอัน จากนั้นระบุวิธีที่แต่ละเซิร์ฟเล็ตแมปกับ url
ตัวอย่าง 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>
ในตัวอย่างนี้ มีการประกาศ 2 เซิร์ฟเล็ต และแต่ละเซิร์ฟเล็ตจะถูกแมปกับเทมเพลต url ที่แตกต่างกัน เซิร์ฟเล็ตRemotingServlet
ทำหน้าที่ร้องขอทั้งหมดที่ไป/remoting/*
ที่ เซิร์ฟเล็ตRestApiServlet
ทำหน้าที่ร้องขอทั้งหมดที่ไป/api/*
ที่ Servlets ยังมีลำดับจากการโหลด - พารามิเตอร์ load-on-startup
7.3 ตัวเลือกเซิร์ฟเล็ต
ด้วยความช่วยเหลือของ web.xml พารามิเตอร์สามารถส่งไปยังเซิร์ฟเล็ตระหว่างการเริ่มต้นได้ พารามิเตอร์เหล่านั้นจะพร้อมใช้งานผ่านอินเทอร์เฟServletConfig
ซ คุณยังสามารถตั้งค่าพารามิเตอร์สำหรับเว็บแอปพลิเคชันทั้งหมดได้ โดยจะมีให้ใช้งานผ่านServletContext
ทาง
ตัวอย่าง 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>
รหัสที่เน้นด้วยสีเขียวคือตำแหน่งที่เราตั้งค่าพารามิเตอร์ServletContext
สำหรับ มีสองคน:
productionMode
มีค่าเป็นเท็จappPropertiesConfig
ด้วยอาร์เรย์ของสองสาย:classpath:local-app.properties
classpath:web-app.properties
พารามิเตอร์สำหรับเซิร์ฟเล็ตจะแสดงเป็นสีน้ำเงินApplicationServlet
ซึ่งจะมีให้ใช้งานผ่านServletConfig
:
application
ด้วยค่า com.codegym.Appwidgetset
ด้วยค่า com.codegym.WidgetSetui
ด้วยค่า com.codegym.AppUI
ตัวกรอง 7.4 แมปตัวกรอง
เว็บแอปพลิเคชันยังอาจมีไฟล์utility servlets - filters
. พวกเขาทำงานบริการต่างๆ: เปลี่ยนเส้นทางการโทร ตรวจสอบการอนุญาต ฯลฯ
ตัวอย่าง 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>
ก่อนที่คำขอจะไปถึงเซิร์ฟเล็ตRemotingServlet
คำขอนั้นจะถูกประมวลผลโดยตัวTotalFiler
กรอง ตัวกรองนี้ได้รับการกำหนดค่าให้สกัดกั้นคำขอทั้งหมดที่ส่งไปยังเว็บแอปพลิเคชันของเรา สิ่งนี้บอกเป็นนัยอย่างชัดเจนโดยเทมเพลต url ที่แมปกับ/*
:
คุณจะอ่านเพิ่มเติมเกี่ยวกับเซิร์ฟเล็ตและตัวกรองได้ในการบรรยายต่อไปนี้
GO TO FULL VERSION