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>
|
|