引言
Servlet是Java EE技术中用于处理HTTP请求和响应的核心组件之一。在Web应用开发中,Servlet与数据库的交互是必不可少的。本文将通过对一个实战案例的分析,详细解析Servlet与数据库交互的过程,帮助读者更好地理解和掌握这一技术。
案例背景
假设我们正在开发一个简单的在线书店系统,其中包含书籍信息、用户信息和订单信息等数据。为了实现系统功能,我们需要使用Servlet与数据库进行交互。
1. 数据库设计
首先,我们需要设计数据库表结构。以下是一个简单的示例:
CREATE TABLE books (
id INT PRIMARY KEY AUTO_INCREMENT,
title VARCHAR(100),
author VARCHAR(100),
price DECIMAL(10, 2)
);
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50),
password VARCHAR(50)
);
CREATE TABLE orders (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT,
book_id INT,
quantity INT,
order_date DATE,
FOREIGN KEY (user_id) REFERENCES users(id),
FOREIGN KEY (book_id) REFERENCES books(id)
);
2. Servlet开发
接下来,我们将开发一个Servlet来处理用户请求。以下是一个简单的示例:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
public class BookServlet extends HttpServlet {
private Connection conn;
public void init() throws ServletException {
try {
Class.forName("com.mysql.jdbc.Driver");
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/bookstore", "root", "password");
} catch (Exception e) {
throw new ServletException("Error initializing database connection", e);
}
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String action = request.getParameter("action");
if ("listBooks".equals(action)) {
listBooks(request, response);
} else if ("addBook".equals(action)) {
addBook(request, response);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
private void listBooks(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
try {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT * FROM books");
out.println("<html><body>");
out.println("<table border='1'><tr><th>ID</th><th>Title</th><th>Author</th><th>Price</th></tr>");
while (rs.next()) {
out.println("<tr><td>" + rs.getInt("id") + "</td><td>" + rs.getString("title") + "</td>"
+ "<td>" + rs.getString("author") + "</td><td>" + rs.getDouble("price") + "</td></tr>");
}
out.println("</table></body></html>");
} catch (SQLException e) {
throw new ServletException("Error listing books", e);
}
}
private void addBook(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String title = request.getParameter("title");
String author = request.getParameter("author");
double price = Double.parseDouble(request.getParameter("price"));
try {
PreparedStatement stmt = conn.prepareStatement("INSERT INTO books (title, author, price) VALUES (?, ?, ?)");
stmt.setString(1, title);
stmt.setString(2, author);
stmt.setDouble(3, price);
stmt.executeUpdate();
response.sendRedirect("listBooks");
} catch (SQLException e) {
throw new ServletException("Error adding book", e);
}
}
public void destroy() {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
3. 配置web.xml
在web.xml文件中,我们需要配置Servlet映射:
<servlet>
<servlet-name>BookServlet</servlet-name>
<servlet-class>com.example.BookServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>BookServlet</servlet-name>
<url-pattern>/books</url-pattern>
</servlet-mapping>
4. 测试
启动Tomcat服务器,访问http://localhost:8080/your-app-context/books?action=listBooks,即可看到书籍列表。访问http://localhost:8080/your-app-context/books?action=addBook,可以添加新书。
总结
本文通过一个实战案例,详细解析了Servlet与数据库交互的过程。通过学习本文,读者应该能够掌握如何使用Servlet与数据库进行交互,并能够将其应用到实际项目中。
