iT邦幫忙

2026 iThome 鐵人賽

0
JavaScript

30天從零打造醫療資訊小系統系列 第 16 篇

Day 19|把病患資料整理成清單:從 JDBC 到 JSP

  • 分享至 

  • xImage
  •  

一、資料存在資料庫裡,還不代表使用者看得到

前兩天,我們已經學會使用 JDBC 查詢及新增病患資料。

不過,目前的查詢結果主要顯示在 Java Console,新增資料也需要透過測試程式執行。

對一般使用者來說,這樣的操作並不方便。

我們希望完成的畫面應該是:

  • 打開網頁就能看到病患清單。
  • 每筆資料都有姓名、性別、生日和電話。
  • 新增資料後,可以重新查看最新清單。

因此,今天要把前面學過的 Servlet、JSP 和 JDBC 串在一起。

二、先了解整體流程

今天的資料傳遞流程如下:

瀏覽器
↓
PatientListServlet
↓
DBConnection
↓
MySQL patient 資料表
↓
ResultSet
↓
Servlet 整理查詢結果
↓
JSP 顯示病患清單

這裡有一個重要觀念:

Servlet 負責處理請求和取得資料,JSP 負責呈現畫面。

不要把所有資料庫操作和商業邏輯都寫在 JSP 裡,這樣未來會比較難維護。

三、建立 Patient 類別

我們先建立一個簡單的 Java 類別,用來代表一筆病患資料。

例如在 model 套件中建立 Patient.java:

package model;
import java.sql.Date;
public class Patient {
private int id;
private String name;
private String gender;
private Date birthday;
private String phone;
public Patient(
int id,
String name,
String gender,
Date birthday,
String phone) {
this.id = id;
this.name = name;
this.gender = gender;
this.birthday = birthday;
this.phone = phone;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getGender() {
return gender;
}
public Date getBirthday() {
return birthday;
}
public String getPhone() {
return phone;
}
}

這個類別的作用是把一筆病患資料包裝成一個物件,讓 Java 程式更容易傳遞和管理資料。

四、建立 PatientListServlet

接下來建立 PatientListServlet.java。

以下使用 Jakarta Servlet,請確認你的專案已經設定對應的 Servlet API 和 Tomcat 版本。

package servlet;
import java.io.IOException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import model.Patient;
import util.DBConnection;
@WebServlet("/patients")
public class PatientListServlet extends HttpServlet {
@Override
protected void doGet(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String sql = "SELECT id, name, gender, birthday, phone "
+ "FROM patient ORDER BY id DESC";
List patients = new ArrayList<>();
try (
Connection conn = DBConnection.getConnection();
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = ps.executeQuery()
) {
while (rs.next()) {
Patient patient = new Patient(
rs.getInt("id"),
rs.getString("name"),
rs.getString("gender"),
rs.getDate("birthday"),
rs.getString("phone")
);
patients.add(patient);
}
} catch (SQLException e) {
throw new ServletException(
"無法取得病患清單", e
);
}
request.setAttribute("patients", patients);
request.getRequestDispatcher("/patients.jsp")
.forward(request, response);
}
}

這段程式主要做了四件事:

  1. 執行 SQL 查詢。
  2. 將每筆查詢結果轉成 Patient 物件。
  3. 把所有物件放進 List。
  4. 將清單傳給 JSP 顯示。

ORDER BY id DESC 則是讓編號較新的資料排在前面。

五、建立 patients.jsp

現在,我們要把 Servlet 傳來的資料顯示在網頁上。

在專案中建立 patients.jsp:

<%@ page contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" %>
<%@ taglib prefix="c"
uri="jakarta.tags.core" %>

這裡使用 JSTL 的 <c:forEach> 逐筆顯示病患資料,並使用 <c:out> 輸出欄位內容。

注意:這份 JSP 使用 Jakarta Tags 的 URI,專案需要加入相容版本的 JSTL/Jakarta Tags 依賴。如果你的專案尚未加入 JSTL,請先依照目前的 Tomcat 與 Jakarta EE 版本設定相關依賴。

六、如何測試?

啟動 MySQL 和 Tomcat,確認專案部署成功後,在瀏覽器開啟:

http://localhost:8080/你的專案名稱/patients

請將「你的專案名稱」換成實際的 Web 專案 Context Path。

如果程式和設定正確,頁面就會顯示病患清單。

如果出現錯誤,可以依序檢查:

  1. MySQL 是否正常啟動。
  2. DBConnection 的連線資訊是否正確。
  3. patient 資料表是否存在。
  4. PatientListServlet 的 URL mapping 是否正確。
  5. JSP 是否有加入 JSTL 依賴。
  6. Tomcat 版本是否與 jakarta.servlet 相容。

七、為什麼要把資料和畫面分開?

今天我們建立了 Patient、PatientListServlet 和 patients.jsp 三個部分。

它們各自負責不同的工作:

檔案 負責工作
Patient.java 表示一筆病患資料
PatientListServlet.java 查詢資料並處理請求
patients.jsp 將資料呈現成網頁

這種分工能讓專案更清楚。未來要修改表格樣式時,不需要把資料庫查詢全部重寫;要改變查詢方式時,也不需要把所有 HTML 一起修改。

當然,這只是教學用的基礎架構。正式醫療系統還需要登入驗證、權限控管、資料最小化、操作稽核,以及對敏感資料的保護。病患資料不應直接公開給未經授權的使用者。

今日小結

今天我們把 JDBC、Servlet 和 JSP 串接起來,讓資料庫中的病患資料可以出現在網頁上。

這篇學到的重點有:

  1. 使用 Java 類別表示病患資料。
  2. 使用 Servlet 查詢 MySQL。
  3. 使用 List 儲存多筆查詢結果。
  4. 使用 request.setAttribute() 傳遞資料。
  5. 使用 JSP 和 JSTL 顯示病患清單。

Day 19 完成!

到這裡,我們的醫療資訊小系統已經具備基本的資料讀取與清單展示能力。接下來就能繼續加入搜尋、修改和刪除功能,讓它逐步成為一個完整的小系統。

參考資料:MySQL Connector/J 官方文件


上一篇
Day 18|讓 Java 新增病患資料:第一次使用 INSERT INTO
下一篇
Day 20|讓病患資料可以修改:使用 JDBC 執行 UPDATE
系列文
30天從零打造醫療資訊小系統 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言