在 Java Web 開發學習的道路上,MVC(Model-View-Controller)架構模式是必須掌握的核心基礎。本文將透過一個完整的「學生信息查詢」實戰案例,深入剖析 MVC 在查詢業務中的具體應用流程,並分享實際開發中遇到的 SQL Server 連線問題及解決方案。
MVC 全稱為 Model-View-Controller(模型-視圖-控制器),是一種經典的軟體設計模式,將應用程式拆分為三大核心模組,各司其職:
點擊頁面超連結,查詢並顯示資料庫中所有學生的詳細信息。
src/
├── cn.edu.student.domain.Student.java // 實體類
├── cn.edu.student.dao.StudentDao.java // 資料存取層
├── cn.edu.student.servlet.ListAllStudentServlet.java // 控制器
├── WebContent/
│ ├── test.jsp // 請求發起頁面
│ └── student.jsp // 結果顯示頁面
package cn.edu.student.domain;
public class Student {
private String studentId; // 學號
private String name; // 姓名
private String idCard; // 身份證號
private String sex; // 性別
private int age; // 年齡
private int grade; // 年級
// 構造器、Getter/Setter 方法省略...
}
package cn.edu.student.dao;
import java.sql.*;
import java.util.ArrayList;
import java.util.List;
import cn.edu.student.domain.Student;
import cn.edu.student.util.DBConnection;
public class StudentDao {
public List<Student> getAll() {
List<Student> students = new ArrayList<>();
ResultSet rs = null;
try {
String sql = "SELECT studentId, name, idCard, sex, age, grade FROM student";
rs = DBConnection.executeQuery(sql);
while (rs.next()) {
Student student = new Student(
rs.getString("studentId"),
rs.getString("name"),
rs.getString("idCard"),
rs.getString("sex"),
rs.getInt("age"),
rs.getInt("grade")
);
students.add(student);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
if (rs != null) {
try { rs.close(); } catch (SQLException e) { e.printStackTrace(); }
}
}
return students;
}
}
package cn.edu.student.servlet;
import java.io.IOException;
import java.util.List;
import javax.servlet.*;
import javax.servlet.http.*;
import cn.edu.student.dao.StudentDao;
import cn.edu.student.domain.Student;
public class ListAllStudentServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
StudentDao studentDao = new StudentDao();
List<Student> students = studentDao.getAll();
request.setAttribute("students", students);
request.getRequestDispatcher("/student.jsp").forward(request, response);
}
}
<a href="listAllStudent">查詢所有學生信息</a>
<%@ page import="java.util.List, cn.edu.student.domain.Student" %>
<body>
<% List<Student> students = (List<Student>) request.getAttribute("students"); %>
<h3>學生信息表</h3>
<table border="1" cellpadding="5" cellspacing="0">
<tr>
<th>學號</th><th>姓名</th><th>身份證號</th>
<th>性別</th><th>年齡</th><th>年級</th>
</tr>
<% for (Student student : students) { %>
<tr>
<td><%= student.getStudentId() %></td>
<td><%= student.getName() %></td>
<td><%= student.getIdCard() %></td>
<td><%= student.getSex() %></td>
<td><%= student.getAge() %></td>
<td><%= student.getGrade() %></td>
</tr>
<% } %>
</table>
</body>
連接 SQL Server 時拋出異常:驅動程式無法通過安全套接字層(SSL)加密與 SQL Server 建立安全連接。錯誤:"Server key"
JDK 與資料庫之間的安全金鑰協商失敗,通常是因為 JDK 版本過舊(如 JDK 1.6)不支援較新的 SSL/TLS 協議版本。
bcprov-ext-jdk15on-1.54.jarbcprov-jdk15on-1.54.jarJDK_HOME\jre\lib\extJDK_HOME\jre\lib\security\java.security 文件,將安全提供者優先級調整:
# 原配置
security.provider.1=sun.security.provider.Sun
# 修改為
security.provider.1=org.bouncycastle.jce.provider.BouncyCastleProvider
本文透過完整的 MVC 查詢實戰案例,展示了從實體類、DAO、Servlet 到 JSP 的標準開發流程。重點補充了 legacy 環境下 SQL Server SSL 連線問題的排查思路。建議初學者: