Xử lý Form trong JSP

Bạn có thể gặp một vài tình huống khi bạn cần truyền một số thông tín từ trình duyệt của bạn tới Webserver và sau cùng tới chương trình backend của bạn. Trình duyệt sử dụng hai phương thức để truyền thông tin này tới Webserver. Các phương thức này là phương thức GET và phương thức POST.

Phương thức GET

Phương thức GET gửi thông tin người dùng đã được mã hóa phụ thêm tới yêu cầu trang. Trang này và thông tin đã được mã hóa được phân biệt bởi ký tự ? như sau:

http://www.test.com/hello?key1=value1&key2=value2

Phương thức GET là phương thức mặc định để truyền thông tin từ trình duyệt tới Web Server và nó tạo ra một chuỗi dài mà xuất hiện trong Location:box của trình duyệt. Không bao giờ sử dụng phương thức GET nếu bạn truyền tới Server thông tin password hoặc thông tin nhạy cảm khác.

Phương thức GET có kích cỡ giới hạn: chỉ có 1024 ký tự trong một chuỗi yêu cầu.

Thông tin này được truyền bởi sử dụng QUERY_STRING Header và sẽ có thể truy cập thông qua biến môi trường QUERY_STRING mà có thể được xử lý bởi sử dụng phương thức getQueryString()getParameter() của đối tượng request trong JSP.

Phương thức POST

Một phương thức đáng tin cậy hơn để truyền thông tin tới chương trình backend là phương thức POST.

Nó gói thông tin theo cách giống như phương thức GET, nhưng thay vì gửi nó như là một chuỗi text sau một ký tự ? trong URL, nó gửi thông tin như là một thông báo riêng biệt. Thông báo này tới chương trình backend trong form của input chuẩn mà bạn có thể parse và sử dụng cho tiến trình xử lý của bạn.

JSP xử lý kiểu yêu cầu này bởi sử dụng phương thức getParameter() để đọc các tham số đơn giản và phương thức getInputStream() để đọc các luồng dữ liệu nhị phân tới từ Client.

Đọc Form Data bởi sử dụng JSP

JSP xử lý Form Data bằng việc parse một cách tự động bởi sử dụng các phương thức sau tùy thuộc vào từng tình huống cụ thể:

  • getParameter(): Bạn gọi phương thức request.getParameter() để nhận giá trị của tham số Form.
  • getParameterValues(): Gọi phương thức này nếu parameter xuất hiện nhiều hơn một lần và trả về nhiều giá trị, ví dụ như checkbox.
  • getParameterNames(): Gọi phương thức này nếu bạn muốn một danh sách đầy đủ của tất cả các parameter trong yêu cầu hiện tại.
  • getInputStream(): Gọi phương thức này để đọc luồng dữ liệu nhị phân tới từ Client.

Ví dụ phương thức GET sử dụng URL trong JSP

Đây là một URL đơn giản mà sẽ truyền hai giá trị tới chương trình HelloForm bởi sử dụng phương thức GET:

http://localhost:8080/main.jsp?first\_name=ZARA&last\_name=ALI

Dưới đây là chương trình JSP tên là main.jsp để xử lý input được cung cấp bởi trình duyệt web. Chúng ta đang sử dụng phương thức getParameter() để truy cập các thông tin đã truyền dễ dàng hơn.

<html>
<head>
<title>Using GET Method to Read Form Data</title>
</head>
<body>
<center>
<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>

Bây giờ, soạn http://localhost:8080/main.jsp?first\_name=ZARA&last\_name=ALI trong Location:box của trình duyệt. Nó sẽ cho kết quả sau:

Using GET Method to Read Form Data
==================================
First Name: ZARA
Last Name: ALI

Ví dụ phương thức GET sử dụng Form trong JSP

Ví dụ đơn giản sau sẽ truyền hai giá trị bởi sử dụng HTML FORM và nút submit. Chúng ta cũng đang sử dụng chương trình JSP là main.jsp để xử lý input này.

<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>

Giữ HTML này trong một Hello.htm file và đặt nó trong thư mục /webapps/ROOT. Khi bạn truy cập http://localhost:8080/Hello.htm, thì đây là output của form trên.

First Name: Last Name:

Bạn thử nhập First Name và Last Name và sau đó nhấp chuột vào nút submit để xem kết quả trên thiết bị nội bộ của bạn, nơi Tomcat đang chạy. Dựa trên input đã cung cấp, nó sẽ tạo ra cùng kết quả như đã nói trong ví dụ trên.

Ví dụ phương thức POST sử dụng Form trong JSP

Chúng ta chỉnh sửa một chút ở trong ví dụ trên, để nó có thể xử lý phương thức GET cũng như POST. Chương trình JSP với tên main.jsp dưới đây sẽ xử lý input được cung cấp bởi trình duyệt web bởi sử dụng phương thức GET hoặc POST.

Sự thật là không có gì thay đổi trong JSP trên, bởi vì chỉ cách truyền các tham số được thay đổi và không có dữ liệu nhị phân nào đang được truyền tới chương trình JSP. Xử lý File liên quan tới các khái niệm sẽ được giải thích trong một chương riêng, tại đó chúng ta cần đọc các luồng dữ liệu nhị phân.

<html>
<head>
<title>Using GET and POST Method to Read Form Data</title>
</head>
<body>
<center>
<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>

Sau đây là nội dung của Hello.htm file:

<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>

Bây giờ, giữ main.jsp và hello.htm trong thư mục <Tomcat-installation-directory>/webapps/ROOT. Khi bạn truy cập http://localhost:8080/Hello.htm, dưới đây là output thực sự của form trên.

First Name: Last Name:

Nhập First Name và Last Name, sau đó nhấn nút Submit để xem kết quả trên thiết bị nội bộ, nơi Tomcat đang chạy.

Dựa trên input đã cung cấp, nó sẽ cho kết quả tương tự như ví dụ trên.

Truyền Checkbox Data tới chương trình JSP

Checkbox được sử dụng khi có nhiều hơn một option được yêu cầu để được chọn.

Đây là ví dụ cho HTML code, CheckBox.htm, có hai checkbox:

<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>

Kết quả của code trên là form sau:

Maths Physics Chemistry

Dưới đây là main.jsp để xử lý input được cung cấp bởi trình duyệt cho nút checkbox.

<html>
<head>
<title>Reading Checkbox Data</title>
</head>
<body>
<center>
<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>

Nó sẽ cho kết quả sau:

Reading Checkbox Data

Maths Flag: : on
Physics Flag: null
Chemistry Flag : on

Đọc tất cả Form Parameter trong JSP

Ví dụ chung sau đây sử dụng phương thức getParameterNames() của HttpServletRequest để đọc tất cả Form Parameter có sẵn. Phương thức này trả về một Enumeration (bản liệt kê) mà chứa các tên Parameter trong thứ tự chưa được sắp xếp.

Khi chúng ta có một Enumeration, lặp Enumeration này theo phương thức chuẩn: sử dụng phương thức hasMoreElements() để xác định khi nào cần dừng và sử dụng phương thức nextElement() để nhận tên của mỗi parameter.

<%@ 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>

Còn đây là nội dung của 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>

Bây giờ, gọi JSP bởi sử dụng Hello.htm trên, nó sẽ cho kết quả sau dựa trên iput đã cho:

Param NameParam Value(s)
mathson
chemistryon

Bạn có thể thử JSP trên để đọc bất kỳ dữ liệu form mà có các đối tượng khác như text box, radio button hoặc dropdown box ...



Bình luận