利用反射机制解释struts2中的取值原理



package com.uplooking.test.base.Servlet;

import java.lang.reflect.Method;
import java.sql.Date;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;

import javafx.scene.chart.PieChart.Data;
import sun.java2d.pipe.SpanShapeRenderer.Simple;

public class OsServlet extends HttpServlet{

//获取属性并将其转换成set方法的名,以下程序通过此名来获取对象的set方法

public String getMethodName(String methodName){

char firstCharacter=methodName.charAt(0);

char upperCharacter=(char) (firstCharacter-32);

String finalName=“set”+upperCharacter+methodName.substring(1,methodName.length());

return finalName;

}

public Object dyEntityDomain(HttpServletRequest request,String pageEntity) throws InstantiationException,

IllegalAccessException, ClassNotFoundException, NoSuchMethodException, SecurityException,

IllegalArgumentException, InvocationTargetException, ParseException{

//利用反射获取对象的类(此处有三种那个方法)

class.getClass();

Class<?> clz=Class.forName(pageEntity);

//newInstance()来实例化对象

Object curpageobj = clz.newInstance();

//利用反射获取类中的参数及参数的类型等类的信息并将其存在Filed[]数组中

Field[] declaredFields = clz.getDeclaredFields();

for (Field field : declaredFields) {

//定义一个对象存储获取的类中的method

Method method=null;

//遍历类中的属性类型进行匹配

if (field.getType().getSimpleName().equals(“Integer”)) {

//调用getMethodName方法来获取类中的set方法

method=clz.getMethod(getMethodName(field.getName()), Integer.class);

//执行invoke方法来调用对象的set方法并将获取的页面的值赋给对象属性

//方法主动被调用

method.invoke(curpageobj, Integer.parseInt(request.getParameter(field.getName())));

}

//对于不同类型的属性进行赋值

else if(field.getType().getSimpleName().equals(“String”)){

method=clz.getMethod(getMethodName(field.getName()), String.class);

method.invoke(curpageobj, request.getParameter(field.getName()));

}

else if(field.getType().getSimpleName().equals(“Date”)){

System.out.println(“嘿嘿嘿”+getMethodName(field.getName()));

System.out.println( request.getParameter(“1233="+request.getParameter(field.getName())));

//method=clz.getMethod(getMethodName(field.getName()), Data.class);

//method.invoke(curpageobj, new Date(2012-10-8));

}

}

//返回一个对象

return curpageobj;

}
}