iT邦幫忙

2026 iThome 鐵人賽

DAY 0
0
JavaScript

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

Day 13|GET 和 POST 到底差在哪裡?醫療系統該怎麼選?

  • 分享至 

  • xImage
  •  

做到昨天,我們已經可以完成:

HTML 表單
↓
Servlet
↓
JSP
↓
顯示資料

但是在寫 HTML 表單的時候,有一個地方其實一直出現:

這裡的:

method="post"

到底是什麼?

而且有時候我們又會看到:

method="get"

GET 和 POST 到底有什麼不同?

今天就來把它搞懂。

⸻

一、GET 和 POST 是什麼?

GET 和 POST 都是 HTTP Request Method,也就是:

瀏覽器告訴伺服器「我想做什麼」的方式。

最常見的兩個就是:

  • GET
  • POST

簡單記:

GET 比較常用來取得資料。
POST 比較常用來送出資料。

例如我們的醫療資訊系統:

查詢病患

我要找這個病患
↓
GET
↓
Servlet
↓
查詢資料

新增病患

我要新增這個病患
↓
POST
↓
Servlet
↓
處理資料
↓
存進 MySQL

所以兩者在系統裡扮演的角色不太一樣。

⸻

二、GET 是什麼?

假設我們想查詢病患:

病患編號:1001

可以使用 GET。

例如:

使用者輸入:

1001

送出之後,瀏覽器可能會看到類似:

/search?id=1001

你會發現:

資料出現在網址裡。

這就是 GET 很明顯的特色之一。

⸻

三、Servlet 怎麼接收 GET?

如果 HTML 使用:

method="get"

那 Servlet 就可以使用:

doGet()

例如:

@WebServlet("/search")
public class SearchServlet extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String id = request.getParameter("id");
System.out.println("查詢病患:" + id);
}
}

當使用者查詢:

1001

Servlet 就可以取得:

request.getParameter("id");

得到:

1001

⸻

四、POST 又是什麼?

再來看看我們昨天使用的新增病患表單:

這次使用的是:

POST

例如:

使用者輸入:

姓名:小明
電話:0912345678

按下送出之後:

HTML
↓
POST
↓
PatientServlet

Servlet 裡面則使用:

doPost()

例如:

protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("name");
String phone = request.getParameter("phone");
System.out.println(name);
System.out.println(phone);
}

⸻

五、GET 和 POST 最直觀的差別

可以先用這張表記:

比較 GET POST
常見用途 取得資料 傳送/提交資料
資料是否常出現在 URL 是 通常不會
適合查詢 ✅ 可以,但較少見
適合新增資料 不適合 ✅
Servlet 方法 doGet() doPost()

所以我們的醫療資訊系統可以這樣設計:

查詢病患
↓
GET
新增病患
↓
POST
修改病患
↓
POST
刪除病患
↓
POST

這是一個很基本的概念。

⸻

六、為什麼新增病患不能直接用 GET?

假設我們今天用 GET 新增病患:

/patient?name=小明&gender=男

網址就可能帶著這些資料。

但新增病患是一個「改變系統資料」的動作。

我們不希望只是因為:

使用者重新整理頁面、點了一個網址,甚至搜尋引擎去抓取網址

就意外造成資料新增。

所以一般來說:

取得資料可以使用 GET;會造成資料新增、修改或刪除的操作,通常使用 POST 或其他適合的方法。

這也是為什麼我們昨天的新增病患表單使用:

method="post"

⸻

七、GET 不等於「不安全」

這裡有一個很容易搞錯的地方。

很多初學者會想:

「POST 的資料不在網址,所以 POST 比 GET 安全?」

不能這樣直接理解。

GET 和 POST 本身都不是加密機制。

如果系統有:

姓名
電話
身分證字號
病歷資訊

這些醫療相關資料,更重要的是:

  • HTTPS
  • 權限控制
  • 身分驗證
  • Session
  • 資料庫權限
  • 輸入驗證
  • 防止 SQL Injection

等等安全措施。

所以不要把:

POST = 安全
GET = 不安全

畫上等號。

⸻

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

現在可以想像我們之後會有很多功能。

① 新增病患

新增病患
↓
POST
↓
PatientServlet
↓
MySQL

② 查詢病患

輸入病患編號
↓
GET
↓
SearchServlet
↓
MySQL
↓
JSP

③ 修改病患

修改資料
↓
POST
↓
PatientServlet
↓
MySQL

④ 刪除病患

刪除資料
↓
POST
↓
PatientServlet
↓
MySQL

慢慢地,我們的 CRUD 架構就會形成。

CRUD 就是:

C → Create 新增
R → Read 查詢
U → Update 修改
D → Delete 刪除

這也是我們這 30 天最後要完成的重要功能。

⸻

九、GET 和 POST 的程式差在哪?

其實 Servlet 裡面最大的差異很簡單。

GET

protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String id = request.getParameter("id");
}

POST

protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("name");
}

取得參數的方法:

request.getParameter()

其實是一樣的。

真正不同的是:

doGet()

和

doPost()

以及瀏覽器送出的 HTTP Method。

⸻

十、今天把整個流程再串一次

現在我們已經可以把這幾天學的東西連起來了。

查詢

使用者
↓
HTML
↓
GET
↓
Servlet
↓
MySQL
↓
JSP
↓
顯示病患資料

新增

使用者
↓
HTML Form
↓
POST
↓
Servlet
↓
MySQL
↓
JSP
↓
顯示新增結果

這時候你會發現:

Servlet 並不是單純拿來顯示 Hello World。

它其實是整個 Web 系統裡負責「處理事情」的重要角色。

⸻

十一、今天學到什麼?

今天主要搞懂了:

GET

比較常用來:

取得資料、查詢資料

例如:

查詢病患
搜尋病患
查看資料

POST

比較常用來:

提交資料、改變系統資料

例如:

新增病患
修改病患
刪除病患

另外也要記住:

GET ≠ 不安全
POST ≠ 自動安全

真正的系統安全還需要其他機制一起處理。

⸻

今日小結

一開始看到:

method="get"

和:

method="post"

可能會覺得只是兩個不同的單字。

但真正開始做系統之後,就會發現它們其實代表了不同的資料傳遞方式。

而我們現在已經可以開始思考:

「這個功能到底是在取得資料,還是在改變資料?」

這個觀念會直接影響我們之後怎麼設計 Servlet。

目前我們的醫療資訊小系統已經完成:

HTML
↓
CSS
↓
Servlet
↓
JSP
↓
GET / POST

下一步,就要開始讓資料真正留下來。

Day 13 完成 ✅


上一篇
Day 12|把表單、Servlet、JSP 串起來:完成第一次資料傳遞
下一篇
Day 14|Session 是什麼?讓醫療資訊系統記住登入的人
系列文
30天從零打造醫療資訊小系統 共 11 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言