首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Java Web 入門實戰:從零構建帶登錄註冊、表格增刪改查的網站(無框架版)

     編輯:程式設計疑難解答

專案需求回顧

  • 功能:用戶登錄/註冊、會話管理、數據表格展示(增刪改查 CRUD)。
  • 限制:不使用任何框架(Spring、MyBatis 等),純 Java EE 基礎技術棧。
  • 工具:MyEclipse / Eclipse + Tomcat + MySQL/Oracle。

核心技術棧(零框架)

層級技術職責
視圖層JSP + HTML/CSS/JS頁面渲染、表單提交、AJAX 交互
控制層Servlet接收請求、調用 Service、轉發/重定向
業務層Java 類業務邏輯、事務控制、數據驗證
數據層JDBC (DataSource/連接池)SQL 執行、ResultSet 映射、資源關閉
實體層JavaBean (POJO)數據庫表字段一一映射

必備類設計清單

  1. 實體類:User(id, username, password...)、DataRecord(對應展示表字段)。
  2. DAO 接口 & 實現:UserDao(save, findByUsername)、RecordDao(CRUD 方法)。
    → 封裝 JDBC 代碼,使用 PreparedStatement 防注入。
  3. Service 層:UserService(register, login)、RecordService(分頁查詢、批量操作)。
    → 處理事務(手動 Commit/Rollback)、業務規則。
  4. Servlet 控制器:
    • LoginServlet、RegisterServlet、LogoutServlet
    • RecordListServlet(分頁/搜索)、RecordAddServlet、RecordEditServlet、RecordDeleteServlet
  5. 工具類:
    • DBUtil:獲取/關閉連接(推薦整合 Druid/HikariCP 連接池)。
    • JsonUtil:Gson/Jackson 序列化(AJAX 返回)。
    • PageUtil:分頁參數計算。
  6. 過濾器:LoginFilter 攔截未登錄請求跳轉登錄頁;EncodingFilter 統一 UTF-8。
  7. 監聽器:ContextListener 初始化連接池、載入配置。

關鍵實現細節

1. 數據庫連接池(必須)

// web.xml 配置 DataSource (Tomcat 容器管理) 或 ServletContextListener 手動初始化 Druid
// 避免頻繁創建銷毀 Connection,防止連接泄漏

2. 登錄驗證流程

// LoginServlet.doPost
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = userService.login(username, password); // 業務層調用 DAO 查詢比對
if (user != null) {
    HttpSession session = request.getSession();
    session.setAttribute("loginUser", user); // 存入會話
    response.sendRedirect("record/list");    // 重定向到列表頁
} else {
    request.setAttribute("msg", "用戶名或密碼錯誤");
    request.getRequestDispatcher("/login.jsp").forward(request, response);
}

3. 表格 CRUD 分頁查詢

// RecordListServlet
int page = Integer.parseInt(request.getParameter("page") ?? "1");
int pageSize = 10;
PageResult result = recordService.findPage(page, pageSize);
request.setAttribute("pageResult", result);
request.getRequestDispatcher("/record_list.jsp").forward(request, response);

4. JSP 頁面 JSTL/EL 表達式渲染

<c:forEach items="${pageResult.list}" var="record">
    <tr>
        <td>${record.id}</td>
        <td>${record.name}</td>
        <td><a href="edit?id=${record.id}">編輯</a> | <a href="delete?id=${record.id}">刪除</a></td>
    </tr>
</c:forEach>
<!-- 分頁導航 -->

學習路徑建議

  1. 搞懂 HTTP 協議、Servlet 生命周期、Request/Response/Session 域對象。
  2. 精通 JDBC 核心流程:加載驅動 → 獲取連接 → PreparedStatement → ResultSet → 釋放資源(finally 塊關閉)。
  3. 掌握 JSP 指令、動作標簽、EL、JSTL,實現邏輯與視圖分離。
  4. 理解 轉發 vs 重定向、會話追蹤、過濾器鏈 機制。
  5. 實戰項目:按上述類清單逐個編寫,先跑通「註冊→登錄→列表→增刪改查」主流程。

避坑指南

  • SQL 注入:全程使用 PreparedStatement,拒絕字符串拼接 SQL。
  • 連接泄漏:Connection、Statement、ResultSet 必須在 finally 中關閉,或使用 Try-with-resources (JDK 7+)。
  • 中文亂碼:配置 EncodingFilter、Tomcat URIEncoding="UTF-8"、數據庫連接字符串 characterEncoding=utf8、JSP pageEncoding="UTF-8"。
  • 並發安全:Servlet 實例單例,成員變量線程不安全,業務數據請用局部變量或 ThreadLocal。

總結

不使用框架構建 Java Web 系統,是理解框架本質的最佳途徑。核心在於Servlet 分發請求、JDBC 操作數據庫、JSP 渲染視圖、JavaBean 承載數據、Filter/Listener 管理橫切關注點。按模塊化設計類結構,嚴守資源管理與安全規範,即可構建穩健的基礎級 Web 應用。

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