• 基于Struts自定义MVC-2


                                                                        自定义MVC        
    数据库:Oracle
    表:User(id,uname,upwd)
    自定义Struts框架

    希望对你们有帮助

    一、定义Action接口
          

    1  import javax.servlet.http.*;
    2 
    3             public interface Action {
    4                 /**
    5                  * 执行方法
    6                  * @return
    7                  */
    8                 String execute(HttpServletRequest request,HttpServletResponse response);
    9             }


    二、根据特定功能实现Action接口(这里用User表添加用户)
                    
          

     1  import javax.servlet.http.HttpServletRequest;
     2         import javax.servlet.http.HttpServletResponse;
     3 
     4         import com.biz.UserBiz;
     5         import com.biz.impl.UserBizImpl;
     6         import com.entity.User;
     7         import com.mystruts.Action;
     8         /**
     9          * 注册Action 完成注册功能  调用业务层  返回页面
    10          * @author Administrator
    11          *
    12          */
    13         public class RegAction implements Action {
    14 
    15             @Override
    16             public String execute(HttpServletRequest request,
    17                     HttpServletResponse response) {
    18                 //获取请求内容
    19                 String uname = request.getParameter("uname");
    20                 String upwd = request.getParameter("upwd");
    21                 //创建User 对象  创建UserBizImpl对象
    22                 User user = new User(uname,upwd);
    23                 UserBiz userBiz = new UserBizImpl();
    24                 if(userBiz.reg(user)){
    25                     request.getSession().setAttribute("login", user);
    26                     return "success";
    27                 }else{
    28                     request.getSession().setAttribute("msg", "注册失败!");
    29                     return "input";
    30                 }
    31             }
    32 
    33         }


            
    三、ActionFilter(负责请求的转发,将用户的请求交给相应的action进行处理)
            
           

     1 import java.io.IOException;
     2 
     3         import javax.servlet.Filter;
     4         import javax.servlet.FilterChain;
     5         import javax.servlet.FilterConfig;
     6         import javax.servlet.ServletException;
     7         import javax.servlet.ServletRequest;
     8         import javax.servlet.ServletResponse;
     9         import javax.servlet.http.HttpServletRequest;
    10         import javax.servlet.http.HttpServletResponse;
    11 
    12         import com.action.RegAction;
    13         /**
    14          * ActionFilter  负责请求的转发   将用户的请求交给相应的Action进行处理
    15          * @author Administrator
    16          *
    17          */
    18         public class ActionFilter implements Filter {
    19 
    20             private FilterConfig config;
    21             private ActionMappingManager mappingManager;
    22             
    23             @Override
    24             public void destroy() {
    25                 // TODO Auto-generated method stub
    26 
    27             }
    28 
    29             @Override
    30             public void doFilter(ServletRequest arg0, ServletResponse arg1,
    31                     FilterChain chain) throws IOException, ServletException {
    32                 //强转对象
    33                 HttpServletRequest req = (HttpServletRequest)arg0;
    34                 HttpServletResponse resp = (HttpServletResponse)arg1;
    35                 //获取Action 去执行相应的功能
    36                 ActionMapping actionMapping = getActionMapping(req);
    37                 Action action = ActionManager.createAction(actionMapping.getClassName());
    38                 //调用execute方法执行
    39                 String resultname = null;
    40                 try{
    41                     resultname = action.execute(req, resp);
    42                 }catch(Exception ex){
    43                     ex.printStackTrace();
    44                 }
    45                 String result = actionMapping.getResultMap().get(resultname);
    46                 
    47                 //正常得到处理后的返回值  进行页面跳转
    48                 if(null==result){
    49                     return;
    50                 }
    51                 resp.sendRedirect(result);
    52             }
    53 
    54             @Override
    55             public void init(FilterConfig conf) throws ServletException {
    56                 // TODO Auto-generated method stub
    57                 this.config = conf;
    58                 //获取配置文件
    59                 String[] configFiles = null;
    60                 String configStr = config.getInitParameter("config");
    61                 if(null==configStr || configStr.isEmpty()){
    62                     configFiles = new String[]{"mystruts.xml"};
    63                 }else{
    64                     configFiles = configStr.split(",");
    65                 }
    66                 this.mappingManager = new ActionMappingManager(configFiles);
    67             }
    68             
    69             //得到请求地址  通过请求地址得到对应action   通过request得到请求信息    
    70             public ActionMapping getActionMapping(HttpServletRequest request){
    71                 //获取上URI
    72                 String uri = request.getRequestURI();
    73                 //获取请求的路径
    74                 String contextPath = request.getContextPath();
    75                 //截取获得action路径
    76                 String actionPath = uri.substring(contextPath.length());
    77                 //获取action名称
    78                 String actionName = actionPath.substring(1,actionPath.lastIndexOf('.')).trim();
    79                 
    80                 //获取ActionMapping
    81                 ActionMapping actionMapping = null;
    82                 actionMapping = mappingManager.getActionMappingName(actionName);
    83                 
    84                 return actionMapping;
    85             }
    86             
    87             
    88         }




    四、配置xml文件,保存sction信息
           

     1 <?xml version="1.0" encoding="UTF-8"?>
     2         <!DOCTYPE mystruts SYSTEM "mystruts.dtd">
     3         <mystruts>
     4             <actions>
     5                 <action name="reg" class="com.action.RegAction">
     6                     <result name="success">login.jsp</result>
     7                     <result name="input">index.jsp</result>
     8                 </action>
     9                 <action name="login" class="com.action.LoginAction">
    10                     <result name="success">success.jsp</result>
    11                     <result name="input">login.jsp</result>
    12                 </action>
    13             </actions>
    14         </mystruts>



    五、创建actionMapping对应xml中action的配置
       

     1     import java.util.*;
     2 
     3         public class ActionMapping {
     4             //对应Action名称
     5             private String name;
     6             //对应Action类
     7             private String className;
     8             //对应result结果   result-name result-value
     9             private Map<String,String> resultMap = new HashMap<String, String>();
    10             
    11             public String getName() {
    12                 return name;
    13             }
    14             public void setName(String name) {
    15                 this.name = name;
    16             }
    17             public String getClassName() {
    18                 return className;
    19             }
    20             public void setClassName(String className) {
    21                 this.className = className;
    22             }
    23             public Map<String, String> getResultMap() {
    24                 return resultMap;
    25             }
    26             public void setResultMap(Map<String, String> resultMap) {
    27                 this.resultMap = resultMap;
    28             }
    29             
    30         }


            
    六、创建ActionMappingManager负责读取配置信息
        

      1    import java.io.InputStream;
      2         import java.util.*;
      3 
      4         import org.dom4j.*;
      5         import org.dom4j.io.SAXReader;
      6 
      7         public class ActionMappingManager {
      8             //创建保存所有action的集合
      9             private static Map<String,ActionMapping> actionMappings =  new HashMap<String, ActionMapping>();
     10             
     11             /**
     12              * init方法加载Action配置文件
     13              */
     14             public void init(String configFileName){
     15                 try{
     16                     if(null==configFileName || configFileName.isEmpty()){
     17                         throw new Exception("configFileName为空!");
     18                     }
     19                     //加载配置文件到输入流
     20                     InputStream is = this.getClass().getResourceAsStream("/"+configFileName);
     21                     Document doc = new SAXReader().read(is);
     22                     Element root = doc.getRootElement();
     23                     //找到根节点下的actions节点
     24                     Iterator<Element> actionIt = root.elements("actions").iterator();
     25                     //获取到actions
     26                     Element actions = actionIt.next();
     27                     //获取action
     28                     Iterator<Element> iter = actions.elementIterator("action");
     29                     while(iter.hasNext()){
     30                         Element action =iter.next() ;
     31                         ActionMapping mapping = new ActionMapping();
     32                         //将xml配置文件中读取的action 名称和类存入到actionMapping中
     33                         mapping.setName(action.attributeValue("name"));
     34                         mapping.setClassName(action.attributeValue("class"));
     35                         //将result存入到ActionMapping中
     36                         Iterator<Element> results = action.elementIterator("result");
     37                         while(results.hasNext()){
     38                             Element resultElement = results.next();
     39                             String name = resultElement.attributeValue("name");
     40                             String result = resultElement.getText();
     41                             if(name==null||"".equals(name)){
     42                                 //设置默认结果  默认success
     43                                 name="success";
     44                             }
     45                             mapping.getResultMap().put(name, result);
     46                         }
     47                         actionMappings.put(mapping.getName(), mapping);
     48                     }
     49                 }catch(Exception ex){
     50                     ex.printStackTrace();
     51                 }
     52             }
     53             
     54             /**
     55              * 加载配置文件
     56              * @param configureFileNames
     57              */
     58             public ActionMappingManager(String[] configureFileNames){
     59                 for (String configureFileName : configureFileNames) {
     60                     init(configureFileName);
     61                 }
     62             }
     63             /**
     64              * 根据action名称 获取对应的actionMapping对象
     65              * @param actionName
     66              * @return
     67              */
     68             public ActionMapping getActionMappingName(String actionName){
     69                 if(actionName==null || actionName.isEmpty()){
     70                     return null;
     71                 }
     72                 ActionMapping mapping = this.actionMappings.get(actionName);
     73                 if(mapping==null){
     74                     System.out.println("Mapping为空");
     75                 }
     76                 return mapping;
     77             }
     78 
     79         }
    
    
    
     1  七、创建ActionManager通过反射创建对应的Action
     2           
     3           public class ActionManager {
     4               
     5               public static Action createAction(String className){
     6                   Class clazz = null;
     7                   try {
     8                       clazz = Class.forName(className);
     9                       return (Action)(clazz).newInstance();    
    10                   } catch (ClassNotFoundException e) {
    11                       // TODO Auto-generated catch block
    12                      e.printStackTrace();
    13                  } catch (InstantiationException e) {
    14                       // TODO Auto-generated catch block
    15                       e.printStackTrace();
    16                   } catch (IllegalAccessException e) {
    17                       // TODO Auto-generated catch block
    18                       e.printStackTrace();
    19                  }
    20                  return null;
    21              }
    22              
    23          }
    
    
    
     


            
    八、修改web.xml和ActionFilter完成自定义Controller
            

     1           <filter>
     2             <filter-name>openSessionInView</filter-name>
     3             <filter-class>com.web.OpenSessionInViewFilter</filter-class>
     4           </filter>
     5           <filter-mapping>
     6             <filter-name>openSessionInView</filter-name>
     7             <url-pattern>/*</url-pattern>
     8           </filter-mapping>
     9           <!-- 配置ActionFilter过滤器  -->
    10           <filter>
    11             <filter-name>actionFilter</filter-name>
    12             <filter-class>com.mystruts.ActionFilter</filter-class>
    13             <init-param>
    14                 <param-name>config</param-name>
    15                 <param-value>mystruts.xml</param-value>
    16             </init-param>
    17           </filter>
    18           <filter-mapping>
    19             <filter-name>actionFilter</filter-name>
    20             <url-pattern>*.action</url-pattern>
    21           </filter-mapping>
    作者:JamelAr
    个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
    如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!

    本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
  • 相关阅读:
    基于微信红包插件的原理实现android任何APP自动发送评论(已开源)
    人家为撩妹就鼓捣个网页,我做了个约炮APP(已开源)
    android加固签名工具(源码下载)
    如何优雅的写一篇安利文-以Sugar ORM为例
    写给独立开发兄弟共勉-寂寞是19首诗和2首悲歌
    我开源了一个ios应用,你们拿去随便玩
    android用欢迎界面加载运行环境
    用c#操作Mongodb(附demo)
    sql:除非另外还指定了 TOP 或 FOR XML,否则,ORDER BY 子句在视图、内联函数、派生表、子查询
    怎样阻止Linux服务器执行rm -rf /*命令
  • 原文地址:https://www.cnblogs.com/JamelAr/p/6528866.html
Copyright © 2020-2023  润新知