Annotation (chú thích) là gì?
- Annotation là các chú thích (bắt đầu bằng
@
) được thêm trực tiếp vào mã nguồn Java. - Bắt đầu từ Servlet 3.0 (Java EE 6), Annotation cho phép thay thế
web.xml
trong nhiều trường hợp. - Khai báo servlet, filter, listener một cách nhanh chóng ngay trong code, giúp giảm sự phụ thuộc vào
web.xml
.
Ví dụ
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/hello")
public class MyServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
resp.getWriter().println("Hello from annotation!");
}
}
Các ví dụ khác
@WebServlet
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.*;
@WebServlet(name = "HelloServlet", urlPatterns = {"/hello"})
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
try {
response.setContentType("text/html");
response.getWriter().println("<h1>Hello from @WebServlet!</h1>");
} catch (Exception e) {
e.printStackTrace();
}
}
}
@WebFilter
import jakarta.servlet.*;
import jakarta.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/hello") // Áp dụng cho URL /hello
public class LoggingFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("Request received at: " + new java.util.Date());
chain.doFilter(request, response);
}
}
@WebListener
import jakarta.servlet.annotation.WebListener;
import jakarta.servlet.ServletContextListener;
import jakarta.servlet.ServletContextEvent;
@WebListener
public class AppContextListener implements ServletContextListener {
public void contextInitialized(ServletContextEvent sce) {
System.out.println("Ứng dụng được khởi động");
}
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("Ứng dụng đã dừng");
}
}
@MultipartConfig
Dùng để hỗ trợ upload file:
import jakarta.servlet.annotation.*;
import jakarta.servlet.http.*;
import java.io.*;
@WebServlet("/upload")
@MultipartConfig
public class FileUploadServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
try {
Part filePart = request.getPart("file"); // input name="file"
String fileName = filePart.getSubmittedFileName();
InputStream fileContent = filePart.getInputStream();
// Lưu file, xử lý...
response.getWriter().println("Uploaded: " + fileName);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Ưu điểm của Annotation
- Ngắn gọn và dễ hiểu: Viết trực tiếp trong class liên quan.
- Không cần
web.xml
cho các cấu hình cơ bản. - Giảm lỗi đồng bộ giữa mã và cấu hình.
- Hỗ trợ IDE tốt hơn (autocomplete, highlight, v.v.).
Lưu ý
- Annotation chỉ dùng được từ Servlet 3.0+ (Java EE 6).
- Nếu bạn sử dụng cấu hình kết hợp (vừa
web.xml
, vừa annotation), thìweb.xml
sẽ được ưu tiên hơn nếu có xung đột.