前言
昨天第一次建立了 Servlet,也成功讓瀏覽器和 Java 後端產生連線。
不過目前的 Servlet 只能自己回傳固定的文字。
真正的系統不可能只有這樣。
例如今天如果要新增一位病患,我希望使用者可以在網頁上輸入:
按下「送出」之後,Java 後端就可以收到這些資料。
所以今天要做的事情就是:
讓 HTML 表單把資料傳送給 Servlet。
⸻
先建立一個病患資料表單
首先在 HTML 裡建立一個簡單的表單:
現在打開網頁,就會看到一個簡單的病患資料輸入表單。
⸻
這裡最重要的是:
form 就是 HTML 的表單。
action 決定資料要送到哪裡。
action="patient"
代表資料會送到 /patient。
而:
method="post"
則表示使用 HTTP POST 方法送出資料。
⸻
為什麼要使用 POST?
HTTP 有很多不同的方法,其中我們現在先認識兩個:
GET
通常用來取得資料。
例如:
查詢病患資料
POST
通常用來傳送資料。
例如:
新增病患
登入帳號
送出表單
所以今天的「新增病患資料」就很適合使用 POST。
⸻
Servlet 接收資料
接下來建立:
@WebServlet("/patient")
public class PatientServlet extends HttpServlet {
@Override
protected void doPost(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String name = request.getParameter("name");
String gender = request.getParameter("gender");
String birthday = request.getParameter("birthday");
String phone = request.getParameter("phone");
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();
out.println("收到病患資料!");
out.println("姓名:" + name + "");
out.println("性別:" + gender + "");
out.println("出生日期:" + birthday + "");
out.println("電話:" + phone + "");
}
}
這裡最重要的是:
request.getParameter("name");
它可以取得 HTML 表單裡:
name="name"
所輸入的資料。
⸻
name 為什麼這麼重要?
例如 HTML:
Java:
request.getParameter("name");
兩邊的 name 必須對得上。
可以把它想成一個對應關係:
HTML Java
name="name" → getParameter("name")
name="gender" → getParameter("gender")
name="birthday" → getParameter("birthday")
name="phone" → getParameter("phone")
如果兩邊名稱不一樣,Java 就拿不到正確的資料。
⸻
實際操作一次
現在可以在網頁上輸入:
姓名:王小明
性別:男
出生日期:2005-01-01
電話:0912345678
按下「送出」。
流程就會變成:
使用者輸入資料
↓
HTML Form
↓
POST
↓
PatientServlet
↓
request.getParameter()
↓
取得資料
最後 Servlet 就可以把收到的資料顯示出來。
⸻
現在距離資料庫還差什麼?
目前我們雖然已經可以讓 Java 收到病患資料,但這些資料還沒有真正被儲存。
也就是說:
使用者輸入
↓
Servlet 收到
↓
顯示資料
重新整理或離開頁面之後,資料就不會留下來。
我們真正想要的是:
使用者輸入
↓
Servlet
↓
MySQL
↓
永久儲存資料
所以接下來就要開始進入資料庫的部分。
⸻
今天的小結
今天第一次讓 HTML 和 Java Servlet 真正開始溝通。
我學到可以利用 HTML 的 傳送資料,再透過 Servlet 的:
request.getParameter()
取得使用者輸入的內容。
目前資料還只是被 Servlet 接收到,還沒有存進資料庫。
下一步就要開始認識 MySQL,建立這次醫療資訊小系統真正用來儲存病患資料的資料表。
Day 10,完成!