Để triển khai ứng dụng web Java sử dụng JSP có khả năng truy xuất cơ sở dữ liệu từ xa, chúng ta cần cấu hình môi trường gồm hai máy chủ riêng biệt: một máy chủ ứng dụng chạy Tomcat và một máy chủ cơ sở dữ liệu chạy MySQL. Dưới đây là quy trình chi tiết để thiết lập kết nối này trên hệ điều hành CentOS 7.
1. Chuẩn bị trình điều khiển MySQL Connector
Trước tiên, cần tải xuống thư viện JDBC chính thức từ MySQL để Tomcat có thể giao tiếp với database. Truy cập trang chủ của MySQL và tìm kiếm mục MySQL Connector/J. Chọn phiên bản phù hợp, ưu tiên gói Platform Independent để đảm bảo tính tương thích. Giả sử phiên bản tải về là mysql-connector-java-8.0.15.tar.gz. Sau khi tải xong, hãy chuyển file này sang máy chủ chứa Tomcat (địa chỉ IP ví dụ: 192.168.10.10).
2. Cấu hình cơ sở dữ liệu và phân quyền
Trên máy chủ MySQL (địa chỉ IP ví dụ: 192.168.10.20), thực hiện đăng nhập vào hệ quản trị cơ sở dữ liệu để tạo mới database, bảng dữ liệu và tài khoản truy cập dành riêng cho ứng dụng web.
[root@server-db ~]# mysql -uroot -p
Enter password:
mysql> create database demo_store;
Query OK, 1 row affected (0.01 sec)
mysql> use demo_store;
Database changed
mysql> create table members(member_id int, full_name varchar(50));
Query OK, 0 rows affected (0.03 sec)
mysql> insert into members values(101, 'Nguyen Van A'),(102, 'Tran Thi B');
Query OK, 2 rows affected (0.05 sec)
mysql> select * from members;
+-----------+-------------+
| member_id | full_name |
+-----------+-------------+
| 101 | Nguyen Van A|
| 102 | Tran Thi B |
+-----------+-------------+
2 rows in set (0.00 sec)
mysql> grant all on demo_store.* to 'app_service'@'192.168.10.10' identified by 'secure_pass_123';
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> exit
3. Cài đặt Driver vào Tomcat và khởi động lại
Tr quay lại máy chủ ứng dụng, giải nén file connector đã tải về và sao chép file .jar vào thư mục lib within cài đặt của Tomcat. Sau đó, tiến hành restart service để nạp thư viện mới.
[root@server-app ~]# tar -xvf mysql-connector-java-8.0.15.tar.gz -C /tmp/installers/
[root@server-app ~]# cp /tmp/installers/mysql-connector-java-8.0.15/mysql-connector-java-8.0.15.jar /opt/tomcat/current/lib/
[root@server-app ~]# ps -ef | grep tomcat
root 4501 1 0 10:00 ? 00:00:15 /usr/local/jdk/bin/java -Djava.util.logging.config.file=/opt/tomcat/current/conf/logging.properties ...
[root@server-app ~]# kill -9 4501
[root@server-app ~]# /opt/tomcat/current/bin/startup.sh
Using CATALINA_BASE: /opt/tomcat/current
Using CATALINA_HOME: /opt/tomcat/current
Using CATALINA_TMPDIR: /opt/tomcat/current/temp
Using JRE_HOME: /usr/local/jdk
Using CLASSPATH: /opt/tomcat/current/bin/bootstrap.jar:/opt/tomcat/current/bin/tomcat-juli.jar
Tomcat started.
4. Xây dựng trang JSP kiểm tra kết nối
Tạo một file JSP mới trong thư mục gốc của ứng dụng để kiểm tra khả năng truy xuất dữ liệu. Lưu ý chuỗi kết nối cần chính xác về địa chỉ IP, cổng, tên database, user, password và bảng mã ký tự.
[root@server-app ~]# vim /opt/tomcat/current/webapps/ROOT/check_db.jsp
<%@ page import="java.sql.*" %>
<html>
<head><title>Kiem Tra Ket Noi DB</title></head>
<body>
<%
String jdbcUrl = "jdbc:mysql://192.168.10.20:3306/demo_store?user=app_service&password=secure_pass_123&useUnicode=true&characterEncoding=utf-8";
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
try {
Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
connection = DriverManager.getConnection(jdbcUrl);
statement = connection.createStatement();
String sqlQuery = "select * from members";
resultSet = statement.executeQuery(sqlQuery);
while(resultSet.next()){
%>
<p>Ma thanh vien: <%= resultSet.getInt("member_id") %></p>
<p>Ho ten: <%= resultSet.getString("full_name") %></p>
<hr/>
<%
}
out.println("<b>Thanh cong: He thong da ket noi MySQL</b>");
} catch (Exception e) {
out.println("Loi ket noi: " + e.getMessage());
} finally {
if(resultSet != null) resultSet.close();
if(statement != null) statement.close();
if(connection != null) connection.close();
}
%>
</body>
</html>
Đảm bảo rằng bảng mã ký tự (character encoding) trong chuỗi kết nối JDBC khớp với cấu hình của máy chủ MySQL để tránh lỗi hiển thị ký tự tiếng Việt.