Breaking

29 tháng 5, 2021

DataBase JDBC và Listener trong Jakarta Servlet

 


DataBase JDBC và Listener - Jakarta Servlet


1. Chuẩn bị cơ sở dữ liệu: bạn tải về file .sql ở đây và nhập cơ sở dữ liêu từ PhpMyAdmin:

Sau khi tải về file, hãy vào PhpMyAdmin và làm theo hướng dẫn của tôi để nhập cấu trúc bảng và dữ liệu mẫu nhé. Tên cơ sở dữ liệu tôi để giúp bạn là: WCD_WebComponentDevelopment




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>



4. Tạo class: Database/ DatabaseConnectionManager

Khởi tạo và kết nối đến cơ sở dữ liệu, lấy đối tượng connection để Listener sử dụng.

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è:



💜 Cảm ơn bạn đã đọc bài, hãy để lại bình luận góp ý cho mình nhé 💜

Chúc các bạn thành công!


2 nhận xét:

  1. 💜 Cảm ơn bạn đã đọc bài, hãy để lại bình luận góp ý cho mình nhé 💜
    Chúc các bạn thành công!

    Trả lờiXóa