深入掌握Java Web开发:数据库交互与会话管理实战指南(第二部分)

Java Web开发实战指南:数据库与会话技术解析(一)-CSDN技术专栏
内容导航
第四章:Java Web项目中的MySQL数据库实践
4.1 MySQL基础操作指南
4.2 JDBC核心技术剖析
4.3 连接池技术实战应用
第五章:Web应用中的状态管理技术
5.1 Cookie技术全解析
5.2 Session机制详解


第四章:Java Web项目中的MySQL数据库实践

4.1 MySQL基础操作指南

MySQL作为开源关系型数据库的代表,在Java Web开发中承担着数据存储的核心任务。掌握其基础操作是进行Web应用开发的必备技能。
在MySQL中,数据库相当于数据存储的容器。创建新数据库时,可以使用CREATE DATABASE命令,其标准语法为CREATE DATABASE [IF NOT EXISTS] 数据库名称;。其中IF NOT EXISTS是可选项,用于避免重复创建时的错误提示。例如,创建名为web_db的数据库:

CREATE DATABASE IF NOT EXISTS web_db;

要选择当前操作的数据库,使用USE语句,如USE web_db;。查看所有数据库列表可使用SHOW DATABASES;命令。删除数据库则使用DROP DATABASE web_db;,但需注意此操作会永久删除所有数据。
数据表是数据库中存储结构化数据的基本单元。创建表时需要定义表结构和字段属性。例如创建用户信息表:

CREATE TABLE user_info (
user_id INT AUTO_INCREMENT PRIMARY KEY,
user_name VARCHAR(50) NOT NULL,
user_email VARCHAR(100) UNIQUE,
login_pwd VARCHAR(60)
);

查看表结构使用DESCRIBE user_info;,删除表使用DROP TABLE user_info;。
数据操作示例:
插入单条记录:

INSERT INTO user_info (user_name, user_email, login_pwd)
VALUES ('admin', 'admin@example.com', 'secure123');

批量插入:

INSERT INTO user_info (user_name, user_email, login_pwd) VALUES
('user1', 'user1@mail.com', 'pass123'),
('user2', 'user2@mail.com', 'pass456');

数据查询:
基本查询:

SELECT * FROM user_info;

条件查询:

SELECT user_name, user_email FROM user_info WHERE user_id = 1;

排序查询:

SELECT * FROM user_info ORDER BY user_name DESC;

数据更新:

UPDATE user_info SET login_pwd = 'newpass' WHERE user_id = 1;

数据删除:

DELETE FROM user_info WHERE user_id = 2;

4.2 JDBC核心技术剖析

JDBC技术为Java程序提供了标准化的数据库访问接口,使开发者能够以统一的方式操作各类数据库。
核心组件解析:
1. 驱动管理:

Class.forName("com.mysql.cj.jdbc.Driver");
  1. 连接建立:
String connStr = "jdbc:mysql://localhost:3306/web_db";
Connection conn = DriverManager.getConnection(connStr, "root", "password");
  1. 语句执行:
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM user_info");
  1. 预处理语句:
String sql = "INSERT INTO user_info VALUES (?,?,?)";
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "newUser");
pstmt.setString(2, "new@email.com");
pstmt.setString(3, "userpass");
pstmt.executeUpdate();

完整示例:

public class DBConnector {
public static void main(String[] args) {
String url = "jdbc:mysql://localhost:3306/web_db";
String user = "root";
String password = "admin123";
try {
Connection connection = DriverManager.getConnection(url, user, password);
Statement statement = connection.createStatement();
ResultSet result = statement.executeQuery("SELECT * FROM user_info");
while(result.next()) {
System.out.println("ID: "+result.getInt("user_id")+
", Name: "+result.getString("user_name"));
}
result.close();
statement.close();
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

常见问题处理:
- 驱动加载失败:检查驱动jar包和类名
- 连接异常:验证连接参数和数据库状态
- SQL注入防护:始终使用PreparedStatement

4.3 连接池技术实战应用

数据库连接池通过复用连接显著提升系统性能,特别适合高并发Web应用。
主流连接池对比:
1. HikariCP:高性能、轻量级
2. C3P0:稳定可靠、功能全面
3. DBCP:配置灵活、易于使用
C3P0配置示例:
1. Maven依赖:

<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.5.5</version>
</dependency>
  1. XML配置:
<c3p0-config>
<default-config>
<property name="driverClass">com.mysql.cj.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://localhost/web_db</property>
<property name="user">root</property>
<property name="password">password</property>
<property name="initialPoolSize">5</property>
<property name="maxPoolSize">20</property>
</default-config>
</c3p0-config>
  1. 代码实现:
public class ConnectionPoolDemo {
public static void main(String[] args) {
ComboPooledDataSource pool = new ComboPooledDataSource();
try(Connection conn = pool.getConnection();
PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM user_info");
ResultSet rs = pstmt.executeQuery()) {
while(rs.next()) {
System.out.println(rs.getString("user_name"));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
pool.close();
}
}
}

第五章:Web应用中的状态管理技术

Cookie机制通过在客户端存储小型数据实现状态保持。
核心特性:
- 名称/值对存储
- 可设置过期时间
- 支持路径和域名限制
- 可启用安全传输
Java操作示例:
1. 创建Cookie:

Cookie userCookie = new Cookie("lastVisit", new Date().toString());
userCookie.setMaxAge(86400); // 24小时有效期
userCookie.setPath("/");
response.addCookie(userCookie);
  1. 读取Cookie:
Cookie[] cookies = request.getCookies();
if(cookies != null) {
for(Cookie cookie : cookies) {
if("lastVisit".equals(cookie.getName())) {
System.out.println("上次访问时间:"+cookie.getValue());
}
}
}
  1. 删除Cookie:
Cookie removeCookie = new Cookie("lastVisit", "");
removeCookie.setMaxAge(0);
response.addCookie(removeCookie);

注意事项:
- 单个Cookie不超过4KB
- 每个域名下Cookie数量有限
- 敏感数据需设置HttpOnly和Secure标志

5.2 Session机制详解

Session技术通过在服务端维护用户会话状态,提供更安全的数据存储。
工作流程:
1. 首次访问时创建Session
2. 通过JSESSIONID标识会话
3. 数据存储在服务器内存中
4. 会话超时或主动销毁时清除
Java实现示例:
1. 获取Session:

HttpSession session = request.getSession();
  1. 存取数据:
// 存储
session.setAttribute("currentUser", userObj);
// 读取
User user = (User)session.getAttribute("currentUser");
  1. 会话控制:
// 设置超时(分钟)
session.setMaxInactiveInterval(30);
// 销毁会话
session.invalidate();

安全建议:
- 避免存储大量数据
- 及时销毁不再需要的会话
- 考虑分布式环境下的会话共享方案
Cookie与Session协同:
当客户端禁用Cookie时,可采用URL重写:

String url = response.encodeURL("/user/profile");
out.println("<a href='"+url+"'>个人中心</a>");

通过掌握这些核心技术,开发者能够构建出功能完善、性能优异的Java Web应用程序。

相关文章

暂无评论

暂无评论...