iT邦幫忙

2026 iThome 鐵人賽

DAY 0
0
JavaScript

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

Day 11|讓 Java 和網頁真正接起來:認識 JSP

  • 分享至 

  • xImage
  •  

昨天我們完成了一件很重要的事情:

使用 HTML 表單輸入病患資料,再交給 Servlet 接收。

但是如果你有看過昨天的程式,可能會發現一個問題。

Servlet 裡面如果要把結果顯示在網頁上,常常會寫:

response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("病患資料");
out.println("姓名:" + name + "");
out.println("性別:" + gender + "");

資料少的時候還可以接受。

但如果今天整個醫療資訊系統有很多 HTML:

  • 導覽列
  • 表格
  • 按鈕
  • 表單
  • 病患資料
  • 搜尋結果

全部都寫在 Java 裡面,程式很快就會變得非常難閱讀。

所以今天要認識一個新的東西:

JSP。

⸻

一、JSP 是什麼?

JSP 的全名是:

JavaServer Pages

簡單來說:

JSP 就是一種可以讓我們用 HTML 製作「動態網頁」的技術。

如果把目前學到的東西簡單分工:

技術 主要工作
HTML 建立網頁結構
CSS 美化網頁
JavaScript 網頁互動
Servlet 處理 Java 邏輯
JSP 顯示動態資料
MySQL 儲存資料

這樣就比較容易理解了。

例如:

使用者填寫病患資料:

    ↓
  HTML
    ↓
 Servlet
    ↓

處理資料
↓
JSP
↓
顯示病患資料

這就是我們接下來要建立的架構。

⸻

二、建立第一個 JSP

假設我們在:

src/main/webapp

裡面新增:

patient.jsp

先放入最基本的 HTML:

其實你會發現:

JSP 看起來跟 HTML 非常像。

這也是 JSP 好用的地方。

我們可以直接用 HTML 排版,不需要在 Java 裡面一直寫:

out.println();

⸻

三、讓 Servlet 把資料交給 JSP

接下來才是今天最重要的部分。

假設我們昨天的 Servlet 接收到:

姓名:小明
性別:男

我們希望 Servlet 不直接把資料印出來,而是:

把資料交給 JSP,讓 JSP 負責顯示。

Servlet 可以這樣寫:

package MyCode;
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 java.io.IOException;
@WebServlet("/patient")
public class PatientServlet extends HttpServlet {
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("name");
String gender = request.getParameter("gender");
request.setAttribute("name", name);
request.setAttribute("gender", gender);
request.getRequestDispatcher("patient.jsp")
.forward(request, response);
}
}

這裡有三個很重要的地方。

⸻

四、request.setAttribute() 是做什麼的?

這兩行:

request.setAttribute("name", name);
request.setAttribute("gender", gender);

可以理解成:

把 Servlet 收到的資料暫時放進 request 裡,準備交給 JSP 使用。

例如:

request.setAttribute("name", name);

左邊的 "name" 是我們給資料取的名字。

右邊的 name 則是我們從表單取得的實際資料。

假設使用者輸入:

小明

那麼就會變成:

name → 小明

⸻

五、forward() 是做什麼的?

接下來這段:

request.getRequestDispatcher("patient.jsp")
.forward(request, response);

可以先把它理解成:

「Servlet 處理完資料後,請 JSP 負責把結果顯示出來。」

所以整個流程變成:

使用者
↓
HTML 表單
↓
PatientServlet
↓
接收資料
↓
request.setAttribute()
↓
patient.jsp
↓
顯示結果

這樣 Servlet 就不用負責整個網頁的 HTML。

⸻

六、JSP 怎麼取得 Servlet 傳來的資料?

現在回到:

patient.jsp

我們可以使用:

${name}

來取得 Servlet 放進 request 的資料。

例如:

如果使用者輸入:

姓名:小明
性別:男

最後網頁就會顯示:

病患資料
姓名:小明
性別:男

是不是比在 Servlet 裡面一直寫:

out.println()

舒服很多?

⸻

七、Servlet 和 JSP 的分工

做到這裡,我們就可以開始建立比較清楚的系統架構。

Servlet

負責:

  • 接收資料
  • 判斷資料
  • 執行 Java 邏輯
  • 呼叫資料庫
  • 把資料傳給 JSP

JSP

負責:

  • 顯示資料
  • 建立 HTML
  • 排版網頁
  • 呈現使用者看到的畫面

也就是:

      Browser
         ↓
      Servlet
         ↓
    Java 處理
         ↓
       JSP
         ↓
      HTML
         ↓
      Browser

這種「分工」對之後開發大型系統非常重要。

⸻

八、放進我們的醫療資訊小系統

現在我們的系統開始有一點雛形了。

假設未來病患資料有:

姓名
性別
生日
電話
身分證字號

使用者填寫表單後:

HTML
↓
PatientServlet
↓
接收病患資料
↓
MySQL
↓
取得資料
↓
JSP
↓
顯示病患資訊

這就是我們接下來要慢慢完成的醫療資訊小系統。

今天雖然還沒有真正連接 MySQL,但我們已經完成了一個很重要的觀念:

Servlet 負責處理,JSP 負責顯示。

⸻

九、今天學到什麼?

今天第一次接觸 JSP,我學到:

  1. JSP 是 JavaServer Pages。
  2. JSP 可以用來製作動態網頁。
  3. Servlet 適合處理 Java 邏輯。
  4. JSP 適合負責畫面呈現。
  5. request.setAttribute() 可以把資料交給 JSP。
  6. forward() 可以把請求轉交給 JSP。
  7. JSP 可以使用 ${} 取得資料。

目前整個系統的流程也越來越清楚:

HTML
↓
Servlet
↓
JSP

而接下來,我們還要把:

MySQL

加入進來。

到那時候,這個系統才會真正開始「記住」病患資料。

⸻

今日小結

今天最大的收穫不是多學了一個 JSP 語法,而是開始理解:

一個完整的網站,不是所有事情都丟給同一個程式做。

HTML 負責結構、CSS 負責外觀、JavaScript 負責互動,Servlet 負責後端邏輯,而 JSP 負責把後端資料呈現在網頁上。

接下來,就可以開始讓 Servlet、JSP 和表單真正串在一起,再一步一步接上 MySQL。

Day 11 完成 ✅


上一篇
Day 10|讓網頁和 Java 溝通:第一次接收表單資料
下一篇
Day 12|把表單、Servlet、JSP 串起來:完成第一次資料傳遞
系列文
30天從零打造醫療資訊小系統 共 11 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言