JSP - 表单处理


在本章中,我们将讨论 JSP 中的表单处理。当您需要将一些信息从浏览器传递到 Web 服务器并最终传递到后端程序时,您一定遇到过很多情况。浏览器使用两种方法将此信息传递到 Web 服务器。这些方法是 GET 方法和 POST 方法。

表单处理方法

现在让我们讨论表单处理中的方法。

获取方法

GET 方法发送附加到页面请求的编码用户信息。页面和编码信息由 ? 分隔。字符如下 -

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

GET 方法是将信息从浏览器传递到 Web 服务器的默认方法,它会生成一个长字符串,显示在浏览器的Location:box中。建议最好不要使用GET方法。如果您有密码或其他敏感信息要传递到服务器。

GET 方法有大小限制:请求字符串中只能包含 1024 个字符

此信息使用QUERY_STRING 标头传递,并且可以通过 QUERY_STRING 环境变量访问,该变量可以使用请求对象的getQueryString()getParameter()方法进行处理。

邮寄方式

通常,将信息传递给后端程序的更可靠的方法是 POST 方法。

此方法以与 GET 方法完全相同的方式打包信息,但不是在 ? 后将其作为文本字符串发送。在 URL 中,它作为单独的消息发送。该消息以标准输入的形式到达后端程序,您可以对其进行解析并用于处理。

JSP 处理此类请求,使用getParameter()方法读取简单参数,使用getInputStream()方法读取来自客户端的二进制数据流。

使用JSP读取表单数据

JSP 根据情况使用以下方法自动处理表单数据解析 -

  • getParameter() - 您调用request.getParameter()方法来获取表单参数的值。

  • getParameterValues() - 如果参数出现多次并返回多个值(例如复选框),则调用此方法。

  • getParameterNames() - 如果您想要当前请求中所有参数的完整列表,请调用此方法。

  • getInputStream() - 调用此方法读取来自客户端的二进制数据流。

使用 URL 的 GET 方法示例

以下 URL 将使用 GET 方法将两个值传递给 HelloForm 程序。

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

下面是main.jsp JSP 程序,用于处理 Web 浏览器给出的输入。我们将使用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>

现在在浏览器的Location:box中输入http://localhost:8080/main.jsp?first_name=ZARA&last_name=ALI。这将生成以下结果 -

使用GET方法读取表单数据

  • 名字: ZARA

  • : 阿里

使用表单的 GET 方法示例

以下是使用 HTML FORM 和提交按钮传递两个值的示例。我们将使用相同的 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 目录中。当您访问http://localhost:8080/Hello.htm时,您将收到以下输出。

名:
姓:
尝试输入名字和姓氏,然后单击提交按钮以在运行 tomcat 的本地计算机上查看结果。根据提供的输入,它将生成与上面示例中提到的类似的结果。

使用表单的 POST 方法示例

让我们对上面的 JSP 进行一些修改以处理 GET 和 POST 方法。下面是main.jsp JSP 程序,用于使用 GET 或 POST 方法处理 Web 浏览器给出的输入。

事实上,上面的 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 目录中。当您访问http://localhost:8080/Hello.htm时,您将收到以下输出。

名:
姓:

尝试输入名字和姓氏,然后单击提交按钮以在运行 tomcat 的本地计算机上查看结果。

根据提供的输入,您将收到与上述示例类似的结果。

将复选框数据传递给 JSP 程序

当需要选择多个选项时,请使用复选框。

以下是具有两个复选框的表单的示例HTML 代码 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 程序,用于处理 Web 浏览器为复选框按钮提供的输入。

<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

读取所有表单参数

以下是一个通用示例,它使用HttpServletRequest 的getParameterNames()方法来读取所有可用的表单参数。此方法返回一个枚举,其中包含未指定顺序的参数名称。

一旦我们有了一个枚举,我们就可以以标准方式循环枚举,使用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>

现在尝试使用上面的 Hello.htm 调用 JSP;这将根据提供的输入生成如下结果 -

读取所有表单参数

参数名称 参数值
数学
化学

您可以尝试使用上面的 JSP 来读取具有其他对象(如文本框、单选按钮或下拉列表等)的任何其他表单的数据。