手写struts的过滤器
package com.uplooking.club.base.util;
import java.io.IOException;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Map;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.junit.Test;
import com.uplooking.club.base.entity.ActionMapping;
import com.uplooking.club.base.entity.ResultMapping;
public class baogeFilter implements Filter {
@Test
public void testgetSet() {
System.out.println(getSetMethod(“name”));
}
public String getSetMethod(String methodname) {
char firstchar = methodname.charAt(0);
firstchar = (char) (firstchar - 32);
methodname = “set” + firstchar + methodname.substring(1);
return methodname;
}
@Test
public void testValueStack() {
Class clazz;
try {
clazz = Class.forName(“com.uplooking.club.clubservice.action.clubServiceAction”);
ValueStack(clazz, null, null);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 获取页面属性
*
* @param claz
* @param request
*/
public void ValueStack(Class claz, HttpServletRequest request, Object clzobj) {
Field[] fields = claz.getDeclaredFields();
for (Field field : fields) {
System.out.println(field.getName());
System.out.println(field.getType());
if (field.getType().toString().indexOf(“class java”) > -1) {
// 属性驱动
System.out.println(“属性驱动”);
} else {
// 模型驱动
System.out.println(“模型驱动”);
String name = field.getName();
System.out.println(“name:” + name);
String modelsetmethod = getSetMethod(name);
String type = field.getType().toString().replace(“class “, “”);
System.out.println(“type:” + type);
try {
Class paramclaz = Class.forName(type);
Method clazmethod = claz.getMethod(modelsetmethod, paramclaz);
Object paramobj = paramclaz.newInstance();
Field[] paramFields = paramclaz.getDeclaredFields();
for (Field param : paramFields) {
String setMethod = getSetMethod(param.getName());
Method method = null;
if (param.getType().getSimpleName().equals(“Integer”)) {
method = paramclaz.getMethod(setMethod, Integer.class);
method.invoke(paramobj,
Integer.parseInt(request.getParameter(name + “.” + param.getName())));
} else if (param.getType().getSimpleName().equals(“String”)) {
method = paramclaz.getMethod(setMethod, String.class);
method.invoke(paramobj, request.getParameter(name + “.” + param.getName()));
} else if (param.getType().getSimpleName().equals(“Double”)) {
method = paramclaz.getMethod(setMethod, Double.class);
method.invoke(paramobj, request.getParameter(name + “.” + param.getName()));
}
request.getParameter(name + “.” + param.getName());
System.out.println(“paramfield:” + request.getParameter(name + “.” +
param.getName()));
}
clazmethod.invoke(clzobj, paramobj);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NoSuchMethodException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NumberFormatException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
@Override
public void doFilter(ServletRequest srequest, ServletResponse sresponse, FilterChain arg2)
throws IOException, ServletException {
// TODO Auto-generated method stub
HttpServletRequest request = (HttpServletRequest) srequest;
HttpServletResponse response = (HttpServletResponse) sresponse;
// 获得请求的路径的最后一个”/“之后的子串
String mapkey = request.getRequestURL().substring(request.getRequestURL().lastIndexOf(”/”) + 1);
ActionMapping actionMapping = MapperUtil.actionmapper.get(mapkey);
String pagevalue = null;
try {
Class claz = Class.forName(actionMapping.getClassname());
Object obj = claz.newInstance();
ValueStack(claz, request, obj);
Method method = claz.getMethod(actionMapping.getMethod());
Object returnvalue = method.invoke(obj);
pagevalue = returnvalue.toString();
Map<String, ResultMapping> mapresult = actionMapping.getResultmapping();
ResultMapping resultMapping = mapresult.get(pagevalue);
System.out.println(resultMapping.getPvalue());
if (resultMapping.getType() == null)
request.getRequestDispatcher(resultMapping.getPvalue()).forward(request, response);
else if (resultMapping.getType().equals(“redirect”))
response.sendRedirect(resultMapping.getPvalue());
} catch (ClassNotFoundException | InstantiationException | IllegalAccessException |
NoSuchMethodException
| SecurityException | IllegalArgumentException | InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
;
/*
* System.out.println(req.getRequestURL());
* System.out.println(MapperUtil.actionmapper.get(
* “clubservicemanager_list”));
* System.out.println(MapperUtil.actionmapper.get(
* “clubservicemanager_add”).getClassname());
* System.out.println(MapperUtil.actionmapper.get(
* “clubservicemanager_add”).getMethod());
*/
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
System.out.println(“初始化xml”);
new XmlUtil().parseXml(“baoge.xml”);
/*
* ActionMapping actionmap = new ActionMapping();
* actionmap.setClassname(
* “com.uplooking.club.clubservice.action.clubServiceAction”);
* actionmap.setMethod(“list”); ActionMapping actionmap2 = new
* ActionMapping(); actionmap2.setClassname(
* “com.uplooking.club.clubservice.action.clubServiceAction”);
* actionmap2.setMethod(“add”);
* MapperUtil.actionmapper.put(“clubservicemanager_list”, actionmap);
* MapperUtil.actionmapper.put(“clubservicemanager_add”, actionmap2);
*/
}
}