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读取具有其他对象(如文本框,单选按钮或下拉菜单等)的任何其他表单的数据。