本範例展示一個極簡的會員系統:歡迎頁 → 登入/註冊頁 → 表單提交處理 → Session 登入態維持 → 主頁驗證。採用 JSP + JDBC 直連 Oracle,適合初學者理解請求流轉與 Session 機制。
index.jsp (歡迎頁,銷毀舊 Session)
├── denglu.jsp (登入表單) → test_denglu.jsp (驗證邏輯)
└── zhuce.jsp (註冊表單) → test_zhuce.jsp (寫入 DB → 重導登入)
index.jsp:清除舊會話<%@ page contentType="text/html;charset=UTF-8" %>
<% session.invalidate(); %>
<a href="denglu.jsp">請登入</a> | <a href="zhuce.jsp">註冊</a>
denglu.jsp<form action="test_denglu.jsp" method="post">
用戶名:<input name="username"><br/>
密碼:<input type="password" name="password"><br/>
<input type="submit" value="登入">
</form>
test_denglu.jsp<%@ page import="java.sql.*" %>
<%
String user = request.getParameter("username");
String pwd = request.getParameter("password");
Connection conn = null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:SP", "test", "123");
PreparedStatement ps = conn.prepareStatement(
"SELECT * FROM USERS WHERE username=? AND password=?");
ps.setString(1, user); ps.setString(2, pwd);
ResultSet rs = ps.executeQuery();
if (rs.next()) {
session.setAttribute("username", user);
response.sendRedirect("main.jsp");
} else {
out.println("帳號或密碼錯誤,5 秒後返回...");
response.setHeader("refresh", "5;URL=denglu.jsp");
}
} catch (Exception e) { e.printStackTrace(); }
finally { if (conn!=null) conn.close(); }
%>
test_zhuce.jsp(含重複檢查)<%
String user = new String(request.getParameter("username").getBytes("ISO-8859-1"), "UTF-8");
String pwd = request.getParameter("password");
Connection conn = DriverManager.getConnection(...);
// 檢查是否存在
PreparedStatement chk = conn.prepareStatement("SELECT 1 FROM USERS WHERE username=?");
chk.setString(1, user);
if (chk.executeQuery().next()) {
out.println("用戶名已存在,建議:" + user + "99");
response.setHeader("refresh", "5;URL=zhuce.jsp");
} else {
PreparedStatement ins = conn.prepareStatement(
"INSERT INTO USERS VALUES (seq_user.nextval, ?, ?)");
ins.setString(1, user); ins.setString(2, pwd);
if (ins.executeUpdate() == 1) {
session.setAttribute("username", user);
out.println("註冊成功,3 秒後跳轉登入頁");
response.setHeader("refresh", "3;URL=denglu.jsp");
}
}
%>
main.jsp:Session 驗證與登出<%
Object u = session.getAttribute("username");
if (u != null) {
out.println(u + " 登入成功 <br/>");
out.println("<a href='logout.jsp'>登出</a>");
} else {
out.println("登入逾時,請重新登入");
response.setHeader("refresh", "5;URL=denglu.jsp");
}
%>
logout.jsp<% session.invalidate(); response.sendRedirect("index.jsp"); %>
URIEncoding 全鏈路一致。此範例旨在演示基礎流程,實務專案請採用 MVC 架構(Spring MVC / Spring Boot)並遵循上述安全規範。