mvc框架

6人阅读 评论(0) 收藏 举报

            //Action

package org.accp.mvcch2.framework;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public interface Action {

String SUCCESS="success";
String FAILURE="failure";
String INPUT = "input";
String MESSAGE = "message";

public String execute(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException ;

}

             //ActionManager

package org.accp.mvcch2.framework;

public class ActionManager {

public static Action createAction(String className) {
  try {
   return (Action) loadClass(className).newInstance();
  } catch (InstantiationException e) {
   e.printStackTrace();
  } catch (IllegalAccessException e) {
   e.printStackTrace();
  }
  return null;
}


public static Class loadClass(String className) {
  Class clazz = null;
  try {
   clazz = Thread.currentThread().getContextClassLoader().loadClass(
     className);
  } catch (ClassNotFoundException e) {
   e.printStackTrace();
  }
  if (clazz == null) {
   try {
    clazz = Class.forName(className);
   } catch (ClassNotFoundException e) {
    e.printStackTrace();
   } catch (Exception e) {
    e.printStackTrace();
   }
  }
  return clazz;
}
}

//ActionMapping

package org.accp.mvcch2.framework;

/**封装Action的映射信息*/
public class ActionMapping {

private String name;
private String className;
private java.util.Map<String,String> resultMap = new java.util.HashMap<String, String>();
public String getName() {
  return name;
}
public void setName(String name) {
  this.name = name;
}
public String getClassName() {
  return className;
}
public void setClassName(String className) {
  this.className = className;
}
public java.util.Map<String, String> getResultMap() {
  return resultMap;
}
public void setResultMap(java.util.Map<String, String> resultMap) {
  this.resultMap = resultMap;
}

}


//ActionMappingManager

package org.accp.mvcch2.framework;

import java.io.InputStream;

import org.apache.log4j.Logger;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.dom4j.tree.DefaultElement;

public class ActionMappingManager {
Logger log = Logger.getLogger(ActionMappingManager.class);

private java.util.Map<String,ActionMapping> actionMappingMap = new java.util.HashMap<String,ActionMapping>();


private void init(String configLocation) throws DocumentException{
  InputStream is = this.getClass().getResourceAsStream("/"+configLocation);
  SAXReader reader = new SAXReader();
  Document doc = reader.read(is);
  java.util.List list =  doc.selectNodes("/mystruts/actions/action");
  for (Object actionItem : list) {
   if (actionItem instanceof DefaultElement){
    Element actionElement = (Element)actionItem;
    String name = actionElement.attribute("name").getValue();
    String className = actionElement.attribute("class").getValue();
    ActionMapping actionMapping = new ActionMapping();
   
    actionMapping.setName(name);
    actionMapping.setClassName(className);
    java.util.Iterator iter =  actionElement.elementIterator("result");
    if (iter!=null){
     while(iter.hasNext()){
      Element resultElement = (Element)iter.next();
      actionMapping.getResultMap().put(resultElement.attributeValue("name"), resultElement.getTextTrim());     
     }
    }
   
    actionMappingMap.put(actionMapping.getName(), actionMapping);
   
   }
  }
}

public ActionMapping getActionMappingByName(String actionName){
  return actionMappingMap.get(actionName);
}

public ActionMappingManager(String configLocation) throws DocumentException {
  // TODO Auto-generated constructor stub
  if (configLocation==null || "".equals(configLocation)){
   throw new RuntimeException("没有配置文件,创建ActionManager失败");
  }
  init(configLocation); 
}

public static void main(String[] args) throws DocumentException {
  ActionMappingManager actionManager = new ActionMappingManager("mystruts.xml");
  ActionMapping actionMapping =  actionManager.getActionMappingByName("login");
 
  for(String key: actionMapping.getResultMap().keySet()){
   System.out.println(key+"="+actionMapping.getResultMap().get(key));
  }
}

}

//ActionServlet

package org.accp.mvcch2.framework;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.accp.mvcch2.web.LoginAction;
import org.apache.log4j.Logger;
import org.dom4j.DocumentException;

public class ActionServlet extends HttpServlet {
Logger log = Logger.getLogger(ActionServlet.class);


private String  configLocation="mystruts.xml";
ActionMappingManager actionMappingManager;



@Override
public void init(ServletConfig config) throws ServletException {
  log.debug("executing init().....");
  if (config.getInitParameter("configLocation")!=null)
   configLocation = config.getInitParameter("configLocation");
  log.debug("config file name is "+configLocation);
  try {
   actionMappingManager = new ActionMappingManager(configLocation);
  } catch (DocumentException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
}

@Override
protected void service(HttpServletRequest arg0, HttpServletResponse arg1)
   throws ServletException, IOException {
  log.debug("start executing service()...");
  log.debug("executing getActionMapping()");
  ActionMapping actioinMapping = getActionMapping(arg0);//根据URI得到ActioinMapping对象
  log.debug("executing getAction()");
  Action action = getAction(actioinMapping);//得到Action对象
  log.debug("executing action.execute()");
  String result = action.execute(arg0, arg1);//执行Action并得到返回值[跳转key]
  log.debug("get forward page");
  String pageurl = actioinMapping.getResultMap().get(result);//得到跳转页面
  log.debug("forward page is "+pageurl);
  arg0.getRequestDispatcher(pageurl).forward(arg0, arg1);
  log.debug("end executing service()...\n\n");
}

private ActionMapping getActionMapping(HttpServletRequest request){
  //获取请求的uri
       String uri = request.getRequestURI();
       //获取上下文路径
       String contextPath = request.getContextPath();
       //截取上下文路径以后的部分
       String actionPath = uri.substring(contextPath.length());
       //获取Action 名称
       String actionName =                
       actionPath.substring(1,actionPath.lastIndexOf('.')).trim();
      
       log.debug("actionName="+actionName);
       Action action = null;
      //添加新功能时在这里添加
//      if("login".equals(actionName)){
//             action = new LoginAction();
//       } else if ("register".equals(actionName)){
//        //action = new RegisterAction();
//       }
      
       //引入ActionMapping之后
       ActionMapping actionMapping = actionMappingManager.getActionMappingByName(actionName);
       return actionMapping;
}

/**根据请求URI确定要构造那个Action实例*/
private Action getAction(ActionMapping actionMapping){     
      
      return ActionManager.createAction(actionMapping.getClassName());
}

}

//自己写的xml文件(mystruts.xml)

<?xml version="1.0" encoding="UTF-8"?>
< !DOCTYPE mystruts[
< !ELEMENT mystruts (actions)>
< !ELEMENT actions (action*)>
< !ELEMENT action (result*)>
< !ATTLIST action
name CDATA #REQUIRED
class CDATA #REQUIRED>
< !ELEMENT result (#PCDATA)>
< !ATTLIST result
name CDATA #IMPLIED
redirect (true|false) "false">
]>
< mystruts>
<actions>
  <action name="login" class="org.accp.mvcch2.web.LoginAction">
   <result name="success" redirect="true">page/manage.jsp</result>
   <result name="input">page/login.jsp</result>
  </action>
  <action name="register" class="org.accp.mvcch2.web.RegAction">
   <result name="success">page/login.jsp</result>
   <result name="input">page/reg.jsp</result>
  </action>   
</actions>
< /mystruts>

//web.xml

<?xml version="1.0" encoding="UTF-8"?>
< web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<welcome-file-list>
  <welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
  <servlet-name>actionServlet</servlet-name>
  <servlet-class>org.accp.mvcch2.framework.ActionServlet</servlet-class>
  <init-param>
   <param-name>configLocation</param-name>
   <param-value>mystruts.xml</param-value>
  </init-param>
</servlet>
<servlet-mapping>
  <servlet-name>actionServlet</servlet-name>
  <url-pattern>*.action</url-pattern>
</servlet-mapping>
< /web-app>

//一个简单的登陆 (使用自定义的mvc)

package org.accp.mvcch2.web;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.accp.mvcch2.entities.User;
import org.accp.mvcch2.framework.Action;

public class LoginAction implements Action {

@Override
public String execute(HttpServletRequest request,
   HttpServletResponse response) throws ServletException, IOException {
  String name = request.getParameter("name");
        String password = request.getParameter("password");
        //业务处理
//        UserBiz ub = new UserBizImpl();
//        User user = ub.login(name, password);
        User user = new User();
        user.setName("admin");
        user.setPassword("admin");
        if (name.equals("admin") && password.equals("admin")){
         request.getSession().setAttribute("login", user);
            return SUCCESS;
        } else{
          request.setAttribute("message", "用户名或密码错误");
             return INPUT;
        }

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值