JSP - Xử lý biểu mẫu

Trong chương này, chúng ta sẽ thảo luận về Xử lý biểu mẫu trong JSP. Chắc hẳn bạn đã gặp phải nhiều tình huống khi bạn cần chuyển một số thông tin từ trình duyệt của mình đến máy chủ web và cuối cùng là chương trình phụ trợ của bạn. Trình duyệt sử dụng hai phương pháp để chuyển thông tin này đến máy chủ web. Các phương thức này là Phương thức GET và Phương thức ĐĂNG.

Các phương pháp trong xử lý biểu mẫu

Bây giờ chúng ta hãy thảo luận về các phương pháp trong Xử lý biểu mẫu.

Phương thức GET

Phương thức GET gửi thông tin người dùng đã mã hóa được thêm vào yêu cầu trang. Trang và thông tin được mã hóa được phân tách bằng dấu? nhân vậ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 để chuyển thông tin từ trình duyệt đến máy chủ web và nó tạo ra một chuỗi dài xuất hiện trong trình duyệt của bạn Location:box. Chúng tôi khuyến nghị rằng không nên sử dụng phương pháp GET. nếu bạn có mật khẩu hoặc thông tin nhạy cảm khác để chuyển đến máy chủ.

Phương thức GET có giới hạn về kích thước: only 1024 characters can be in a request string.

Thông tin này được chuyển bằng cách sử dụng QUERY_STRING header và sẽ có thể truy cập được thông qua QUERY_STRING biến môi trường có thể được xử lý bằng cách sử dụng getQueryString()getParameter() các phương thức của đối tượng yêu cầu.

Phương thức POST

Một phương pháp truyền thông tin đến chương trình phụ trợ thường đáng tin cậy hơn là phương thức POST.

Phương thức này đóng gói thông tin theo cách chính xác như phương thức GET, nhưng thay vì gửi nó dưới dạng một chuỗi văn bản sau dấu? trong URL nó sẽ gửi nó dưới dạng một tin nhắn riêng biệt. Thông báo này đến với chương trình phụ trợ ở dạng đầu vào chuẩn mà bạn có thể phân tích cú pháp và sử dụng cho quá trình xử lý của mình.

JSP xử lý loại yêu cầu này bằng cách sử dụng getParameter() phương pháp đọc các tham số đơn giản và getInputStream() phương pháp đọc luồng dữ liệu nhị phân đến từ máy khách.

Đọc dữ liệu biểu mẫu bằng JSP

JSP tự động xử lý phân tích cú pháp dữ liệu biểu mẫu bằng các phương pháp sau tùy thuộc vào tình huống:

  • getParameter() - Bạn gọi request.getParameter() phương thức để nhận giá trị của một tham số hình thức.

  • getParameterValues() - Gọi phương thức này nếu tham số xuất hiện nhiều hơn một lần và trả về nhiều giá trị, ví dụ hộp kiểm.

  • getParameterNames() - Gọi phương thức này nếu bạn muốn có một danh sách đầy đủ tất cả các tham số 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 đến từ máy khách.

Ví dụ về phương pháp GET sử dụng URL

URL sau sẽ chuyển hai giá trị cho chương trình HelloForm bằng phương thức GET.

http://localhost:8080/main.jsp?first_name=ZARA&last_name=ALI

Dưới đây là main.jspChương trình JSP để xử lý đầu vào do trình duyệt web cung cấp. Chúng tôi sẽ sử dụnggetParameter() phương pháp này giúp bạn dễ dàng truy cập thông tin đã chuyển -

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

Bây giờ gõ http://localhost:8080/main.jsp?first_name=ZARA&last_name=ALI trong trình duyệt của bạn Location:box. Điều này sẽ tạo ra kết quả sau:

Sử dụng phương pháp GET để đọc dữ liệu biểu mẫu

  • First Name: ZARA

  • Last Name: ALI

