DataBase JDBC và Listener -
Jakarta Servlet
2. Khai báo dependency trong file porm.xml (Chú ý: bạn có thể dùng phiên bản mới nhất thời điểm lúc bạn làm dự án)
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.24</version>
</dependency>
1. 3. Cấu hình các giá trị DataBase trong
file webapp/WEB-INF/web.xml
Khởi tạo các giá trị cấu hình ban đầu: username, password, driver, dbUrl
<context-param>
<param-name>username</param-name>
<param-value>root</param-value>
</context-param>
<context-param>
<param-name>password</param-name>
<param-value>123456</param-value>
</context-param>
<context-param>
<param-name>driver</param-name>
<param-value>com.mysql.cj.jdbc.Driver</param-value>
</context-param>
<context-param>
<param-name>dbUrl</param-name>
<param-value>jdbc:mysql://192.168.0.3:3306/DatabaseName</param-value>
</context-param>
public class DatabaseConnectionManager {
private Connection connection;
public DatabaseConnectionManager(String username, String password, String driver, String dbUrl) throws ClassNotFoundException, SQLException {
Class.forName(driver);
this.connection = DriverManager.getConnection(dbUrl, username, password);
}
public Connection getConnection() {
return this.connection;
}
}
1. 5. Tạo class: Listener/ApplicationContextListener
Cl Class này nẽ lắng nghe sự kiện kích hoạt DataBase để khởi tạo một kết nối đến cơ sở dữ liệu để Controller sử dụng.
@WebListener
public class ApplicationContextListener implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent sce) {
ServletContext context =
sce.getServletContext();
String username = context.getInitParameter("username");
String password =
context.getInitParameter("password");
String driver =
context.getInitParameter("driver");
String dbUrl = context.getInitParameter("dbUrl");
try {
DatabaseConnectionManager
databaseConnectionManager = new DatabaseConnectionManager(username, password, driver, dbUrl);
Connection connection =
databaseConnectionManager.getConnection();
context.setAttribute("dbConnection", connection);
} catch (ClassNotFoundException | SQLException e) {
e.printStackTrace();
}
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
Connection connection =
(Connection) sce.getServletContext().getAttribute("dbConnection");
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
1. 6. Tạo class: Controller/TestConnectionDatabase
Đây là một Controller, Sau khi gọi sự kiện kết nối DataBase thành công, nó thực hiện câu truy vấn lấy danh sách dữ liệu từ bảng User. Dữ liệu trả về sẽ được gửi tiếp đến View.
(Đây là một ví dụ đơn giản nên tôi sẽ không sử dụng View ở đây. Tôi chỉ đơn giản lặp và hiển thị các bản ghi thôi. Các bạn hãy phát triển bài toán tiếp nhé. Ví dụ thêm View để hiển thị đẹp và xịn xò nè) 😄😊
@WebServlet({"/test-connection-database", "/test-connection-database/"})
public class TestConnectionDatabase extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
Connection connection = (Connection)
request.getServletContext().getAttribute("dbConnection");
try {
PreparedStatement statement =
connection.prepareStatement("
select * from wcd_webcomponentdevelopment.user
");
ResultSet resultSet =
statement.executeQuery();
while(resultSet != null && resultSet.next()){
out.println(
resultSet.getString("username") +": "
+ resultSet.getString("firstname") +", "
+ resultSet.getString("lastname")
);
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Kết quả nè:
Chúc các bạn thành công!
💜 Cảm ơn bạn đã đọc bài, hãy để lại bình luận góp ý cho mình nhé 💜
Trả lờiXóaChúc các bạn thành công!
ty bro
Trả lờiXóa