首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

JSP 登入/註冊模組完整實作範例(含 Session 管理與資料庫操作)

     編輯:Java 綜合教學

JSP 登入註冊流程完整代碼示範

本範例展示一個極簡的會員系統:歡迎頁 → 登入/註冊頁 → 表單提交處理 → Session 登入態維持 → 主頁驗證。採用 JSP + JDBC 直連 Oracle,適合初學者理解請求流轉與 Session 機制。

專案頁面流向

index.jsp (歡迎頁,銷毀舊 Session)
    ├── denglu.jsp (登入表單) → test_denglu.jsp (驗證邏輯)
    └── zhuce.jsp  (註冊表單) → test_zhuce.jsp (寫入 DB → 重導登入)

核心代碼節錄

1. 歡迎頁 index.jsp:清除舊會話

<%@ page contentType="text/html;charset=UTF-8" %>
<% session.invalidate(); %>
<a href="denglu.jsp">請登入</a> | <a href="zhuce.jsp">註冊</a>

2. 登入表單 denglu.jsp

<form action="test_denglu.jsp" method="post">
  用戶名:<input name="username"><br/>
  密碼:<input type="password" name="password"><br/>
  <input type="submit" value="登入">
</form>

3. 登入驗證 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(); }
%>

4. 註冊處理 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");
    }
  }
%>

5. 主頁 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");
  }
%>

6. 登出 logout.jsp

<% session.invalidate(); response.sendRedirect("index.jsp"); %>

關鍵安全與最佳實踐提醒

  • 生產環境禁用 Scriptlet:業務邏輯應移至 Servlet/Service,JSP 僅負責渲染。
  • 密碼必須加密儲存:使用 BCrypt/Argon2,嚴禁明文/MD5。
  • 使用 PreparedStatement:防 SQL 注入(範例已採用)。
  • 連線池替代 DriverManager:HikariCP/Druid 提升效能與穩定性。
  • 編碼統一 UTF-8:頁面、資料庫、連線字串、Tomcat URIEncoding 全鏈路一致。
  • 例外統一處理:避免堆疊追蹤洩露給前端,導向友善錯誤頁。

此範例旨在演示基礎流程,實務專案請採用 MVC 架構(Spring MVC / Spring Boot)並遵循上述安全規範。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved