Nói về ServletContext và ServletConfig trong Jakarta EE Servlet
Bài viết được sự cho phép của tác giả Nguyễn Hữu Khanh
ServletContext là một đối tượng được khởi tạo bởi Web Container khi chúng ta deploy ứng dụng Jakarta EE web application. Nó được sử dụng lưu trữ và lấy thông tin mà chúng ta cấu hình cho tất cả các Servlet có trong ứng dụng. Còn ServletConfig thì giúp chúng ta lấy thông tin được định nghĩa cho một Servlet cụ thể nào đó. Cụ thể như thế nào? Trong bài viết này, mình sẽ thảo luận với các bạn về ServletContext và ServletConfig trong Jakarta EE Servlet các bạn nhé!
Xem thêm các việc làm COBOL hấp dẫn trên TopDev
Đầu tiên, mình sẽ mới một Jakarta EE Servlet Maven project để làm ví dụ:
Bây giờ, mình sẽ tạo mới 2 Servlet:
HelloWorldServlet
package com.huongdanjava.jakartaee.servlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class HelloWorldServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { // Writing the message on the web page PrintWriter out = resp.getWriter(); out.println("Hello Servlet"); } }
và HuongDanJavaServlet:
package com.huongdanjava.jakartaee.servlet; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class HuongDanJavaServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { // Writing the message on the web page PrintWriter out = resp.getWriter(); out.println("Huong Dan Java Servlet"); } }
rồi khai báo chúng trong 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"> <servlet> <servlet-name>helloServlet</servlet-name> <servlet-class>com.huongdanjava.jakartaee.servlet.HelloWorldServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>helloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> <servlet> <servlet-name>huongdanjavaServlet</servlet-name> <servlet-class>com.huongdanjava.jakartaee.servlet.HuongDanJavaServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>huongdanjavaServlet</servlet-name> <url-pattern>/huongdanjava</url-pattern> </servlet-mapping> </web-app>
Kết quả khi chạy ứng dụng, request tới http://localhost:8080/hello như sau:
Và request tới http://localhost:8080/huongdanjava như sau:
Nếu các bạn định nghĩa thông tin cho tất cả các Servlet trong ứng dụng sử dụng một hoặc nhiều tag <context-param> trong tập tin web.xml như sau:
<context-param> <param-name>name</param-name> <param-value>Khanh</param-value> </context-param> <context-param> <param-name>website</param-name> <param-value>Huong Dan Java</param-value> </context-param>
Khi đó, trong cả 2 Servlet mà mình định nghĩa ở trên đều có thể lấy được thông tin cấu hình này bằng cách sử dụng đối tượng ServletContext, ví dụ như sau:
package com.huongdanjava.jakartaee.servlet; import jakarta.servlet.ServletContext; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class HelloWorldServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { // Writing the message on the web page PrintWriter out = resp.getWriter(); out.println("Hello Servlet"); ServletContext servletContext = getServletContext(); out.println(servletContext.getInitParameter("name")); out.println(servletContext.getInitParameter("website")); } }
Hay:
package com.huongdanjava.jakartaee.servlet; import jakarta.servlet.ServletContext; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class HuongDanJavaServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { // Writing the message on the web page PrintWriter out = resp.getWriter(); out.println("Huong Dan Java Servlet"); ServletContext servletContext = getServletContext(); out.println(servletContext.getInitParameter("name")); out.println(servletContext.getInitParameter("website")); } }
Phương thức getServletContext() sẽ trả về đối tượng ServletContext được manage bởi Web Container mà ứng dụng đang được deploy, được khởi tạo lúc chúng ta deploy ứng dụng.
Kết quả:
Hay:
Còn nếu các bạn định nghĩa thông tin cho một Servlet cụ thể nào đó bằng cách khai báo tag <init-param> bên trong tag <servlet>, thì thông tin này sẽ không available với các Servlet khác của ứng dụng và chúng ta lấy những thông tin này sử dụng ServletConfig.
Ví dụ bây giờ, mình khai bá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"> <servlet> <servlet-name>helloServlet</servlet-name> <servlet-class>com.huongdanjava.jakartaee.servlet.HelloWorldServlet</servlet-class> <load-on-startup>1</load-on-startup> <init-param> <param-name>name</param-name> <param-value>Khanh</param-value> </init-param> <init-param> <param-name>website</param-name> <param-value>Huong Dan Java</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>helloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> <servlet> <servlet-name>huongdanjavaServlet</servlet-name> <servlet-class>com.huongdanjava.jakartaee.servlet.HuongDanJavaServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>huongdanjavaServlet</servlet-name> <url-pattern>/huongdanjava</url-pattern> </servlet-mapping> </web-app>
thì với đoạn code ở trên, chúng ta sẽ không lấy được thông tin context-param nữa:
Và:
Các bạn có thể lấy thông tin được khai báo trong HelloServlet bằng cách sử dụng ServletConfig như sau:
package com.huongdanjava.jakartaee.servlet; import jakarta.servlet.ServletConfig; import jakarta.servlet.http.HttpServlet; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import java.io.IOException; import java.io.PrintWriter; public class HelloWorldServlet extends HttpServlet { private static final long serialVersionUID = 1L; @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { // Writing the message on the web page PrintWriter out = resp.getWriter(); out.println("Hello Servlet"); ServletConfig servletConfig = getServletConfig(); out.println(servletConfig.getInitParameter("name")); out.println(servletConfig.getInitParameter("website")); } }
Kết quả:
Request tới http://localhost:8080/huongdanjava, các bạn sẽ thấy kết quả như sau:
Còn nhiều thông tin khác mà các bạn có thể cấu hình với Jakarta EE Servlet và cũng có thể sử dụng ServletContext và ServletConfig để lấy những thông tin này các bạn nhé!
- B BenQ RD Series – Dòng Màn Hình Lập Trình 4k+ Đầu Tiên Trên Thế Giới
- i iOS 18 có gì mới? Có nên cập nhật iOS 18 cho iPhone của bạn?
- G Gamma AI là gì? Cách tạo slide chuyên nghiệp chỉ trong vài phút
- P Power BI là gì? Vì sao doanh nghiệp nên sử dụng PBI?
- K KICC HCMC x TOPDEV – Bước đệm nâng tầm sự nghiệp cho nhân tài IT Việt Nam
- T Trello là gì? Cách sử dụng Trello để quản lý công việc
- T TOP 10 SỰ KIỆN CÔNG NGHỆ THƯỜNG NIÊN KHÔNG NÊN BỎ LỠ
- T Tìm hiểu Laptop AI – So sánh Laptop AI với Laptop thường
- M MySQL vs MS SQL Server: Phân biệt hai RDBMS phổ biến nhất
- S SearchGPT là gì? Công cụ tìm kiếm mới có thể đánh bại Google?