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

Java Web 學習筆記:MVC 模式下的查詢操作實作

     編輯:Java 綜合教學

Java Web 學習筆記:MVC 模式下的查詢操作實作

記錄學習 MVC 架構下「查詢所有學生資訊」的完整流程,從請求發起到頁面渲染。

一、MVC 核心角色

  • Model (模型):業務邏輯與資料封裝(Student 實體、StudentDao 資料存取)
  • View (視圖):用戶介面(test.jsp 發起請求、student.jsp 顯示結果)
  • Controller (控制器):請求分發(ListAllStudentServlet)

流程:瀏覽器 → Servlet → Dao 查詢 DB → 封裝 List<Student> → request.setAttribute → forward 到 JSP → JSTL/EL 渲染。

二、目錄結構

src/
├── com.example.entity.Student
├── com.example.dao.StudentDao
├── com.example.servlet.ListAllStudentServlet
WebContent/
├── test.jsp
├── student.jsp

三、核心代碼

1. 實體類 Student

public class Student {
    private String studentId;
    private String name;
    private String idCard;
    private String sex;
    private int age;
    private int grade;
    // 建構子、Getter/Setter、toString 省略
}

2. DAO 層 StudentDao

public class StudentDao {
    public List<Student> getAll() {
        List<Student> list = new ArrayList<>();
        String sql = "SELECT studentId, name, idCard, sex, age, grade FROM student";
        ResultSet rs = null;
        try {
            rs = DBConnection.executeQuery(sql); // 自訂工具類
            while (rs.next()) {
                Student s = new Student(
                    rs.getString(1), rs.getString(2), rs.getString(3),
                    rs.getString(4), rs.getInt(5), rs.getInt(6)
                );
                list.add(s);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            closeQuietly(rs);
        }
        return list;
    }
}

3. Servlet 控制器

@WebServlet("/listAllStudent")
public class ListAllStudentServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        StudentDao dao = new StudentDao();
        List<Student> students = dao.getAll();
        req.setAttribute("students", students);
        req.getRequestDispatcher("/student.jsp").forward(req, resp);
    }
}

4. 請求發起頁 test.jsp

<a href="listAllStudent">查看所有學生</a>

5. 顯示頁 student.jsp(使用 JSTL/EL)

<%@ taglib prefix="c" uri="https://java.sun.com/jsp/jstl/core" %>
<table>
  <tr><th>學號</th><th>姓名</th><th>身分證</th><th>性別</th><th>年齡</th><th>年級</th></tr>
  <c:forEach items="${students}" var="stu">
    <tr>
      <td>${stu.studentId}</td>
      <td>${stu.name}</td>
      <td>${stu.idCard}</td>
      <td>${stu.sex}</td>
      <td>${stu.age}</td>
      <td>${stu.grade}</td>
    </tr>
  </c:forEach>
</table>

注意:原文使用 Scriptlet <% ... %> 迭代,現代最佳實踐改用 JSTL <c:forEach> + EL,分離視圖邏輯。

四、遇到的坑:SQL Server SSL 連線失敗

錯誤:The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption. Error: "Server key"

原因:JDK 與 SQL Server 驅動之間的加密協議/金鑰不匹配。

解決:

  1. 下載 Bouncy Castle Provider:bcprov-jdk15on-1.54.jar、bcprov-ext-jdk15on-1.54.jar
  2. 放入 JDK_HOME/jre/lib/ext/
  3. 修改 JDK_HOME/jre/lib/security/java.security,將 security.provider.1 改為 org.bouncycastle.jce.provider.BouncyCastleProvider

參考:CSDN 解決方案

五、心得

  • MVC 讓職責清晰:Servlet 只管流程控制,DAO 只管資料存取,JSP 只管顯示。
  • 工具類 DBConnection 封裝連線獲取/關閉,減少樣板碼。
  • JSTL/EL 讓 JSP 更乾淨,避免 Scriptlet 混雜 Java 代碼。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved