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

MVC 模式實作登入與 CRUD(一):傳統 Web 專案登入模組

     編輯:Java 綜合教學

MVC 模式實作登入與 CRUD(一):傳統 Web 專案登入模組

本文示範在非 Maven 的傳統 Dynamic Web Project 中,手動管理 JAR 檔、採用 MVC 分層架構實作使用者登入功能,涵蓋 Entity、DAO、Service、Controller 完整流程。

專案結構

src/
  com.zr.model      // 實體類
  com.zr.dao        // DAO 介面
  com.zr.daoIm      // DAO 實作
  com.zr.service    // Service 介面
  com.zr.serviceIm  // Service 實作
  com.zr.controller // Servlet Controller
  JDBCUtil          // 資料庫工具類
WebContent/
  login.jsp, main.jsp
  WEB-INF/web.xml

1. 實體類 Teacher.java

package com.zr.model;
public class Teacher {
    private int tid;
    private String tname, tpsw;
    // Getter/Setter、建構子略
}

2. 登入頁面 login.jsp

<form action="login" method="post">
  用戶名: <input type="text" name="tname">
  密碼: <input type="password" name="tpsw">
  <input type="submit" value="登入">
</form>

3. web.xml 設定 Servlet 映射

<servlet>
  <servlet-name>login</servlet-name>
  <servlet-class>com.zr.controller.LoginController</servlet-class>
</servlet>
<servlet-mapping>
  <servlet-name>login</servlet-name>
  <url-pattern>/login</url-pattern>
</servlet-mapping>

4. Controller 層 LoginController.java

package com.zr.controller;
import java.io.IOException;
import javax.servlet.*;
import javax.servlet.http.*;
import com.zr.model.Teacher;
import com.zr.service.valiDateService;
import com.zr.serviceIm.valiDateServiceImpl;

public class LoginController extends HttpServlet {
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        doPost(req, resp);
    }
    protected void doPost(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        String tname = req.getParameter("tname");
        String tpsw = req.getParameter("tpsw");

        Teacher tc = new Teacher();
        tc.setTname(tname);
        tc.setTpsw(tpsw);

        valiDateService vds = new valiDateServiceImpl();
        Teacher t = vds.valiDateTeacher(tc);

        HttpSession session = req.getSession();
        if (t != null && t.getTid() != 0) {
            session.setAttribute("teacher", t);
            req.getRequestDispatcher("main.jsp").forward(req, resp);
        } else {
            resp.sendRedirect("login.jsp");
        }
    }
}

5. DAO 介面與實作

// TeacherDao.java
package com.zr.dao;
import com.zr.model.Teacher;
public interface TeacherDao {
    Teacher validateTeacher(Teacher tc);
}
// TeacherDaoImpl.java
package com.zr.daoIm;
import java.sql.*;
import com.zr.dao.TeacherDao;
import com.zr.model.Teacher;
import JDBCUtil.JDBCUtil;

public class TeacherDaoImpl implements TeacherDao {
    public Teacher validateTeacher(Teacher tc) {
        Teacher teacher = new Teacher();
        String sql = "SELECT * FROM teacher WHERE tname=? AND tpsw=?";
        try (Connection con = JDBCUtil.getConnection();
             PreparedStatement pst = con.prepareStatement(sql)) {
            pst.setString(1, tc.getTname());
            pst.setString(2, tc.getTpsw());
            ResultSet rs = pst.executeQuery();
            if (rs.next()) {
                teacher = new Teacher(rs.getInt("tid"),
                                      rs.getString("tname"),
                                      rs.getString("tpsw"));
            }
        } catch (SQLException e) { e.printStackTrace(); }
        return teacher;
    }
}

6. JDBC 工具類 JDBCUtil.java

package JDBCUtil;
import java.sql.*;
public class JDBCUtil {
    private static final String URL = "jdbc:mysql://localhost:3306/student_crm?useUnicode=true&characterEncoding=UTF8";
    private static final String USER = "root";
    private static final String PASS = "root";
    private static final String DRIVER = "com.mysql.jdbc.Driver";

    public static Connection getConnection() {
        try {
            Class.forName(DRIVER);
            return DriverManager.getConnection(URL, USER, PASS);
        } catch (Exception e) { e.printStackTrace(); return null; }
    }
    public static void close(Statement st, Connection con) throws SQLException {
        if (st != null) st.close();
        if (con != null) con.close();
    }
}

7. Service 層

// valiDateService.java
package com.zr.service;
import com.zr.model.Teacher;
public interface valiDateService {
    Teacher valiDateTeacher(Teacher tc);
}
// valiDateServiceImpl.java
package com.zr.serviceIm;
import com.zr.dao.TeacherDao;
import com.zr.daoIm.TeacherDaoImpl;
import com.zr.model.Teacher;
import com.zr.service.valiDateService;

public class valiDateServiceImpl implements valiDateService {
    public Teacher valiDateTeacher(Teacher tc) {
        TeacherDao dao = new TeacherDaoImpl();
        return dao.validateTeacher(tc);
    }
}

8. 登入成功頁 main.jsp

<body>
  <h2>歡迎, ${teacher.tname} 老師!</h2>
  <a href="selectStus">查看學生資料</a>
</body>

關鍵點總結

  • 傳統專案需手動匯入 servlet-api.jar、mysql-connector-java.jar 等
  • 採用 PreparedStatement 防止 SQL Injection
  • Controller 僅負責請求分派,業務邏輯委派給 Service
  • 登入成功將 Teacher 物件存入 Session,後續功能可直接取用

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