8.1 ข้อมูลเบื้องต้นเกี่ยวกับหมายเหตุประกอบเซิร์ฟเล็ต
ตั้งแต่เวอร์ชัน 7 เป็นต้น มาTomcat เริ่มสนับสนุน ข้อกำหนดเว็บเซิร์ฟเล็ต Servlet API 3.0 โดยเฉพาะอย่างยิ่ง แพ็คเกจที่ปรากฏในนั้นเรียกว่าjavax.servlet.annotation
. ประกอบด้วยคำอธิบายประกอบประเภทต่างๆ ที่สามารถใช้เพื่ออธิบายประกอบคลาสเซิร์ฟเล็ต หากคุณใช้คำอธิบายประกอบ ก็ไม่จำเป็นต้องใช้ตัวอธิบายการปรับใช้ (web.xml)
รายการคำอธิบายประกอบที่มีประโยชน์ที่สุด:
คำอธิบายประกอบ | คำอธิบาย | |
---|---|---|
1 | @WebServlet |
ประกาศเซิร์ฟเล็ต |
2 | @WebInitParam |
ระบุพารามิเตอร์การเริ่มต้น |
3 | @WebFilter |
ประกาศตัวกรองเว็บ |
4 | @WebListener |
ประกาศผู้ฟังเว็บ |
5 | @ServletSecurity |
ให้คุณกำหนดการตั้งค่าความปลอดภัย |
ตัวอย่าง:
@WebServlet( urlPatterns = {"/api/*"} )
public class Example extends HttpServlet {
protected void doGet( HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("Hello World!");
}
}
คำอธิบายประกอบหนึ่งรายการก็เพียงพอที่จะประกาศเซิร์ฟเล็ตและแม็พเพื่อรองรับคำขอทั้งหมดที่จะมาถึง URL ที่กำหนดโดยไฟล์/api/*
.
8.2 การตั้งค่าการแม็พเซิร์ฟเล็ต
คำอธิบายประกอบมี@WebServlet
พารามิเตอร์มากมายที่อนุญาตให้ตั้งค่าคอนฟิกของเซิร์ฟเล็ตที่อธิบายได้อย่างยืดหยุ่นมาก ลองดูที่หลัก:
คุณลักษณะ | คำอธิบาย | |
---|---|---|
1 | name |
ชื่อเฉพาะของ Servlet (ใน web.xml) |
2 | displayName |
ชื่อเซิร์ฟเล็ตที่มนุษย์อ่านได้ |
3 | description |
คำอธิบายเซิร์ฟเล็ต |
4 | value |
ตั้งค่า URL สำหรับการแมป |
5 | urlPatterns |
ระบุรายการ URL ที่จะจับคู่ (ใช้แทนค่า) |
6 | initParams |
ให้คุณตั้งค่าพารามิเตอร์เริ่มต้นของเซิร์ฟเล็ต |
7 | asyncSupported |
ระบุว่าเซิร์ฟเล็ตสามารถทำงานแบบอะซิงโครนัส (HTTP/2) |
8 | loadOnStartup |
หมายเลขลำดับเพื่อควบคุมลำดับความสำคัญการเริ่มต้นของเซิร์ฟเล็ต |
9 | smallIcon |
ตั้งค่าไอคอนเซิร์ฟเล็ตขนาดเล็ก |
10 | largeIcon |
ตั้งค่าไอคอนเซิร์ฟเล็ตขนาดใหญ่ |
มีจุดที่น่าสนใจหลายประการที่นี่
ขั้นแรก โปรดทราบว่าvalue
และurlPatterns
เป็นแอตทริบิวต์ที่ใช้แทนกันได้ ทั้งคู่อนุญาตให้คุณระบุรายการ URL ที่เซิร์ฟเล็ตควรแม็พด้วย
ประการที่สอง พารามิเตอร์asyncSupported
ระบุว่าเซิร์ฟเล็ตจะประมวลผลคำร้องขอแบบอะซิงโครนัสผ่านโปรโตคอล HTTP/2 ได้อย่างถูกต้องหรือไม่
และแอตทริบิวต์ที่สำคัญประการที่สามคือinitParams
ช่วยให้คุณสามารถตั้งค่ารายการพารามิเตอร์ที่จะวางใน ServletContext
ตัวอย่าง:
@WebServlet(
urlPatterns = {"/sendFile", "/uploadFile"},
loadOnStartup = 1,
asyncSupported = true,
initParams = {
@WebInitParam(name = "saveDir", value = "c:/uploaded"),
@WebInitParam(name = "allowedTypes", value = "jpg,gif,png")
}
)
public class ImageUploadServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws Exception {
String saveDir = getInitParameter("saveDir");
String fileTypes = getInitParameter("allowedTypes");
PrintWriter writer = response.getWriter();
writer.println("saveDir = " + saveDir);
writer.println("fileTypes = " + fileTypes);
}
}
8.3 การตั้งค่าการแมปตัวกรอง
ตามที่กล่าวไว้ข้างต้น ตัวกรองเป็นประเภทยูทิลิตี้ของเซิร์ฟเล็ต และพวกมันได้รับการกำหนดค่าเหมือนเซิร์ฟเล็ต นี่คือคุณลักษณะที่คำอธิบายประกอบมี@WebFilter
:
คุณลักษณะ | คำอธิบาย | |
---|---|---|
1 | filterName |
กรองชื่อเฉพาะ (ใน web.xml) |
2 | displayName |
ชื่อตัวกรองที่มนุษย์อ่านได้ |
3 | description |
คำอธิบายตัวกรอง |
4 | value / urlPatterns |
กำหนดรายการ URL ที่จะแมป |
5 | dispatcherTypes |
ระบุรายการ DispatcherTypes |
6 | servletNames |
ระบุรายการของเซิร์ฟเล็ตที่จะใช้ |
7 | initParams |
ให้คุณตั้งค่าพารามิเตอร์เริ่มต้นของตัวกรอง |
8 | asyncSupported |
ระบุว่าตัวกรองสามารถทำงานแบบอะซิงโครนัส (HTTP/2) |
9 | smallIcon |
ตั้งค่าไอคอนตัวกรองขนาดเล็ก |
10 | largeIcon |
ตั้งค่าไอคอนตัวกรองขนาดใหญ่ |
ตัวอย่างของตัวกรองที่ขัดขวางการร้องขอทั้งหมดไปยังเซิร์ฟเล็ตเฉพาะ :
@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
// implements Filter's methods here...
}
ตัวอย่างของตัวกรองที่กำหนดหลายพารามิเตอร์ :
@WebFilter(
urlPatterns = "/uploadFilter",
initParams = @WebInitParam(name = "fileTypes", value = "doc;xls;zip;txt;jpg;png;gif")
)
public class UploadFilter implements Filter {
// implements Filter's methods here...
}
ตัวอย่างของตัวกรองประเภทที่กำหนดสำหรับ RequestDispatcher :
@WebFilter(
urlPatterns = "/admin",
dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}
)
public class MyFilter implements Filter {
// implements Filter's methods here...
}
คุณจะได้เรียนรู้เพิ่มเติมเกี่ยวกับวัตถุประสงค์ของตัวกรองและเซิร์ฟเล็ตในการบรรยายต่อไปนี้
GO TO FULL VERSION