index.jsp文件:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head>
<title>注册页面</title>
</head>
<body>
<form action="/Request/servlet/RequestDemo4" method="post">
用户名:<input type="text" name="username"/><br/>
密码:<input type="password" name="password"/><br/>
确认密码:<input type="password" name="password"/><br/>
<input type="submit" value="注册"/>
</form>
</body>
</html>
User.java文件:
package com.neu.domain;
import java.util.Arrays;
public class User {
private String username;
private String password[];
private String gender;
public String getUsername() {//读属性,属性名称username
return username;
}
public void setUsername(String username) {//写属性,属性名username
this.username = username;
}
public String[] getPassword() {
return password;
}
public void setPassword(String[] password) {
this.password = password;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "User [username=" + username + ", password="
+ Arrays.toString(password) + ", gender=" + gender + "]";
}
}
RequestDemo4.java 文件:
package com.neu;
import java.beans.IntrospectionException;
import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import com.neu.domain.User;
//获取请求参数
public class RequestDemo4 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
test8(request, response);
}
//终极解决方案:借助BeanUtil框架
private void test8(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
User user = new User();
System.out.println("封装前:"+user);
try {
BeanUtils.populate(user, request.getParameterMap());
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("封装后:"+user);
}
//getParameterMap获取参数:封装到JavaBean中
private void test7(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//key:请求参数名 value:请求参数值数组
Map<String,String[]> map = request.getParameterMap();
User user = new User();
System.out.println("封装前:"+user);
for(Map.Entry<String, String[]> me:map.entrySet()){
String paramName = me.getKey();//参数名称
String paramValues[] = me.getValue();//参数值
try {
PropertyDescriptor pd = new PropertyDescriptor(paramName, User.class);
Method m = pd.getWriteMethod();//setter方法
if(paramValues.length>1){
m.invoke(user, (Object)paramValues);//参考补充视频:反射main方法
}else{
m.invoke(user, paramValues);
}
} catch (Exception e1) {
e1.printStackTrace();
}
}
System.out.println("封装后:"+user);
}
//getParameterMap获取参数
private void test6(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//key:请求参数名 value:请求参数值数组
Map<String,String[]> map = request.getParameterMap();
for(Map.Entry<String, String[]> me:map.entrySet()){
System.out.println(me.getKey()+"="+Arrays.asList(me.getValue()));
}
}
//把请求参数的值封装到JavaBean中
//约定优于编码:表单的输入域的name取值和JavaBean中的属性(getter和setter方法)保持一致
private void test5(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Enumeration<String> e = request.getParameterNames();//参数名
User user = new User();
System.out.println("封装前:"+user);
while(e.hasMoreElements()){
String paramName = e.nextElement();//即是JavaBean中的属性名称
String paramValue = request.getParameter(paramName);
// setUsername(paramValue); setPassword(paramValue);
//JavaBean的内省
try {
PropertyDescriptor pd = new PropertyDescriptor(paramName, User.class);
Method m = pd.getWriteMethod();//setter方法
m.invoke(user, paramValue);
} catch (Exception e1) {
e1.printStackTrace();
}
}
System.out.println("封装后:"+user);
}
// private void test4(HttpServletRequest request, HttpServletResponse response)
// throws ServletException, IOException {
// User user = new User();
// System.out.println("封装前:"+user);
// String username = request.getParameter("username");
// String password = request.getParameter("password");
// String gender = request.getParameter("gender");
// user.setUsername(username);
// user.setPassword(password);
// user.setGender(gender);
// System.out.println("封装后:"+user);
// }
//以下内容只用简单的程序开发
//获取所有的请求参数名和值
private void test3(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Enumeration<String> e = request.getParameterNames();//参数名
while(e.hasMoreElements()){
String paramName = e.nextElement();
String values [] = request.getParameterValues(paramName);
System.out.println(paramName+"="+Arrays.asList(values));
}
}
//获取重名请求参数的值
private void test2(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");//不区分get还是post的
String passwords[] = request.getParameterValues("password");//获取重名的请求参数值
System.out.println(username+":"+Arrays.asList(passwords));
}
//获取单一的请求参数的值(用户所有的输入都是String)
private void test1(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");//不区分get还是post的
String password = request.getParameter("password");
System.out.println(username+":"+password);
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
需要的包:commons-beanutils-1.8.3.jar
commons-logging-1.1.1.jar
运行:http://localhost:8080/Request/
结果:
封装前:User [username=null, password=null, gender=null]
封装后:User [username=w’w’w, password=[111, 222], gender=null]