登入驗證是 Web 應用最基礎的功能。本文以「JSP 前端 → Servlet 控制器 → DAO 資料存取 → MySQL 資料庫」為架構,示範一個完整、可部署的登入流程,涵蓋表單提交、參數接收、資料庫查詢、轉發/重導向與 web.xml 設定。
src/
com.test.entity.User // 實體類
com.test.dao.UserDao // 資料存取
com.test.servlet.LoginServlet // 控制器
WebContent/
login.jsp // 登入頁
index.jsp // 成功頁
error.jsp // 失敗頁
WEB-INF/web.xml
public class User {
private String userName, password;
// getter / setter 略
}
<%@ page pageEncoding="UTF-8" %>
<form action="LoginServlet" method="post">
用戶名: <input type="text" name="userName"/>
密碼: <input type="password" name="password"/>
<input type="submit" value="登入"/>
</form>
關鍵:pageEncoding="UTF-8" 避免中文亂碼;action 對應 Servlet 映射路徑。
@WebServlet("/LoginServlet")
public class LoginServlet extends HttpServlet {
private UserDao userDao = new UserDao();
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String userName = req.getParameter("userName");
String password = req.getParameter("password");
boolean ok = userDao.checkLogin(userName, password);
if (ok) {
req.getRequestDispatcher("index.jsp").forward(req, resp); // 轉發
} else {
resp.sendRedirect("error.jsp"); // 重導向
}
}
}
轉發 vs 重導向:轉發保留 request 屬性、瀏覽器網址不變;重導向發新請求、網址改變。
public class UserDao {
public boolean checkLogin(String userName, String password) {
String sql = "SELECT 1 FROM user WHERE userName=? AND password=?";
try (Connection conn = DriverManager.getConnection(URL, USER, PASS);
PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setString(1, userName);
ps.setString(2, password);
try (ResultSet rs = ps.executeQuery()) {
return rs.next();
}
} catch (SQLException e) { throw new RuntimeException(e); }
}
}
使用 PreparedStatement 防 SQL 注入;try-with-resources 自動關閉資源。
<servlet>
<servlet-name>LoginServlet</servlet-name>
<servlet-class>com.test.servlet.LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>LoginServlet</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
test、資料表 user(userName varchar(50), password varchar(50)) 插入測試資料https://localhost:8080/專案名/login.jsp本範例展示 Java Web 登入的最小完整閉環,適合初學者理解請求流向與分層職責。實務專案請務必強化安全性、連線管理與例外處理。