┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ JSP 頁面 │ ←→ │ Servlet │ ←→ │ Service/DAO │ ←→ │ MySQL DB │
│ (View) │ │ (Controller)│ │ (Model) │ │ (Data) │
└─────────────┘ └─────────────┘ └─────────────┘ └─────────────┘
public class User {
private int id;
private String username;
private String email;
// Getter/Setter/建構子/toString 省略
}
public interface UserDao {
List findAll();
boolean update(User user);
}
public class UserDaoImpl implements UserDao {
private DataSource dataSource; // 注入連線池
@Override
public List findAll() {
String sql = "SELECT id, username, email FROM users";
try (Connection conn = dataSource.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery()) {
List list = new ArrayList<>();
while (rs.next()) {
User u = new User();
u.setId(rs.getInt("id"));
u.setUsername(rs.getString("username"));
u.setEmail(rs.getString("email"));
list.add(u);
}
return list;
} catch (SQLException e) { throw new RuntimeException(e); }
}
@Override
public boolean update(User user) {
String sql = "UPDATE users SET username=?, email=? WHERE id=?";
try (Connection conn = dataSource.getConnection();
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, user.getUsername());
ps.setString(2, user.getEmail());
ps.setInt(3, user.getId());
return ps.executeUpdate() > 0;
} catch (SQLException e) { throw new RuntimeException(e); }
}
}
@WebServlet("/users")
public class UserServlet extends HttpServlet {
@Inject UserDao userDao; // 或手動 new UserDaoImpl()
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String action = req.getParameter("action");
if ("edit".equals(action)) {
// 轉發到編輯頁
req.setAttribute("user", userDao.findById(Integer.parseInt(req.getParameter("id"))));
req.getRequestDispatcher("/edit.jsp").forward(req, resp);
} else {
// 列表頁
req.setAttribute("users", userDao.findAll());
req.getRequestDispatcher("/list.jsp").forward(req, resp);
}
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");
User user = new User();
user.setId(Integer.parseInt(req.getParameter("id")));
user.setUsername(req.getParameter("username"));
user.setEmail(req.getParameter("email"));
boolean ok = userDao.update(user);
resp.sendRedirect(req.getContextPath() + "/users?msg=" + (ok ? "success" : "fail"));
}
}
<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<table border="1">
<tr><th>ID</th><th>用戶名</th><th>Email</th><th>操作</th></tr>
<c:forEach items="${users}" var="u">
<tr>
<td>${u.id}</td>
<td>${u.username}</td>
<td>${u.email}</td>
<td>
<a href="users?action=edit&id=${u.id}">編輯</a>
</td>
</tr>
</c:forEach>
</table>
<form action="users" method="post">
<input type="hidden" name="id" value="${user.id}">
用戶名: <input name="username" value="${user.username}"><br>
Email: <input name="email" value="${user.email}"><br>
<button type="submit">更新</button>
</form>
DriverManager.getConnection。req.setCharacterEncoding("UTF-8") + 資料庫 utf8mb4。完整 Maven 專案 (含 SQL 腳本、Tomcat 插件) 參考:CSDN 下載鏈結