protected
void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
Class userClass = null;
Object user = null;
try {
userClass = Class.forName("com.example.homework2.User");
Constructor constructor = userClass.getConstructor();
user = constructor.newInstance();
} catch (ClassNotFoundException | NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
Enumeration<String> parameterNames = request.getParameterNames();
while (parameterNames.hasMoreElements()) {
String parameterKey = parameterNames.nextElement();
String upperCase = parameterKey.toUpperCase();
String[] parameterValues = request.getParameterValues(parameterKey);
Method method = null;
String getMethod = "set" + parameterKey.replace(parameterKey.charAt(0), upperCase.charAt(0));
try {
if (parameterValues.length != 1) {
method = userClass.getMethod(getMethod, String[].class);
method.invoke(user, (Object) parameterValues);
} else {
method = userClass.getMethod(getMethod, String.class);
method.invoke(user, parameterValues[0]);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
System.out.println(user);
}
// HttpServletRequest 是一次网络请求中的请求信息,HttpServletResponse 是网络请求中的响应信息
protected
void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {
Class userClass = null;
Object user = null;
try {
// 从Jar包中加载"com.example.homework2.User"类,加载结果为Class
userClass = Class.forName("com.example.homework2.User");
// 获取类"com.example.homework2.User"的构造函数
Constructor constructor = userClass.getConstructor();
// 调用构造函数反射生成实例
user = constructor.newInstance();
// 反射过程中的异常处理
} catch (ClassNotFoundException | NoSuchMethodException | InstantiationException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
// 获取网络请求中的参数名列表
Enumeration<String> parameterNames = request.getParameterNames();
// 遍历参数名
while (parameterNames.hasMoreElements()) {
// 迭代遍历, parameterKey 为迭代的到的参数名
String parameterKey = parameterNames.nextElement();
// 参数名大写
String upperCase = parameterKey.toUpperCase();
// 获取参数对应的值
String[] parameterValues = request.getParameterValues(parameterKey);
Method method = null;
// 获取参数对应的Setter方法,比如参数名是username,此处set方法就是setUserName,这样实现很不规范
String getMethod = "set" + parameterKey.replace(parameterKey.charAt(0), upperCase.charAt(0));
try {
// 判断参数值的数目,
if (parameterValues.length != 1) {
// 反射获取"com.example.homework2.User"类中的指定方法,如setUserName方法
method = userClass.getMethod(getMethod, String[].class);
// 反射调用方法,设置值
method.invoke(user, (Object) parameterValues);
} else {
// 同事
method = userClass.getMethod(getMethod, String.class);
method.invoke(user, parameterValues[0]);
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
}
}
// 打印最后的用户信息
System.out.println(user);
这个实现有点粗糙,不太实用,可以考虑使用框架实现