JSP 表单( form )
现在的网页都越来越注重交互体验,使用 HTML form 向服务器提交信息,并让后台程序处理
浏览器中使用 GET 和 POST 方法向服务器提交数据
JSP 可以处理浏览器使用 GET 和 POST 方法发送的数据
HTML 表单
GET 方法
HTTP GET 方法将请求的数据信息添加在网址后面,网址与数据信息通过"?"号分隔
http://localhost:8080/jsp/form_get.jsp?name=简单教程&url=www.twle.cn
GET 方法是浏览器默认传递参数的方法,一些敏感信息,如密码等建议不要使用 GET 方法
GET 方法传递数据有大小限制 (注意不是参数的个数有限制),最大为 1024 字节
POST 方法
一些敏感信息,如密码等我们可以通过 POST 方法传递,POST 提交数据是隐式的
POST 提交数据是不可见的,GET 是通过在 url 里面传递的(可以看一下你浏览器的地址栏)
JSP 处理表单数据
JSP 使用 request.getParameter() 来获得表单传递的参数
使用 request.getInputStream()方法来处理表单提交的二进制数据流的请求
JSP 读取表单数据方法
| 方法 | 说明 |
|---|---|
| getParameter() | 使用 request.getParameter() 方法来获取表单参数的值 |
| getParameterValues() | 获得如checkbox类(名字相同,但值有多个)的数据 接收数组变量 ,如checkbox类型 |
| getParameterNames() | 获得所有变量的名称,该方法返回一个Emumeration |
| getInputStream() | 读取来自客户端的二进制数据流 |
范例 : JSP 获取 URL 上传递的参数
假设我们有一个简单的 URL,URL 上传递了 name 和 url 两个参数
现在,我们写一个 JSP 页面 form_get.jsp 来获得这两个参数的内容
http://localhost:8080/jsp/form_get.jsp?name=简单教程&url=www.twle.cn
我们使用以下方法来获得 name 和 greet
String name = request.getParameter("name");
String url = request.getParameter("url");
下面是 form_get.jsp 的代码
form_get.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.io.*,java.util.*" %> <!DOCTYPE html> <meta charset="utf-8"> <title>使用 GET 方法传递数据 - JSP 基础教程 | 简单教程(www.twle.cn)</title> <ul> <li><p><b>站点名:</b> <%= request.getParameter("name")%> </p></li> <li><p><b>网址:</b> <%= request.getParameter("url")%> </p></li> </ul> <p>使用 GET 方法传递数据 - JSP 基础教程 | 简单教程(www.twle.cn)</p>
在浏览器上输入
http://localhost:8080/jsp/form_get.jsp?name=简单教程&url=www.twle.cn
显示如下

使用 HTML 表单的 GET 方法提交参数
上面的范例,我们已经实现了使用 URL 来传递参数,并输出参数的内容
但这样太复杂了,而且用户体验不好,最好的方法就是制作一个 HTML 表单可以编辑并提交这些数据
现在,我们来制作一个表单 form.jsp,它使用 GET 方法向 form_get.jsp 提交数据
webapp/form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <meta charset="utf-8"> <title>HTML 表单提交数据(GET) - JSP 基础教程 | 简单教程(www.twle.cn)</title> <form action="form_get.jsp" method="GET"> 站点: <input type="text" name="name"> <br /> 网址: <input type="text" name="url" /> <input type="submit" value="提交" /> </form> <p>HTML 表单提交数据(GET) - JSP 基础教程 | 简单教程(www.twle.cn)</p>
在浏览器上输入
http://localhost:8080/jsp/form.jsp
显示如下

