package com.coderising.litestruts; import com.coderising.litestruts.builder.StrutsConfigBuilder; import com.coderising.litestruts.conf.StrutsConfiguration; import com.coderising.litestruts.exception.LiteStrutsException; import com.coderising.litestruts.model.Response; import com.coderising.litestruts.model.View; import com.coderising.litestruts.util.ClassUtil; import java.io.InputStream; import java.lang.reflect.Method; import java.util.*; /** * Created by huitailang on 17/3/4. * 核心类 */ public class Struts { private static final String DEFAULT_HANDLER_METHOD = "exectue"; private static StrutsConfiguration configuration; private static InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("struts.xml"); private static StrutsConfigBuilder builder = new StrutsConfigBuilder(inputStream); static { configuration = builder.parse(); } public static View runAction(String actionName, Map<String, String> parameters) { String actionHandler = getActionHandler(actionName); try { if (actionHandler == null) { throw new LiteStrutsException("请求为" + actionName + "的action没有找到对应的action处理器"); } Class actionHandlerClass = Class.forName(actionName); Object actionHandlerInstance = actionHandlerClass.newInstance(); //根据请求参数,初始化action处理器 Iterator<Map.Entry<String, String>> iterator = parameters.entrySet().iterator(); while (iterator.hasNext()) { Map.Entry<String, String> parameter = iterator.next(); String fieldName = parameter.getKey(); String fieldValue = parameter.getValue(); Method method = actionHandlerClass.getDeclaredMethod(ClassUtil.setter(fieldName), String.class); method.invoke(actionHandlerInstance, fieldValue); } //获取处理响应的handler方法 Method handlerMethod = actionHandlerClass.getDeclaredMethod(DEFAULT_HANDLER_METHOD, Void.class); Object handlerResult = handlerMethod.invoke(actionHandlerInstance, null); //获取action处理器所有的getter方法 Method[] getterMethods = ClassUtil.getGetterMethod(actionHandlerClass); //组装响应结果 } catch (Exception e) { throw new LiteStrutsException("处理action为" + actionName + "的请求出错:", e); } return null; } private static String getActionHandler(String actionName) { Iterator<Map<String, String>> iterator = configuration.getActionMap().iterator(); String actionHandler = null; while (iterator.hasNext()) { Map<String, String> map = iterator.next(); if (map.get(actionName) != null) { actionHandler = map.get(actionName); break; } } return actionHandler; } private static View getView(String actionHandler, String responseCode) { Iterator<Map<String, Set<Response>>> iterator = configuration.getResponseMap().iterator(); Set<Response> resultSet = null; View view = new View(); while (iterator.hasNext()) { Map<String, Set<Response>> map = iterator.next(); if (map.get(actionHandler) != null) { resultSet = map.get(actionHandler); break; } } if (resultSet != null && resultSet.size() > 0) { for (Iterator<Response> iterator1 = resultSet.iterator(); iterator1.hasNext(); ) { Response response = iterator1.next(); if (response.getCode().equals(responseCode)) { view.setJsp(response.getViewPath()); } } } return view; } public Map<String, String> responseParameters(Object obj, Method[] getterMethods){ Map<String, String> map = new HashMap<>(); for(int i = 0 ; i < getterMethods.length; i++){ // Method method = } return null; } }