JSP - การประมวลผลแบบฟอร์ม
ในบทนี้เราจะพูดถึงการประมวลผลแบบฟอร์มใน JSP คุณต้องเจอสถานการณ์ต่างๆมากมายเมื่อคุณต้องส่งข้อมูลบางอย่างจากเบราว์เซอร์ของคุณไปยังเว็บเซิร์ฟเวอร์และท้ายที่สุดไปยังโปรแกรมแบ็กเอนด์ของคุณ เบราว์เซอร์ใช้สองวิธีในการส่งข้อมูลนี้ไปยังเว็บเซิร์ฟเวอร์ วิธีการเหล่านี้คือ GET Method และ POST Method
วิธีการในการประมวลผลแบบฟอร์ม
ตอนนี้ให้เราหารือเกี่ยวกับวิธีการในการประมวลผลแบบฟอร์ม
รับวิธีการ
เมธอด GET จะส่งข้อมูลผู้ใช้ที่เข้ารหัสต่อท้ายคำขอเพจ หน้าและข้อมูลที่เข้ารหัสจะถูกคั่นด้วยเครื่องหมาย? ตัวละครดังนี้ -
http://www.test.com/hello?key1=value1&key2=value2
เมธอด GET เป็นวิธีการเริ่มต้นในการส่งผ่านข้อมูลจากเบราว์เซอร์ไปยังเว็บเซิร์ฟเวอร์และสร้างสตริงยาวที่ปรากฏในเบราว์เซอร์ของคุณ Location:box. ขอแนะนำว่าอย่าใช้วิธี GET จะดีกว่า หากคุณมีรหัสผ่านหรือข้อมูลที่ละเอียดอ่อนอื่น ๆ เพื่อส่งผ่านไปยังเซิร์ฟเวอร์
วิธี GET มีข้อ จำกัด ด้านขนาด: only 1024 characters can be in a request string.
ข้อมูลนี้ถูกส่งผ่านโดยใช้ QUERY_STRING header และสามารถเข้าถึงได้ผ่านตัวแปรสภาพแวดล้อม QUERY_STRING ซึ่งสามารถจัดการได้โดยใช้ getQueryString() และ getParameter() วิธีการขอวัตถุ
วิธีการโพสต์
วิธีการส่งข้อมูลไปยังโปรแกรมแบ็กเอนด์ที่เชื่อถือได้โดยทั่วไปคือวิธีการโพสต์
วิธีนี้บรรจุข้อมูลในลักษณะเดียวกับเมธอด GET แต่แทนที่จะส่งเป็นสตริงข้อความหลัง a? ใน URL จะส่งเป็นข้อความแยกต่างหาก ข้อความนี้มาถึงโปรแกรมแบ็กเอนด์ในรูปแบบของอินพุตมาตรฐานซึ่งคุณสามารถแยกวิเคราะห์และใช้สำหรับการประมวลผลของคุณ
JSP จัดการคำขอประเภทนี้โดยใช้ getParameter() วิธีอ่านพารามิเตอร์อย่างง่ายและ getInputStream() วิธีการอ่านสตรีมข้อมูลไบนารีที่มาจากไคลเอนต์
การอ่านข้อมูลแบบฟอร์มโดยใช้ JSP
JSP จัดการการแยกวิเคราะห์ข้อมูลฟอร์มโดยอัตโนมัติโดยใช้วิธีการต่อไปนี้ขึ้นอยู่กับสถานการณ์ -
getParameter() - คุณโทร request.getParameter() วิธีการรับค่าของพารามิเตอร์ฟอร์ม
getParameterValues() - เรียกใช้เมธอดนี้หากพารามิเตอร์ปรากฏมากกว่าหนึ่งครั้งและส่งกลับค่าหลายค่าเช่นช่องทำเครื่องหมาย
getParameterNames() - เรียกใช้วิธีนี้หากคุณต้องการรายการพารามิเตอร์ทั้งหมดในคำขอปัจจุบัน
getInputStream() - เรียกวิธีนี้เพื่ออ่านสตรีมข้อมูลไบนารีที่มาจากไคลเอนต์
รับตัวอย่างวิธีการใช้ URL
URL ต่อไปนี้จะส่งผ่านค่าสองค่าไปยังโปรแกรม HelloForm โดยใช้เมธอด GET
http://localhost:8080/main.jsp?first_name=ZARA&last_name=ALI
ด้านล่างนี้คือไฟล์ main.jspโปรแกรม JSP เพื่อจัดการอินพุตที่กำหนดโดยเว็บเบราว์เซอร์ เราจะใช้ไฟล์getParameter() วิธีการที่ทำให้ง่ายต่อการเข้าถึงข้อมูล -
<html>
<head>
<title>Using GET Method to Read Form Data</title>
</head>
<body>
<h1>Using GET Method to Read Form Data</h1>
<ul>
<li><p><b>First Name:</b>
<%= request.getParameter("first_name")%>
</p></li>
<li><p><b>Last Name:</b>
<%= request.getParameter("last_name")%>
</p></li>
</ul>
</body>
</html>
ตอนนี้พิมพ์ http://localhost:8080/main.jsp?first_name=ZARA&last_name=ALI ในเบราว์เซอร์ของคุณ Location:box. สิ่งนี้จะสร้างผลลัพธ์ต่อไปนี้ -
ใช้วิธี GET เพื่ออ่านข้อมูลแบบฟอร์ม
|
รับตัวอย่างวิธีการโดยใช้แบบฟอร์ม
ต่อไปนี้เป็นตัวอย่างที่ส่งผ่านค่าสองค่าโดยใช้รูปแบบ HTML และปุ่มส่ง เราจะใช้ JSP main.jsp เดียวกันเพื่อจัดการอินพุตนี้
<html>
<body>
<form action = "main.jsp" method = "GET">
First Name: <input type = "text" name = "first_name">
<br />
Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>
</body>
</html>
เก็บ HTML นี้ไว้ในไฟล์ Hello.htm แล้วใส่ลงไป <Tomcat-installation-directory>/webapps/ROOT directory. เมื่อคุณจะเข้าถึงhttp://localhost:8080/Hello.htmคุณจะได้รับผลลัพธ์ต่อไปนี้
<p> พยายามป้อนชื่อและนามสกุลจากนั้นคลิกปุ่มส่งเพื่อดูผลลัพธ์บนเครื่องของคุณที่แมวตัวผู้กำลังทำงานอยู่ ขึ้นอยู่กับอินพุตที่ให้ไว้จะสร้างผลลัพธ์ที่คล้ายกันดังที่กล่าวไว้ในตัวอย่างข้างต้นตัวอย่างวิธีการโพสต์โดยใช้แบบฟอร์ม
ให้เราทำการปรับเปลี่ยนเล็กน้อยใน JSP ด้านบนเพื่อจัดการทั้ง GET และเมธอด POST ด้านล่างนี้คือไฟล์main.jsp โปรแกรม JSP เพื่อจัดการอินพุตที่กำหนดโดยเว็บเบราว์เซอร์โดยใช้วิธี GET หรือ POST
ไม่มีการเปลี่ยนแปลงใน JSP ข้างต้นเนื่องจากวิธีเดียวในการส่งผ่านพารามิเตอร์มีการเปลี่ยนแปลงและไม่มีการส่งข้อมูลไบนารีไปยังโปรแกรม JSP แนวคิดที่เกี่ยวข้องกับการจัดการไฟล์จะได้รับการอธิบายในบทที่แยกต่างหากซึ่งเราจำเป็นต้องอ่านสตรีมข้อมูลไบนารี
<html>
<head>
<title>Using GET and POST Method to Read Form Data</title>
</head>
<body>
<center>
<h1>Using POST Method to Read Form Data</h1>
<ul>
<li><p><b>First Name:</b>
<%= request.getParameter("first_name")%>
</p></li>
<li><p><b>Last Name:</b>
<%= request.getParameter("last_name")%>
</p></li>
</ul>
</body>
</html>
ต่อไปนี้เป็นเนื้อหาของไฟล์ Hello.htm ไฟล์ -
<html>
<body>
<form action = "main.jsp" method = "POST">
First Name: <input type = "text" name = "first_name">
<br />
Last Name: <input type = "text" name = "last_name" />
<input type = "submit" value = "Submit" />
</form>
</body>
</html>
ตอนนี้ให้เราเก็บไว้ main.jsp และ hello.htm ใน <Tomcat-installationdirectory>/webapps/ROOT directory. เมื่อคุณเข้าถึงhttp://localhost:8080/Hello.htmคุณจะได้รับผลลัพธ์ต่อไปนี้
ลองป้อนชื่อและนามสกุลจากนั้นคลิกปุ่มส่งเพื่อดูผลลัพธ์ในเครื่องของคุณที่เครื่อง Tomcat กำลังทำงานอยู่
จากข้อมูลที่ป้อนคุณจะได้รับผลลัพธ์ที่คล้ายกันดังตัวอย่างข้างต้น
การส่งผ่านข้อมูลช่องทำเครื่องหมายไปยังโปรแกรม JSP
ช่องทำเครื่องหมายถูกใช้เมื่อจำเป็นต้องเลือกมากกว่าหนึ่งตัวเลือก
ต่อไปนี้เป็นตัวอย่าง HTML code, CheckBox.htmสำหรับแบบฟอร์มที่มีช่องทำเครื่องหมายสองช่อง
<html>
<body>
<form action = "main.jsp" method = "POST" target = "_blank">
<input type = "checkbox" name = "maths" checked = "checked" /> Maths
<input type = "checkbox" name = "physics" /> Physics
<input type = "checkbox" name = "chemistry" checked = "checked" /> Chemistry
<input type = "submit" value = "Select Subject" />
</form>
</body>
</html>
โค้ดด้านบนจะสร้างผลลัพธ์ต่อไปนี้ -
ต่อไปนี้เป็นโปรแกรม main.jsp JSP เพื่อจัดการอินพุตที่กำหนดโดยเว็บเบราว์เซอร์สำหรับปุ่มช่องทำเครื่องหมาย
<html>
<head>
<title>Reading Checkbox Data</title>
</head>
<body>
<h1>Reading Checkbox Data</h1>
<ul>
<li><p><b>Maths Flag:</b>
<%= request.getParameter("maths")%>
</p></li>
<li><p><b>Physics Flag:</b>
<%= request.getParameter("physics")%>
</p></li>
<li><p><b>Chemistry Flag:</b>
<%= request.getParameter("chemistry")%>
</p></li>
</ul>
</body>
</html>
โปรแกรมข้างต้นจะสร้างผลลัพธ์ดังต่อไปนี้ -
Reading Checkbox Data
Maths Flag :: on
Physics Flag:: null
Chemistry Flag:: on
การอ่านพารามิเตอร์แบบฟอร์มทั้งหมด
ต่อไปนี้เป็นตัวอย่างทั่วไปที่ใช้ getParameterNames()วิธีการของ HttpServletRequest เพื่ออ่านพารามิเตอร์ฟอร์มที่มีอยู่ทั้งหมด วิธีนี้ส่งคืนการแจงนับที่มีชื่อพารามิเตอร์ในลำดับที่ไม่ได้ระบุ
เมื่อเรามีการแจงนับแล้วเราสามารถวนซ้ำการแจงนับในลักษณะมาตรฐานโดยใช้ hasMoreElements() วิธีการกำหนดว่าเมื่อใดควรหยุดและใช้ไฟล์ nextElement() วิธีการรับชื่อพารามิเตอร์แต่ละตัว
<%@ page import = "java.io.*,java.util.*" %>
<html>
<head>
<title>HTTP Header Request Example</title>
</head>
<body>
<center>
<h2>HTTP Header Request Example</h2>
<table width = "100%" border = "1" align = "center">
<tr bgcolor = "#949494">
<th>Param Name</th>
<th>Param Value(s)</th>
</tr>
<%
Enumeration paramNames = request.getParameterNames();
while(paramNames.hasMoreElements()) {
String paramName = (String)paramNames.nextElement();
out.print("<tr><td>" + paramName + "</td>\n");
String paramValue = request.getHeader(paramName);
out.println("<td> " + paramValue + "</td></tr>\n");
}
%>
</table>
</center>
</body>
</html>
ต่อไปนี้เป็นเนื้อหาของไฟล์ Hello.htm -
<html>
<body>
<form action = "main.jsp" method = "POST" target = "_blank">
<input type = "checkbox" name = "maths" checked = "checked" /> Maths
<input type = "checkbox" name = "physics" /> Physics
<input type = "checkbox" name = "chemistry" checked = "checked" /> Chem
<input type = "submit" value = "Select Subject" />
</form>
</body>
</html>
ตอนนี้ลองโทรหา JSP โดยใช้ Hello.htm ด้านบน สิ่งนี้จะสร้างผลลัพธ์ดังต่อไปนี้ตามอินพุตที่ให้ไว้ -
การอ่านพารามิเตอร์แบบฟอร์มทั้งหมด
ชื่อ Param | ค่าพารามิเตอร์ |
---|---|
คณิตศาสตร์ | บน |
เคมี | บน |
คุณสามารถลองใช้ JSP ด้านบนเพื่ออ่านข้อมูลในรูปแบบอื่นซึ่งมีวัตถุอื่น ๆ เช่นกล่องข้อความปุ่มตัวเลือกหรือดรอปดาวน์เป็นต้น