反射的补充

 

补充 反射Web的代码

在cn.bosp包里面的pojo包下的Userlnfo里面

package cn.bosp.pojo;

 

public class Userlnfo {

private String uname;

private int age;

private String cardNo;

 

public Userlnfo() {

}

 

public Userlnfo(String uname, int age, String cardNo) {

this.uname = uname;

this.age = age;

this.cardNo = cardNo;

}

 

public void setUname(String uname) {

this.uname = uname;

}

 

public void setAge(int age) {

this.age = age;

}

 

public void setCardNo(String cardNo) {

this.cardNo = cardNo;

}

 

public String getUname() {

return uname;

}

 

public int getAge() {

return age;

}

 

public String getCardNo() {

return cardNo;

}

 

@Override

public String toString() {

return "Userlnfo{" +

"uname='" + uname + '\'' +

", age=" + age +

", cardNo='" + cardNo + '\'' +

'}';

}

}

 

在cn.bosp包里面的servlet包下的UserlnfoServlet里面

 

package cn.bosp.servlet;

 

import cn.bosp.pojo.Userlnfo;

import cn.bosp.util.BeanUtil;

 

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.xml.ws.WebEndpoint;

import java.io.IOException;

 

@WebServlet(name="userInfoServlet",urlPatterns={"/user"})

public class UserlnfoServlet extends HttpServlet {

@Override

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

this.doGet(request,response);

}

 

@Override

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

Userlnfo userlnfo=(Userlnfo) BeanUtil.convert(request,Userlnfo.class);

System.out.println(userlnfo);

 

}

}

 

在cn.bosp包里面的util包下的BeanUtil里面

 

package cn.bosp.util;

 

import javax.servlet.http.HttpServletRequest;

 

import java.lang.reflect.Method;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Map;

 

public class BeanUtil {

//将请求中的参数的值 封装到 tergetType类所对应的对象的属性中

public static <T, method> T convert(HttpServletRequest request, Class<T> targetType) {

T t = null;

try {

//获得请求中的所有参数(参数名 , 参数值)

Map<String, String[]> param = request.getParameterMap();

//判断请求中是否含有参数,如果没有参数 直接返回null

if (param.size() == 0) {

return null;

}

t = targetType.newInstance();//类对应的对象

//通过反射获得targetType中的所有set方法

Method[] methods = targetType.getMethods();

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

Method temp = methods[i];

String methodName = temp.getName();

if (methodName.startsWith("set")) {//判断方法名是否所set开头

//如果以set开头,判断set方法的参数个数(只要一个参数的set方法)

if (temp.getParameterTypes().length == 1) {//获得方法的参数列表

//假设有一个set方法,名字叫做setUname,类中的属性名 uname,参数的名字也是uname

//根据方法名可以获得此set方法对应的属性名(也就获得到参数名)

String fieldName = methodName.substring(3, 4).toLowerCase() + methodName.substring(4);

if (param.containsKey(fieldName)) {//判断请求中是否含有此参数

String[] values = param.get(fieldName);//根据参数名获得参数值

//将请求中的参数值的类型转为类中的属性的类型

Object value = parseValue(values, temp.getParameterTypes()[0]);

//调用set方法,给属性赋值

if (value != null) {

temp.invoke(t, value);

}

}

}

}

 

}

} catch (Exception e) {

e.printStackTrace();

 

}

return t;

}

//将String类型的参数值,转为目标类型(???)

private static Object parseValue(String[] values,Class type) {

try {

String value = values[0];

if (type == String.class) {

return value;

} else if (type == int.class) {

return Integer.parseInt(value);

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

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MMM-dd");

return sdf.parse(value);

} else if (type == double.class) {

return Double.parseDouble(value);

} else if (type == byte.class) {

return Byte.parseByte(value);

} else if (type == short.class) {

return Short.parseShort(value);

} else if (type == long.class) {

return Long.parseLong(value);

} else if (type == float.class) {

return Float.parseFloat(value);

} else {

throw new UnConverterException("不支持的类型");

}

 

} catch (Exception e) {

e.printStackTrace();

}

return null;

}

}

 

