8.1 Giới thiệu về chú thích servlet
Bắt đầu với phiên bản 7, Tomcat bắt đầu hỗ trợ đặc tả servlet web Servlet API 3.0 . Cụ thể, một gói xuất hiện trong đó có tên javax.servlet.annotation
. Nó chứa nhiều loại chú thích có thể được sử dụng để chú thích một lớp servlet. Nếu bạn sử dụng chú thích, thì bộ mô tả triển khai (web.xml) là không cần thiết.
Danh sách các chú thích hữu ích nhất:
chú thích | Sự miêu tả | |
---|---|---|
1 | @WebServlet |
Khai báo một servlet |
2 | @WebInitParam |
Chỉ định một tham số khởi tạo |
3 | @WebFilter |
Khai báo bộ lọc web |
4 | @WebListener |
Khai báo trình nghe web |
5 | @ServletSecurity |
Cho phép bạn định cấu hình cài đặt bảo mật |
Ví dụ:
@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!");
}
}
Một chú thích là đủ để khai báo một servlet và ánh xạ nó để phục vụ tất cả các yêu cầu sẽ đến URL được cung cấp bởi /api/*
.
8.2 Thiết lập ánh xạ servlet
Chú thích có @WebServlet
nhiều tham số cho phép cấu hình rất linh hoạt của servlet mà nó mô tả. Chúng ta hãy xem xét những cái chính:
Thuộc tính | Sự miêu tả | |
---|---|---|
1 | name |
Tên duy nhất của Servlet (như trong web.xml) |
2 | displayName |
Tên servlet có thể đọc được của con người |
3 | description |
Mô tả Servlet |
4 | value |
Đặt url cho ánh xạ |
5 | urlPatterns |
Chỉ định danh sách các url để ánh xạ (được sử dụng thay cho giá trị) |
6 | initParams |
Cho phép bạn đặt các tham số bắt đầu của servlet |
7 | asyncSupported |
Chỉ định rằng servlet có thể chạy không đồng bộ (HTTP/2) |
số 8 | loadOnStartup |
Số thứ tự để kiểm soát mức độ ưu tiên bắt đầu của servlet |
9 | smallIcon |
Đặt một biểu tượng servlet nhỏ |
10 | largeIcon |
Đặt một biểu tượng servlet lớn |
Có một số điểm thú vị ở đây.
Đầu tiên, lưu ý rằng value
và urlPatterns
là các thuộc tính có thể hoán đổi cho nhau. Cả hai đều cho phép bạn chỉ định một danh sách các URL mà servlet sẽ ánh xạ tới.
Thứ hai, tham số asyncSupported
cho biết liệu servlet có xử lý chính xác các yêu cầu không đồng bộ qua giao thức HTTP/2 hay không.
Và thuộc tính quan trọng thứ ba là initParams
, nó cho phép bạn thiết lập một danh sách các tham số sẽ được đặt trong ServletContext.
Ví dụ:
@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 Thiết lập ánh xạ bộ lọc
Như đã đề cập ở trên, bộ lọc là một loại tiện ích của servlet và chúng được cấu hình giống như servlet. Dưới đây là các thuộc tính mà một chú thích có @WebFilter
:
Thuộc tính | Sự miêu tả | |
---|---|---|
1 | filterName |
Lọc tên duy nhất (như trong web.xml) |
2 | displayName |
Tên bộ lọc có thể đọc được của con người |
3 | description |
Mô tả bộ lọc |
4 | value / urlPatterns |
Đặt danh sách các url để ánh xạ |
5 | dispatcherTypes |
Chỉ định một danh sách các DispatcherTypes |
6 | servletNames |
Chỉ định một danh sách các servlet để áp dụng cho |
7 | initParams |
Cho phép bạn đặt các tham số bắt đầu của bộ lọc |
số 8 | asyncSupported |
Chỉ định rằng bộ lọc có thể chạy không đồng bộ (HTTP/2) |
9 | smallIcon |
Đặt biểu tượng bộ lọc nhỏ |
10 | largeIcon |
Đặt biểu tượng bộ lọc lớn |
Một ví dụ về bộ lọc chặn tất cả các yêu cầu đối với các servlet cụ thể :
@WebFilter(servletNames = {"MyOwnServlet", "UploadServlet"})
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Một ví dụ về bộ lọc được cung cấp nhiều tham số :
@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...
}
Một ví dụ về các loại bộ lọc được cung cấp cho RequestDispatcher :
@WebFilter(
urlPatterns = "/admin",
dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}
)
public class MyFilter implements Filter {
// implements Filter's methods here...
}
Bạn sẽ tìm hiểu thêm về mục đích của các bộ lọc và servlet trong các bài giảng sau.
GO TO FULL VERSION