使用表单的 POST 方法范例
一些重要的数据肯定不能使用 GET 方法传递,应该使用 POST 方法传递
现在我们把上面的表单 form.jsp 中的 method 属性改成 "post" 就能使用 POST 方法提交数据了
webapp/form_post.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <meta charset="utf-8"> <title>HTML 表单提交数据(POST) - JSP 基础教程 | 简单教程(www.twle.cn)</title> <form action="form_get.jsp" method="POST"> 站点: <input type="text" name="name"> <br /> 网址: <input type="text" name="url" /> <input type="submit" value="提交" /> </form> <p>HTML 表单提交数据(POST) - JSP 基础教程 | 简单教程(www.twle.cn)</p>
在浏览器上输入
http://localhost:8080/jsp/form_post.jsp
显示如下

JSP 处理 checkbox 数据
HTML 复选框 checkbox 可以传递一个甚至多个数据
现在我们写一个范例来演示 JSP 如何处理 checkbox 数据
webapp/form_checkbox.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <meta charset="utf-8"> <title>HTML checkbox 表单 - JSP 基础教程 | 简单教程(www.twle.cn)</title> <form action="checkbox.jsp" method="POST"> <input type="checkbox" name="google" checked="checked" /> Google <input type="checkbox" name="twle" /> 简单编程 <input type="checkbox" name="taobao" checked="checked" /> 淘宝 <input type="submit" value="选择网站" /> </form> <p>HTML checkbox 表单 - JSP 基础教程 | 简单教程(www.twle.cn)</p>
webapp/checkbox.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.io.*,java.util.*" %> <!DOCTYPE html> <meta charset="utf-8"> <title>从复选框中读取数据 - JSP 基础教程 | 简单教程(www.twle.cn)</title> <ul> <li><p><b>Google 是否选中:</b> <%= request.getParameter("google")%> </p></li> <li><p><b>简单编程是否选中:</b> <%= request.getParameter("twle")%> </p></li> <li><p><b>淘宝是否选中:</b> <%= request.getParameter("taobao")%> </p></li> </ul> <p>从复选框中读取数据 - JSP 基础教程 | 简单教程(www.twle.cn)</p>
在浏览器上输入
http://localhost:8080/jsp/form_checkbox.jsp
显示如下

JSP 读取所有表单参数
JSP 可以使用 reqeust.getParameterNames() 读取所有表单参数,该方法返回所有变量的名称的枚举
一旦我们有了一个 Enumeration(枚举),我们就可以调用 hasMoreElements() 方法来确定是否还有元素,以及使用nextElement()方法来获得每个参数的名称
webapp/checkbox_all.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.io.*,java.util.*" %> <!DOCTYPE html> <meta charset="utf-8"> <title>读取所有 checkbox 提交的数据 - JSP 基础教程 | 简单教程(www.twle.cn)</title> <style> table { border-collapse: collapse; } table,th,td {border:1px solid #ddd;} th,td {padding:5px 10px;text-align: left} </style> <table width="100%" border="1" align="center"> <tr bgcolor="#949494"> <th>参数名</th><th>参数值</th> </tr> <% Enumeration paramNames = request.getParameterNames(); while(paramNames.hasMoreElements()) { String paramName = (String)paramNames.nextElement(); out.print("<tr><td>" + paramName + "</td>\n"); String paramValue = request.getParameter(paramName); out.println("<td> " + paramValue + "</td></tr>\n"); } %> </table> <p>读取所有 checkbox 提交的数据 - JSP 基础教程 | 简单教程(www.twle.cn)</p>
webapp/form_checkbox_all.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <meta charset="utf-8"> <title>HTML checkbox 表单 - JSP 基础教程 | 简单教程(www.twle.cn)</title> <form action="checkbox_all.jsp" method="POST"> <input type="checkbox" name="google" checked="checked" /> Google <input type="checkbox" name="twle" /> 简单编程 <input type="checkbox" name="taobao" checked="checked" /> 淘宝 <input type="submit" value="选择网站" /> </form> <p>HTML checkbox 表单 - JSP 基础教程 | 简单教程(www.twle.cn)</p>
在浏览器上输入
http://localhost:8080/jsp/form_checkbox_all.jsp
显示如下
