A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Mylo 黑马粉丝团   /  2018-4-19 12:15  /  426 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package test.web;

import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

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

public class BasicServlet extends HttpServlet{
        @Override
        protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                //获取请求的所有参数
                Map<String, String[]> map = request.getParameterMap();
                Set<Entry<String, String[]>> es = map.entrySet();
                //获取当前类
                Class<? extends BasicServlet> clz = this.getClass();
                //获取所有的字段
                Field[] fields = clz.getDeclaredFields();
                //获取类上的泛型
                Type[] genericInterfaces = clz.getGenericInterfaces();
                Type[] obj = ((ParameterizedType)genericInterfaces[0]).getActualTypeArguments();
                //获取到类
                Class objClass = (Class)obj[0];
                for (Field field : fields) {
                        //暴力反射
                        field.setAccessible(true);               
                        //设置对象
                        Class<?> fieldType = field.getType();
                        if(fieldType == objClass) {
                                Object nsObj = null;
                                try {
                                         nsObj = fieldType.newInstance();
                                } catch (Exception e1) {
                                        e1.printStackTrace();
                               
                                }
                                for (Entry<String, String[]> entry : es) {
                                        String paramKey = entry.getKey();
                                        String[] paramValue = entry.getValue();
                                        System.out.println(objClass + "----" + objClass.getDeclaredFields().length);
                                        Field[] objFields = objClass.getDeclaredFields();
                                        for (Field objField : objFields) {
                                                objField.setAccessible(true);
                                                if(objField.getName().equals(paramKey)) {
                                                        try {
                                                                Class<?> type = objField.getType();
                                                               
                                                                if (type == int.class) {
                                                                        int value = Integer.parseInt( paramValue[0]);
                                                                        objField.set(nsObj, value);
                                                                }else {
                                                                        objField.set(nsObj, paramValue[0]);
                                                                }
                                                               
                                                        } catch (Exception e) {
                                                                // TODO Auto-generated catch block
                                                                e.printStackTrace();
                                                       
                                                        }
                                                }
                                        }
                                       
                                        //setUser
                                        String tempName = field.getName();
                                        tempName = tempName.substring(0, 1).toUpperCase() + tempName.substring(1);
                                        try {
                                                Method setObj = clz.getDeclaredMethod("set" + tempName , fieldType);
                                                try {
                                                        setObj.invoke(this, nsObj);
                                                        request.setAttribute(field.getName(), nsObj);
                                                } catch (Exception e) {
                                                        // TODO Auto-generated catch block
                                                        e.printStackTrace();
                                               
                                                }
                                        } catch (Exception e) {
                                               
                                                e.printStackTrace();
                                        }
                                }
                               
                        }else {
                                for (Entry<String, String[]> entry : es) {
                                        String paramKey = entry.getKey();
                                        String[] paramValue = entry.getValue();
                                        if (field.getName().equals(paramKey)) {
                                                try {
                                                        field.set(this, paramValue[0]);
                                                        request.setAttribute(field.getName(), paramValue[0]);
                                                } catch (Exception e) {
                                                       
                                                }
                                        }
                                       
                                }
                               
                        }
                       
                }
       
               
                //********************
                String action = request.getParameter("action");
                try {
                        Method doMethod = clz.getDeclaredMethod(action, HttpServletRequest.class,HttpServletResponse.class);
                        try {
                                String invoke =(String) doMethod.invoke(this, request,response);
                                request.getRequestDispatcher(invoke).forward(request, response);
                        } catch (Exception e) {
                                ;
                        }
                } catch (Exception e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        }
       
}
---------------------------------------------------------------------------------------------------------------------------------
package test.web;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/test")
public class TestGET extends BasicServlet implements MyModelDriver<User>{
       
        /**
         *
         */
        private static final long serialVersionUID = 1L;
        private String testName;
       
       
        public String getTestName() {
                return testName;
        }

        public void setTestName(String testName) {
                this.testName = testName;
        }

        private User user;
       
       

        public User getUser() {
                return user;
        }

        public void setUser(User user) {
                this.user = user;
        }

        public String test(HttpServletRequest request,HttpServletResponse response) {
                System.out.println(testName);
                System.out.println(user);
                return "2.jsp";
        }

}

--------------------------------------------------------------------------------------------------------------------
package test.web;

public interface MyModelDriver<T> {

}

-----------------------------------------------------------------------------------------------------------------------
package test.web;

public class User {
        private String name;
        private int id;
        public User() {
                super();
                // TODO Auto-generated constructor stub
        }
        public User(String name, int id) {
                super();
                this.name = name;
                this.id = id;
        }
        public String getName() {
                return name;
        }
        public void setName(String name) {
                this.name = name;
        }
        public int getId() {
                return id;
        }
        public void setId(int id) {
                this.id = id;
        }
        @Override
        public String toString() {
                return "User [name=" + name + ", id=" + id + "]";
        }

       
}

--------------------------------------------------------------------------------------------------------------------------
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
        ${testName }${user }
</body>
</html>


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马