先来看一下html文件
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>Html的Form表单元素</title>
<meta charset="UTF-8">
</head>
<fieldset style="width:500px;">
<legend>Html的Form表单元素</legend>
<!--form表单的action属性规定当提交表单时,向何处发送表单数据,method属性指明表单的提交方式,分为get和post,默认为get-->
<form action="/J4EE/RequestDemo03" method="post">
<!--输入文本框,SIZE表示显示长度,maxlength表示最多输入长度-->
编 号(文本框):
<input type="text" name="userid" value="NO." size="2" maxlength="2"><br>
<!--输入文本框,通过value指定其显示的默认值-->
用户名(文本框):<input type="text" name="username" value="请输入用户名"><br>
<!--密码框,其中所有输入的内容都以密文的形式显示-->
密 码(密码框):
<!-- 表示的是一个空格-->
<input type="password" name="userpass" value="请输入密码"><br>
<!--单选按钮,通过checked指定默认选中,名称必须一样,其中value为真正需要的内容-->
性 别(单选框):
<input type="radio" name="sex" value="男" checked>男
<input type="radio" name="sex" value="女">女<br>
<!--下拉列表框,通过<option>元素指定下拉的选项-->
部 门(下拉框):
<select name="dept">
<option value="技术部">技术部</option>
<option value="销售部" SELECTED>销售部</option>
<option value="财务部">财务部</option>
</select><br>
<!--复选框,可以同时选择多个选项,名称必须一样,其中value为真正需要的内容-->
兴 趣(复选框):
<input type="checkbox" name="inst" value="唱歌">唱歌
<input type="checkbox" name="inst" value="游泳">游泳
<input type="checkbox" name="inst" value="跳舞">跳舞
<input type="checkbox" name="inst" value="编程" checked>编程
<input type="checkbox" name="inst" value="上网">上网
<br>
<!--大文本输入框,宽度为34列,高度为5行-->
说 明(文本域):
<textarea name="note" cols="34" rows="5">
</textarea>
<br>
<!--隐藏域,在页面上无法看到,专门用来传递参数或者保存参数-->
<input type="hidden" name="hiddenField" value="hiddenvalue"/>
<!--提交表单按钮,当点击提交后,所有填写的表单内容都会被传输到服务器端-->
<input type="submit" value="提交(提交按钮)">
<!--重置表单按钮,当点击重置后,所有表单恢复原始显示内容-->
<input type="reset" value="重置(重置按钮)">
</form>
</fieldset>
</body>
</html>
方法一://getParameter(String)方法(常用)
//getParameterValues(String name)方法(常用)
protected void method1(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
//获取html基本信息
String userid=request.getParameter("userid");//获取html填写的编号,是文本框的名字
String username=request.getParameter("username");
String userpass=request.getParameter("userpass");
String sex=request.getParameter("sex");
String dept=request.getParameter("dept");
String[] insts=request.getParameterValues("inst");
String note=request.getParameter("note");//获取填写信息的说明宁
String hiddenField=request.getParameter("hiddenField");
String instStr="";
for (int i = 0; insts!=null && i < insts.length; i++) {
if (i==insts.length-1) {
instStr+=insts[i];
}else {
instStr+=insts[i]+",";
}
}
//将获取来的信息格式化
String htmlStr = "<table>" +
"<tr><td>填写的编号:</td><td>{0}</td></tr>" +
"<tr><td>填写的用户名:</td><td>{1}</td></tr>" +
"<tr><td>填写的密码:</td><td>{2}</td></tr>" +
"<tr><td>选中的性别:</td><td>{3}</td></tr>" +
"<tr><td>选中的部门:</td><td>{4}</td></tr>" +
"<tr><td>选中的兴趣:</td><td>{5}</td></tr>" +
"<tr><td>填写的说明:</td><td>{6}</td></tr>" +
"<tr><td>隐藏域的内容:</td><td>{7}</td></tr>" +
"</table>";
htmlStr = MessageFormat.format(htmlStr, userid,username,userpass,sex,dept,instStr,note,hiddenField);
response.setCharacterEncoding("UTF-8");
response.setContentType("text/html;charset=UTF-8");
response.getWriter().write(htmlStr);
}
方法二:在服务器使用getParameterNames方法接受表单参数
request.getParameterNames() 方法是将发送请求页面中form表单里所有具有name属性的表单对象获取(包括button).返回一个Enumeration类型的枚举.
通过 Enumeration 的hasMoreElements()方法遍历.再由nextElement()方法获得枚举的值.此时的值是form表单中所有控件的name属性的值.
最后通过request.getParameter()方法获取表单控件的value值.
private void method2(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");//服务器解析方式
response.setCharacterEncoding("UTF-8");//返回浏览器让浏览器去解析方式
response.setHeader("content-type", "text/html;charset=UTF-8");
Enumeration<String> paramNames= request.getParameterNames();//获取所有的参数名称
while(paramNames.hasMoreElements()) {
String name=paramNames.nextElement();//得到参数名称
String value=request.getParameter(name);
response.getWriter().write(MessageFormat.format("{0}={1} <br/>", name,value));
}
}
方法三:在服务器端使用getParameterMap方法接收表单参数
根据Java规范:request.getParameterMap()返回的是一个Map类型的值,
该返回值记录着前端(如jsp页面)所提交请求中的请求参数和请求参数值的映射关系。
这个返回值有个特别之处——只能读。不像普通的Map类型数据一样可以修改。
这是因为服务器为了实现一定的安全规范,所作的限制。比如WebLogic,Tomcat,Resin,JBoss等服务器均实现了此规范。
对request.getParameterMap()的返回值使用泛型时应该是Map<String,String[]>形式,
因为有时像checkbox这样的组件会有一个name对应对个value的时候,
所以该Map中键值对是String[]>的实现。
protected void method3(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
response.setHeader("content-type", "text/html;charset=UTF-8");
//request对象封装的参数是以map行使存储的
Map<String, String[]> paraMap= request.getParameterMap();
for (Map.Entry<String, String[]>entry:paraMap.entrySet()) {
String paramName=entry.getKey();
String paramvalue="";
String[] paramValueArr=entry.getValue();
for (int i = 0;paramValueArr!=null && i < paramValueArr.length; i++) {
if (i==paramValueArr.length-1) {
paramvalue+=paramValueArr[i];
}else {
paramvalue+=paramValueArr[i];
}
}
response.getWriter().write(MessageFormat.format("{0}={1} <br/>", paramName,paramvalue));
}
}