在cn.bosp包里面的util包下的UnConverterException里面

 

package cn.bosp.util;

 

public class UnConverterException extends RuntimeException{

public UnConverterException() {

}

 

public UnConverterException(String message) {

super(message);

}

 

public UnConverterException(String message, Throwable cause) {

super(message, cause);

}

 

public UnConverterException(Throwable cause) {

super(cause);

}

 

public UnConverterException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {

super(message, cause, enableSuppression, writableStackTrace);

}

}

 

web新的内容

1.

package cn.chy.pojo;

 

import java.text.SimpleDateFormat;

import java.util.Date;

 

public class Student {

private int id;

private String stuName;

private Date birtday;

 

public Student() {

}

 

public Student(int id, String stuName, Date birtday) {

this.id = id;

this.stuName = stuName;

this.birtday = birtday;

}

 

public int getId() {

return id;

}

 

public void setId(int id) {

this.id = id;

}

 

public String getStuName() {

return stuName;

}

 

public void setStuName(String stuName) {

this.stuName = stuName;

}

 

public Date getBirtday() {

return birtday;

}

 

public void setBirtday(Date birtday) {

this.birtday = birtday;

}

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

 

@Override

public String toString() {

return "Student{" +

"id=" + id +

", stuName='" + stuName + '\'' +

", birtday=" + sdf.format(birtday) +

'}';

}

}

2.

package cn.chy.servlet;

 

import cn.chy.pojo.Student;

import cn.chy.util.BeanUtil;

 

import javax.servlet.ServletException;

import javax.servlet.annotation.WebServlet;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import java.io.IOException;

 

@WebServlet(name="userInfoServlet",urlPatterns={"/user"})

public class lndexServlet extends HttpServlet {

@Override

protected void doPost(HttpServletRequest req, HttpServletResponse resp)

throws ServletException, IOException {

doGet(req, resp);

 

}

 

@Override

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

Student convert= BeanUtil.convert(req,Student.class);

 

}

}

3.

package cn.chy.util;

 

import javax.servlet.http.HttpServletRequest;

import java.lang.reflect.Method;

import java.text.SimpleDateFormat;

import java.util.Date;

import java.util.Map;

 

public class BeanUtil {

public static <T>T convert(HttpServletRequest request,Class<T>targetType){

T t=null;

Map<String,String[]> param=request.getParameterMap();

try{

if (param.size()==0){

return null;

}

t=targetType.newInstance();

Method[]methods=targetType.getMethods();

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

Method temp=methods[i];

String pName=temp.getName();

if (temp.getParameterTypes().length==1){

if (pName.startsWith("set")){

String fieldName=pName.substring(3,4).toLowerCase()+pName.substring(4);

 

if(param.containsKey(fieldName)){

String[] strings = param.get(fieldName);

Object obj = parseObject(strings, temp.getParameterTypes()[0]);

if(obj != null){

temp.invoke(t,obj);

}

}

}

}

}

}catch (Exception e){

e.printStackTrace();

}

return t;

}

public static Object parseObject(String[] value, Class type){

String val=value[0];

System.out.println(val);

try{

if(type==String.class){

return val;

}else if (type == int.class){

return Integer.parseInt(val);

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

SimpleDateFormat sdf =new SimpleDateFormat("yyy-MMM-dd");

return sdf.parse(val);

}else {

throw new ThrowExecptionTest("指定类型不存在");

}

}catch (Exception e){

e.printStackTrace();

}

return null;

}

}

4.

package cn.chy.util;

 

public class ThrowExecptionTest extends RuntimeException {

public ThrowExecptionTest(){

 

}

 

public ThrowExecptionTest(String message) {

super(message);

}

 

public ThrowExecptionTest(String message, Throwable cause) {

super(message, cause);

}

 

public ThrowExecptionTest(Throwable cause) {

super(cause);

}

 

protected ThrowExecptionTest(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {

super(message, cause, enableSuppression, writableStackTrace);

}

}

反射的导图梳理

 

目前刚刚开始制作这个可能会有很多不完整的地方后面为会更新后面的内容以及补充

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值