ServletContextEvent và ServletContextListener trong Jakarta EE Servlet

669

Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh

ServletContextEvent và ServletContextListener là 2 đối tượng của Jakarta EE Servlet có nhiệm vụ ghi nhận và xử lý những thay đổi trong ServletContext của một ứng dụng web khi ứng dụng web này được deploy lên Server Runtime. Bất kỳ những thay đổi nào của ServletContext, ServletContextEvent cũng sẽ ghi nhận và ServletContextListener cũng sẽ thực hiện những thay đổi đó.

  Nói về ServletContext và ServletConfig trong Jakarta EE Servlet
  Định nghĩa request URL trong ứng dụng Jakarta EE RESTful Web Services

Xem thêm tuyển dụng Scala hấp dẫn trên TopDev

Những thay đổi này sẽ xảy ra lúc ứng dụng được deploy và lúc chúng ta stop ứng dụng. Các bạn có thể thêm code để khi ứng dụng chạy lên hoặc stop đi, một số thao tác sẽ được thực hiện tuỳ theo nhu cầu của mình. Để làm được điều này, các bạn hãy tạo mới một custom class implement ServletContextListener interface như sau:

package com.huongdanjava.jakartaee;

import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;

public class HuongDanJavaServletContextListener implements ServletContextListener {

@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("contextDestroyed");
}

@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("contextInitialized");
}
}

Sau đó thì khai báo class custom này vào tập tin web.xml như sau:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
version="5.0">

<listener>
<listener-class>com.huongdanjava.jakartaee.HuongDanJavaServletContextListener</listener-class>
</listener>
</web-app>

Hoặc các bạn cũng có thể sử dụng annotation @WebListener với custom class trên:

package com.huongdanjava.jakartaee;

import jakarta.servlet.ServletContextEvent;
import jakarta.servlet.ServletContextListener;
import jakarta.servlet.annotation.WebListener;

@WebListener
public class HuongDanJavaServletContextListener implements ServletContextListener {

@Override
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("contextDestroyed");
}

@Override
public void contextInitialized(ServletContextEvent sce) {
System.out.println("contextInitialized");
}
}

Một trong 2 cách thôi các bạn nhé!

Lúc này, khi chạy ứng dụng, các bạn sẽ thấy code bên trong phương thức contextInitialized() được gọi như sau:

Nếu bạn stop Server Runtime, các bạn sẽ thấy code trong phương thức contextDestroyed() được gọi: