这个框架包括四个类ActionServlet,ActionConfig,AcationMapping,Actionforword和一个接口Action。其web.xml的配置如下
<?xml version="1.0" encoding="UTF-8" ?> - <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> - <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>ActionServlet</servlet-name> <servlet-class>com.controller.ActionServlet</servlet-class> - <init-param> <param-name>config</param-name> <param-value>mvc-config.xml</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> - <servlet-mapping> <servlet-name>ActionServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>
public class ActionConfig { Object action; String method="execute"; public Object getAction() { return action; } public void setAction(Object action) { this.action = action; } public String getMethod() { return method; } public void setMethod(String method) { this.method = method; } public ActionConfig() { super(); } public ActionConfig(Object action) { super(); this.action = action; } public ActionConfig(Object action, String mehtod) { this(action); this.method = mehtod; } }
import java.util.Hashtable; import java.util.Iterator; import java.util.List; import org.jdom.Document; import org.jdom.Element; import org.jdom.input.SAXBuilder; public class ActionMapping { static Hashtable<String, ActionConfig> actionMapping = new Hashtable<String, ActionConfig>(); public static void putAction(String path, ActionConfig action) { actionMapping.put(path, action); } public static ActionConfig getAction(String path) { return actionMapping.get(path); } public static void loadMapping(String filepath) { SAXBuilder sax = new SAXBuilder(); try { Document doc = sax.build(filepath); Element root = doc.getRootElement(); List list = root.getChildren(); for (Object object : list) { Element e = (Element) object; String path = e.getAttributeValue("path"); String clazz = e.getAttributeValue("class"); String method = e.getAttributeValue("method"); Object obj = Class.forName(clazz).newInstance(); ActionConfig ac = new ActionConfig(); if (method != null && method.length() != 0) { ac.setMethod(method); } else { method = "execute"; } ActionMapping.putAction(path, ac); System.out.println(clazz+"的"+method+"方法正在初始化......"); } } catch (Exception e) { // TODO: handle exception } } private static String getAttributeValue(String string) { // TODO Auto-generated method stub return null; } }
public class ActionForward { String url; boolean isDirect=false; public boolean isDirect() { return isDirect; } public void setDirect(boolean isDirect) { this.isDirect = isDirect; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public ActionForward() { super(); } public ActionForward(String url) { super(); this.url=url; } public ActionForward(String url,boolean isDirect) { this(url); this.isDirect=isDirect; } }
import java.io.IOException; import java.io.PrintWriter; import java.lang.reflect.Method; import java.lang.reflect.InvocationTargetException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.controller.ActionForward; public class ActionServlet extends HttpServlet { public ActionServlet() { super(); } public void destroy() { super.destroy(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } private void doProcessor(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { try { String path =request.getServletPath(); if (path.indexOf(".")!=-1) { path=path.substring(0,path.indexOf(".")); } ActionConfig action = ActionMapping.getAction(path); if (action==null) { response.sendError(404,"action没有映射"); return; } Object targer= action.getAction(); Class targerclass = targer.getClass(); String methodName = action.getMethod(); Class[] argsType=new Class[]{HttpServletRequest.class,HttpServletResponse.class}; Method method = targerclass.getMethod(methodName, argsType); Object result=method.invoke(targer, new Object[]{request,response}); ActionForward af=(ActionForward) result; if (af!=null && af.getUrl()!=null && af.getUrl().length()!=0) { if (af.isDirect()) { response.sendRedirect(request.getContextPath()+af.getUrl()); } else { request.getRequestDispatcher(af.getUrl()).forward(request, response); } } } catch (Exception e) { // TODO: handle exception } } public void init() throws ServletException { // Put your code here } }
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.controller.ActionForward; public interface Action { public ActionForward execute(HttpServletRequest request,HttpServletResponse response); }
<mvc> <action path="" class="" method=""/> </mvc>