好记性不如赖笔头…………
java代码
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("UTF-8");//针对的post方式提交的乱码问题
getParamter4(req);
getParamter3(req);
getParamter2(req);
getParamter1(req);
}
/**
* @描述:通过流的方式获取表单参数
* @时间:2017年6月22日03:59:51
* @注意:
* @作者:Ckinghan
* @param req
* @throws IOException
* @throws UnsupportedEncodingException
*/
private void getParamterInputStream(HttpServletRequest req) throws IOException, UnsupportedEncodingException {
ServletInputStream inputStream = req.getInputStream();
int i = 1;
byte[] bs = new byte[1024];
while((i = inputStream.read(bs)) != -1){
System.out.println(new String(new String(bs, 0, i).getBytes(),"UTF-8"));
}
}
/**
* @描述:获取参数的方法三四:使用的方法与方法三是相同的,只是这里是别人封装好的,只须要几句代码就可以完成
* @时间:2017年6月22日02:59:48
* @注意:需要导入如下两个JAR包:commons-beanutils-1.8.3、commons-logging-1.1.1
* @作者:Ckinghan
* @param req
*/
private void getParamter4(HttpServletRequest req) {
//创建实体对象
User user = new User();
try {
//通过封装好的工具类将表单中的数据写入到实体对象对应的属性中
BeanUtils.populate(user, req.getParameterMap());
} catch (Exception e) {
e.printStackTrace();
}
//输出实体对象
System.out.println("新的方法"+user);
}
/**
* @描述:获取参数的方法三:通过getParameterMap()返回参数的名称及对应的值,并保存在Map中
* 遍历Map,通过属性描述器获取对应 的set方法,并利用反射将数据写入对应实体的属性中,框架中常用
* @时间:2017年6月22日02:50:54
* @注意:
* @作者:Ckinghan
* @param req
*/
private void getParamter3(HttpServletRequest req) {
//获取所有的参数名及参数值,以Map接收
Map<String, String[]> parameterMap = req.getParameterMap();
//创建User实例对象,用以保存表单提交的数据
User user = new User();
//遍历Map的数据
for (Map.Entry<String, String[]> paramter : parameterMap.entrySet()) {
//获取参数名
String name = paramter.getKey();
//获取参数值,因为有可能参数是checkbox类型的,所以统一使用数组接收
String[] value = paramter.getValue();
try {
//创建一个属性描述器,用以通过参数名获取对应的set 、 get方法
PropertyDescriptor propertyDescriptor = new PropertyDescriptor(name,user.getClass());
//获取与name对应的set方法
Method setMethod = propertyDescriptor.getWriteMethod();
//判断接收的值是否为null或值的个数是大于0
if(value != null && value.length > 0){
//如果长度为1,说明只有一个参数
if(value.length == 1){
//利用反射,调用set方法将对应的值写入到实体类中
setMethod.invoke(user, value[0]);
}else{
//利用反射将值写入实体中。注意:在JDK1.5之前,数组在传值时是被拆分开的,
//这是会报错的,为了防止这种情况,使用强转为Object来避免
setMethod.invoke(user, (Object)value);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
//输出实体值
System.out.println(user);
}
/**
* @描述:获取参数的方法二
* @时间:2017年6月22日02:06:46
* @注意:
* @作者:Ckinghan
* @param req
*/
private void getParamter2(HttpServletRequest req) {
//通过.getParameterNames()获取所有的参数名称
Enumeration<String> parameterNames = req.getParameterNames();
//遍历参数名称
while(parameterNames.hasMoreElements()){
//获取当前循环的参数名称
String nextElement = parameterNames.nextElement();
//根据当前的参数名称获取对应的值,因考虑到会接收checkbox类型的,所以使用了getParameterValues()方法返回数组
String[] parameterValues = req.getParameterValues(nextElement);
//将对应的参数值遍历输出
for (int i = 0;parameterValues != null && i < parameterValues.length; i++) {
System.out.println(nextElement+"\t"+parameterValues[i]);
}
}
}
/**
* @描述:获取参数的方法一
* @时间:2017年6月22日02:00:40
* @注意:
* @作者:Ckinghan
* @param req
*/
private void getParamter1(HttpServletRequest req) {
//获取参数
String name = req.getParameter("userName");
String pwd = req.getParameter("pwd");
String sex = req.getParameter("sex");
String[] hobby = req.getParameterValues("hobby");
String city = req.getParameter("city");
System.out.println(name);
System.out.println(pwd);
System.out.println(sex);
System.out.println(city);
for (int i = 0;hobby != null && i < hobby.length; i++) {
System.out.print(hobby[i]+",");
}
}
html代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>注册</title>
</head>
<body>
<form action="/httpServletRequest/index2" method="post" enctype="application/x-www-form-urlencoded">
用户名:<input name="userName" type="text"/><br/>
密码:<input name="pwd" type="password"/><br/>
性别:
<input name="sex" type="radio" value="男" checked="true">男
<input name="sex" type="radio" value="女">女<br/>
爱好:
<input name="hobby" type="checkbox" value="羽毛球"/>羽毛球
<input name="hobby" type="checkbox" value="蓝球"/>蓝球
<input name="hobby" type="checkbox" value="钓鱼"/>钓鱼
<input name="hobby" type="checkbox" value="看书"/>看书<br/>
城市:
<select name="city">
<option value="">---请选择---</option>
<option value="郑州">郑州</option>
<option value="周口">周口</option>
<option value="漯河">漯河</option>
<option value="许昌">许昌</option>
</select><br/>
<input type="submit" value="提交"/>
</form>
</body>
</html>