如何用javabean得到web.xml作用的参数值

Java中将request中参数值自动赋值到JavaBean中的几种方法
本文前提:参数名称与实体属性一致!
的Web项目中,经常有servlet中接收参数赋值给实体,参数如果多了就很麻烦,这里提供两个简单通用的方法:
比如实体为Student
1.使用mons.beanutils.BeanUtils:
Student stu = new Student();
BeanUtils.populate(stu, request.getParameterMap());
当然实际工作中,有些参数值为空或者参数类型与实体属性类型不匹配,这就会报异常,因此这个不太可靠,这时可以用方法3
2.利用反射:
获得所有set方法,排除掉Object基类本身的set方法,从get方法中可以得到属性名,而属性名即是request的参数名
3.(最推荐,经过测试) 改装populate方法:
import java.lang.reflect.M
import java.util.D
import javax.servlet.http.HttpServletR
import mons.lang3.ArrayU
import mons.lang3.StringU
import mons.lang3.math.NumberU
import mons.lang3.time.DateU
/**Servlet业务中实体工具
* @author LiuDing
* -下午08:10:06
public class ServletBeanTools {
/**自动匹配参数赋值到实体bean中
* @author LiuDing
下午10:23:37
* @param bean
* @param request
public static void populate(Object bean, HttpServletRequest request){
Class clazz = bean.getClass();
Method ms[] = clazz.getDeclaredMethods();
String fieldT
for(Method m : ms){
mname = m.getName();
if(!mname.startsWith("set")
|| ArrayUtils.isEmpty(m.getParameterTypes())){
field = mname.toLowerCase().charAt(3) + mname.substring(4, mname.length());
value = request.getParameter(field);
if(StringUtils.isEmpty(value)){
fieldType = m.getParameterTypes()[0].getName();
//以下可以确认value为String类型
if(String.class.getName().equals(fieldType)){
m.invoke(bean, (String)value);
}else if(Integer.class.getName().equals(fieldType) && NumberUtils.isDigits((String)value)){
m.invoke(bean, Integer.valueOf((String)value));
}else if(Short.class.getName().equals(fieldType) && NumberUtils.isDigits((String)value)){
m.invoke(bean, Short.valueOf((String)value));
}else if(Float.class.getName().equals(fieldType) && NumberUtils.isNumber((String)value)){
m.invoke(bean, Float.valueOf((String)value));
}else if(Double.class.getName().equals(fieldType) && NumberUtils.isNumber((String)value)){
m.invoke(bean, Double.valueOf((String)value));
}else if(Date.class.getName().equals(fieldType)){
m.invoke(bean, DateUtils.parseDate((String)value, "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss"));
m.invoke(bean, value);
}catch(Exception e){
e.printStackTrace();本帖子已过去太久远了,不再提供回复功能。一、BeanUtils介绍
&&&&& commons-beanutils是利用反射机制对JavaBean的属性进行处理,提供了对于JavaBean的各种处理方法。众所周知,一个JavaBean通常包含了大量的属性,而对于JavaBean的处理导致大量get/set方法的堆积,使用BeanUtils能简化我们的代码量,将我们的双手从get/set方法中解放出来,让我们节省时间去搬其它的砖头。
二、BeanUtils基本使用
&&&&& 1,通过BeanUtils类可以直接get和set一个属性的值,方法如下(第一个参数是JavaBean对象,第二个参数是要操作的属性名):
getSimpleProperty(Object bean, String name)
Return the value of the specified simple property of the specified bean, converted to a String.
setProperty(Object bean, String name, Object value)
Set the specified property value, performing type conversions as required to conform to the type of the destination property.
  2,一个更常用更重要的方法是:copyProperties()
copyProperties(Object dest, Object orig)
Copy property values from the origin bean to the destination bean for all cases where the property names are the same.
copyProperty(Object bean, String name, Object value)
Copy the specified property value to the specified destination bean, performing any type conversion that is required.
需要注意的是这种copy都是浅拷贝,复制后的两个Bean的同一个属性可能拥有同一个对象的引用。所以在使用时要小心,特别是对于属性为自定义类的情况。
三、封装web请求参数
  定义一个静态方法copyParmas(),用于将request请求参数值赋给相应的bean的对应属性,若请求参数名与bean属性名不匹配,该值会被舍弃。
public static Object copyParams(Class targetClass, HttpServletRequest request){
Object bean = null;
bean = targetClass.newInstance();
Map params = request.getParameterMap();
Set set = params.entrySet();
for(Iterator iterator = set.iterator();iterator.hasNext();){
Entry entry = (Entry) iterator.next();
String name = (String) entry.getKey();
Object[] values = (Object[]) entry.getValue();
if(values!=null){
if(values.length == 1){
BeanUtils.copyProperty(bean, name, values[0]);
BeanUtils.copyProperty(bean, name, values);
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
四、copyProperties性能
  不幸的是Commons BeanUtil的copyProperties性能较差,而直接get/set虽然丑陋麻烦,但是性能很好。具体情况可参看文章:/blog/399577 。
阅读(...) 评论()

我要回帖

更多关于 web.xml作用 的文章

 

随机推荐