Ví dụ về phương pháp GET sử dụng biểu mẫu

Sau đây là một ví dụ chuyển hai giá trị bằng cách sử dụng HTML FORM và nút gửi. Chúng tôi sẽ sử dụng cùng một JSP main.jsp để xử lý đầu vào 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 tệp Hello.htm và đặt nó vào <Tomcat-installation-directory>/webapps/ROOT directory. Khi nào bạn truy cậphttp://localhost:8080/Hello.htm, bạn sẽ nhận được kết quả sau.

<p> Cố gắng nhập Tên và Họ rồi nhấp vào nút gửi để xem kết quả trên máy cục bộ của bạn nơi tomcat đang chạy. Dựa trên đầu vào được cung cấp, nó sẽ tạo ra kết quả tương tự như đã đề cập trong ví dụ trên.

Ví dụ về phương pháp POST sử dụng biểu mẫu

Hãy để chúng tôi thực hiện một chút sửa đổi trong JSP ở trên để xử lý cả phương thức GET và POST. Dưới đây làmain.jsp Chương trình JSP để xử lý đầu vào do trình duyệt web cung cấp bằng phương thức GET hoặc POST.

Thực tế không có thay đổi trong JSP ở trên vì cách duy nhất để truyền các tham số được thay đổi và không có dữ liệu nhị phân nào được chuyển đến chương trình JSP. Các khái niệm liên quan đến xử lý tệp sẽ được giải thích trong chương riêng mà chúng ta cần đọ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 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>

Sau đây là nội dung của Hello.htm tập tin -

<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ờ hãy để chúng tôi giữ main.jsp và xin chào.htm trong <Tomcat-installationdirectory>/webapps/ROOT directory. Khi bạn truy cậphttp://localhost:8080/Hello.htm, bạn sẽ nhận được kết quả sau.

Cố gắng nhập Họ và Tên rồi nhấp vào nút gửi để xem kết quả trên máy cục bộ của bạn nơi tomcat đang chạy.

Dựa trên đầu vào được cung cấp, bạn sẽ nhận được kết quả tương tự như trong các ví dụ trên.

Chuyển dữ liệu hộp kiểm sang chương trình JSP

Hộp kiểm được sử dụng khi bắt buộc phải chọn nhiều tùy chọn.

Sau đây là một ví dụ HTML code, CheckBox.htm, cho một biểu mẫu có hai hộp kiểm.

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

Đoạn mã trên sẽ tạo ra kết quả sau:

Sau đây là chương trình JSP main.jsp để xử lý đầu vào do trình duyệt web cung cấp cho nút hộp kiểm.

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

Chương trình trên sẽ tạo ra kết quả sau:

Reading Checkbox Data

  • Maths Flag :: on

  • Physics Flag:: null

  • Chemistry Flag:: on

Đọc tất cả các tham số biểu mẫu

Sau đây là một ví dụ chung sử dụng getParameterNames()phương thức HttpServletRequest để đọc tất cả các tham số biểu mẫu có sẵn. Phương thức này trả về một Enumeration có chứa các tên tham số theo thứ tự không xác định.

Khi chúng ta có Bảng kê, chúng ta có thể lặp lại Bảng kê theo cách chuẩn, sử dụng hasMoreElements() phương pháp xác định thời điểm dừng và sử dụng nextElement() phương thức để lấy từng tên tham số.

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

Sau đâ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ờ hãy thử gọi JSP bằng Hello.htm ở trên; điều này sẽ tạo ra một kết quả giống như bên dưới dựa trên đầu vào được cung cấp -

Đọc tất cả các tham số biểu mẫu

Tên tham số Giá trị tham số
toán học trên
hóa học trên

Bạn có thể thử JSP ở trên để đọc bất kỳ dữ liệu nào khác của biểu mẫu có các đối tượng khác như hộp văn bản, nút radio hoặc menu thả xuống, v.v.