- JSP 基础教程
- JSP - 首页
- JSP - 概述
- JSP - 环境搭建
- JSP - 架构
- JSP - 生命周期
- JSP - 语法
- JSP - 指令
- JSP - 动作
- JSP - 隐式对象
- JSP - 客户端请求
- JSP - 服务器响应
- JSP - HTTP 状态码
- JSP - 表单处理
- JSP - 编写过滤器
- JSP - Cookie 处理
- JSP - 会话跟踪
- JSP - 文件上传
- JSP - 日期处理
- JSP - 页面重定向
- JSP - 点击计数器
- JSP - 自动刷新
- JSP - 发送邮件
- 高级 JSP 教程
- JSP - 标准标签库
- JSP - 数据库访问
- JSP - XML 数据
- JSP - JavaBean
- JSP - 自定义标签
- JSP - 表达式语言
- JSP - 异常处理
- JSP - 调试
- JSP - 安全
- JSP - 国际化
- JSP 有用资源
- JSP - 问答
- JSP - 快速指南
- JSP - 有用资源
- JSP - 讨论
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 环境变量访问,可以使用请求对象的getQueryString() 和getParameter() 方法进行处理。
POST 方法
将信息传递到后端程序的一种更可靠的方法通常是 POST 方法。
此方法打包信息的方式与 GET 方法完全相同,但它不是在 URL 中 ? 后面发送文本字符串,而是将其作为单独的消息发送。此消息以标准输入的形式到达后端程序,您可以对其进行解析并用于处理。
JSP 使用getParameter() 方法读取简单参数和getInputStream() 方法读取来自客户端的二进制数据流来处理此类请求。
使用 JSP 读取表单数据
JSP 根据情况使用以下方法自动处理表单数据解析:
getParameter() − 调用request.getParameter() 方法获取表单参数的值。
getParameterValues() − 如果参数出现多次并返回多个值(例如复选框),则调用此方法。
getParameterNames() − 如果要获取当前请求中所有参数的完整列表,则调用此方法。
getInputStream() − 调用此方法读取来自客户端的二进制数据流。
使用 URL 的 GET 方法示例
以下 URL 将使用 GET 方法将两个值传递给 HelloForm 程序。
https://127.0.0.1:8080/main.jsp?first_name=ZARA&last_name=ALI
以下是处理 Web 浏览器提供的输入的main.jsp JSP 程序。我们将使用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>
现在在浏览器的位置栏中输入https://127.0.0.1:8080/main.jsp?first_name=ZARA&last_name=ALI。这将生成以下结果:
使用 GET 方法读取表单数据
|
使用表单的 GET 方法示例
以下是一个使用 HTML 表单和提交按钮传递两个值的示例。我们将使用相同的 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 安装目录>/webapps/ROOT 目录中。当您访问https://127.0.0.1:8080/Hello.htm时,您将收到以下输出。
< p>尝试输入名字和姓氏,然后单击提交按钮以查看 Tomcat 运行的本地计算机上的结果。根据提供的输入,它将生成与上述示例类似的结果。使用表单的 POST 方法示例
让我们对上面的 JSP 进行一些修改,以处理 GET 和 POST 方法。以下是处理 Web 浏览器使用 GET 或 POST 方法提供的输入的main.jsp JSP 程序。
事实上,上面的 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 安装目录>/webapps/ROOT 目录中。当您访问https://127.0.0.1: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>
以上代码将生成以下结果:
以下是处理 Web 浏览器为复选框按钮提供的输入的 main.jsp JSP 程序。
<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;这将根据提供的输入生成如下所示的结果:
读取所有表单参数
参数名称 | 参数值(s) |
---|---|
数学 | 已选中 |
化学 | 已选中 |
您可以尝试使用上面的 JSP 读取任何其他表单的数据,这些表单包含文本框、单选按钮或下拉列表等其他对象。