手写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);

*/

}
}