目录

JSP - 表单处理( Form Processing)

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

表格处理中的方法

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

GET方法

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

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

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

GET方法有大小限制: only 1024 characters can be in a request string

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

POST方法

将信息传递给后端程序的一般更可靠的方法是POST方法。

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

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

使用JSP读取表单数据

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

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

  • getParameterValues() - 如果参数出现多次并返回多个值(例如复选框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 。 这将产生以下结果 -

Using GET Method to Read Form Data

  • First Name :ZARA

  • Last Name :ALI

使用表格获取方法示例

以下是使用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 directory 。 当您访问http://localhost:8080/Hello.htm ,您将收到以下输出。

名字: 姓:

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

根据提供的输入,它将生成与上例中提到的类似的结果。

使用表单的POST方法示例

让我们在上面的JSP中做一点修改来处理GET和POST方法。 下面是main.jsp JSP程序,用于处理Web浏览器使用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的本地计算机上查看结果。

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

将Checkbox数据传递给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程序,用于处理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>

上述程序将产生以下结果 -

<h1>Reading Checkbox Data</h1>
  • Maths Flag : ::开

  • Physics Flag: :: null

  • Chemistry Flag: :上

阅读所有表格参数

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

一旦我们有了Enumeration,我们就可以用标准方式循环Enumeration,使用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; 这将根据提供的输入生成如下所示的结果 -

阅读所有表格参数

参数名称 参数价值
mathson
chemistryon

您可以尝试使用上面的JSP来读取任何其他表单的数据,这些数据包含其他对象,如文本框,单选按钮或下拉列表等。

↑回到顶部↑
WIKI教程 @2018