Java通过反射获取Jsp页面传输值

一般在Servlet获取Jsp页面传输过来的值的时候,都是通过声明一个String字符串参数调用request.getParameter()方法来获取,如果参数数量少,可以这样一个一个获取,当参数数量很多的时候就很不方便了,要写一堆request.getParameter()方法,如果还要装进person对象里面,就更不方便了,特别是做数据的新增或修改时候,获取了值之后还要调用set方法,一一装进对象里面,在这里提供一个反射工具类,它可以省略request.getParameter()和对象set设置值的使用,只需要调用这个工具类传入request参数和一个对象就可以获取到。代码如下:

package com.web.util;

 

import java.lang.reflect.Field;

import java.lang.reflect.Method;

import java.sql.Date;

import java.sql.Timestamp;

import java.text.SimpleDateFormat;

 

import javax.servlet.http.HttpServletRequest;

 

public class RequestHelper {

/**

 * request请求的数据放到java对象中

 */

public static <T> T getSingleRequest(HttpServletRequest request,

Class<T> obj) {

// 创建实例

T instance = null;

try {

//获取对象所以成员变量

Field[] fields = obj.getDeclaredFields();

//获取对象实例

instance = obj.newInstance();

for (int i = 0; i < fields.length; i++) {

//获取成员变量名称

String name = fields[i].getName();

//判断成员变量是否含有serialVersionUID,有则跳过本次循环

if (name.equals("serialVersionUID")) {

continue;

}

//获取成员变量类型

Class<?> type = obj.getDeclaredField(name).getType();

// 首字母大写

String replace = name.substring(0, 1).toUpperCase()

+ name.substring(1);

// ---获取settter方法

Method setMethod = obj.getMethod("set" + replace, type);

//获取页面传输值

String str = request.getParameter(replace);

if (str == null || "".equals(str)) {

// 首字母小写

String small = name.substring(0, 1).toLowerCase()

+ name.substring(1);

str = request.getParameter(small);

}

//判断页面传输值是否为空,若不为空则调用set方法设置值,若为空则结束本次循环

if (str != null && !"".equals(str)) {

// ---判断读取数据的类型

if (type.isAssignableFrom(String.class)) {

setMethod.invoke(instance, str);

} else if (type.isAssignableFrom(int.class)

|| type.isAssignableFrom(Integer.class)) {

setMethod.invoke(instance, Integer.parseInt(str));

} else if (type.isAssignableFrom(short.class)

|| type.isAssignableFrom(Short.class)) {

setMethod.invoke(instance, Short.parseShort(str));

} else if (type.isAssignableFrom(Double.class)

|| type.isAssignableFrom(double.class)) {

setMethod.invoke(instance, Double.parseDouble(str));

} else if (type.isAssignableFrom(Boolean.class)

|| type.isAssignableFrom(boolean.class)) {

setMethod.invoke(instance, Boolean.parseBoolean(str));

} else if (type.isAssignableFrom(Date.class)) {

SimpleDateFormat dateFormat = new SimpleDateFormat(

"yyyy-MM-dd");

setMethod.invoke(instance, dateFormat.parse(str));

} else if (type.isAssignableFrom(Timestamp.class)) {

SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

setMethod.invoke(instance, new estamp(dateFormat.parse(str).getTime()));

}

}

}

} catch (Exception e) {

// TODO: handle exception

e.printStackTrace();

}

return instance;

}

}

工具类调用方法如下,假如在新增用户保存的时候怎样调用上面反射类获取页面值:

 

public void addSave(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

//声明一个对象接受RequestHelper类返回来的实例

User user = RequestHelper.getSingleRequest(request, User.class);

System.out.println("用户名:" + user.getUsername() + "\t" + "密码:"

+ user.getPassword());

String str = userService.insert(user);

System.out.println(str);

}

代码执行结果如下:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值