JSP 表单处理

  • 表单处理

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

    现在让我们讨论表单处理中的方法。
    GET方法
    GET方法发送附加到页面请求的编码用户信息。页面和编码信息由?分隔。字符如下-
    
    http://www.test.com/hello?key1=value1&key2=value2
    
    GET方法是将信息从浏览器传递到Web服务器的默认方法,它会生成一个长字符串,该字符串出现在浏览器的地址栏中。。如果您有密码或其他敏感信息要传递给服务器建议最好不要使用GET方法。GET方法具有大小限制:请求字符串中只能有1024个字符。此信息使用QUERY_STRING标头传递,并且可以通过QUERY_STRING环境变量进行访问,环境变量可以使用request对象的getQueryString()和getParameter()方法进行处理。
    POST方法
    将信息传递到后端程序的通常更可靠的方法是POST方法。此方法以与GET方法完全相同的方式打包信息,但不是在?之后将其作为文本字符串发送。在网址中将其作为单独的消息发送。此消息以标准输入的形式到达后端程序,您可以解析该标准输入并将其用于处理。JSP使用getParameter()方法读取简单参数,并使用getInputStream()方法读取来自客户端的二进制数据流来处理这种类型的请求。
  • 使用JSP读取表单数据

    JSP根据情况使用以下方法自动处理表单数据解析-
    • getParameter() -调用request.getParameter()方法以获取表单参数的值。
    • getParameterValues() -如果参数出现多次并返回多个值(例如复选框),则调用此方法。
    • getParameterNames() -如果要获取当前请求中所有参数的完整列表,请调用此方法。
    • getInputStream() -调用此方法以读取来自客户端的二进制数据流。
  • 使用URL的GET方法示例

    以下URL将使用GET方法将两个值传递给HelloForm程序。http://localhost:8080/main.jsp?first_name=moo&last_name=alex,下面是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> 
    
    现在,在浏览器的地址栏中输入中输入:http://localhost:8080/main.jsp?first_name=moo&last_name=alex 这将产生以下结果-
  • 使用表单的GET方法示例

    以下是使用HTML FORM和Submit按钮传递两个值的示例。我们将使用相同的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.html文件中,并将其放在tomcat安装目录/webapps/ROOT目录中。当您访问http://localhost:8080/Hello.html时,您将收到以下输出。
    尝试输入first_name和last_name,然后单击submit按钮以在运行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.html文件的内容-
    
    <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>
    
    将此HTML保留在Hello.html文件中,并将其放在tomcat安装目录/webapps/ROOT目录中。当您访问http://localhost:8080/Hello.html时,您将收到以下输出。
    尝试输入first_name和last_name,然后单击submit按钮以在运行tomcat的本地计算机上查看结果。基于提供的输入,它将生成与以前面一个示例中提到的结果类似的结果。
  • 将复选框数据传递到JSP程序

    当需要选择多个选项时,使用复选框。以下是带有两个复选框的表单的示例HTML代码CheckBox.html。
    
    <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>
    
    上面的代码将产生以下结果-
    以下是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>
    
    上面的程序将产生以下结果-
  • 读取所有表单参数

    以下是一个通用示例,该示例使用HttpServletRequest的getParameterNames()方法读取所有可用的表单参数。此方法返回一个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.html的内容-
    
    <html>
       <body>
          
          <form action = "main.jsp" method = "POST" target = "_blank">
             <input type = "checkbox" name = "maths" checked = "checked" value="on"/> Maths
             <input type = "checkbox" name = "physics"  value="on"/> Physics
             <input type = "checkbox" name = "chemistry" checked = "checked"value="on" /> Chem
             <input type = "submit" value = "Select Subject" />
          </form>
       
       </body>
    </html>
    
    现在尝试使用上面的Hello.html请求JSP;这将基于提供的输入生成如下所示的类似结果-
    您可以尝试使用上述JSP读取具有其他对象(如文本框,单选按钮或下拉菜单等)的任何其他表单的数据。