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

Java Web 登入功能完整實作:JSP + Servlet + JDBC

     編輯:Java 相關知識

前言

登入驗證是 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

核心程式碼

1. 實體類 User

public class User {
    private String userName, password;
    // getter / setter 略
}

2. 登入頁 login.jsp

<%@ 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 映射路徑。

3. 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 屬性、瀏覽器網址不變;重導向發新請求、網址改變。

4. DAO 資料存取

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 自動關閉資源。

5. web.xml 設定(Servlet 3.0+ 可用註解替代)

<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>

部署與測試

  1. 建立 MySQL 資料庫 test、資料表 user(userName varchar(50), password varchar(50)) 插入測試資料
  2. 將專案部署至 Tomcat
  3. 瀏覽 https://localhost:8080/專案名/login.jsp

進階延伸建議

  • 密碼加密儲存(BCrypt / PBKDF2)
  • 引入連線池(DBCP2 / HikariCP)
  • 使用 Filter 統一編碼、登入攔截
  • 採用 MVC 框架(Spring MVC / Spring Boot)分層解耦

結語

本範例展示 Java Web 登入的最小完整閉環,適合初學者理解請求流向與分層職責。實務專案請務必強化安全性、連線管理與例外處理。

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