xml建模

目录

一、xml建模

二、工厂建模

三、案例解析

 【案例1】


一、xml建模

常用到:

举例一个XML------config.xml

<config>
        <forward name="failed" path="/reg.jsp" redirect="false" />
        <forward name="success" path="/login.jsp" redirect="true" />
    </action>

    <action path="/loginAction" type="test.LoginAction">
        <forward name="failed" path="/login.jsp" redirect="false" />
        <forward name="success" path="/main.jsp" redirect="true" />
    </action>
</config>

ConfigModel

package com.lucy.model;

import java.util.HashMap;
import java.util.Map;

public class configModel {
        private Map<String,ActionModel> amap=new HashMap<String, ActionModel>();
        //增加action标签对象
        public void push(ActionModel a) {
            amap.put(a.getPath(), a);
        }
    
    public  ActionModel pop(String path) {
        return  amap.get(path);
    }  
}
 

ActionModel

package com.lucy.model;

import java.util.HashMap;
import java.util.Map;

public class ActionModel {
    //    <action path="/regAction" type="test.RegAction">

            private String  path;
            private String type;
            private Map<String, ForwardModel> fmap=new HashMap<String,ForwardModel>();
            public String getPath() {
                return path;
            }
            public void setPath(String path) {
                this.path = path;
            }
            public String getType() {
                return type;
            }
            public void setType(String type) {
                this.type = type;
            }
            //两个行为  增加、查找forwardModel对象
            //将一个新的forward标签对象加入容器
            public  void push(ForwardModel f) {//增加
            fmap.put(f.getName(),f);//加入属性
            }
            //根据属性名查找标签对象
            public ForwardModel pop(String name) {
                return fmap.get(name);
            }  

            
}
 

ForwardModel

package com.lucy.model;

public class ForwardModel {
    //<forward name="success" path="/login.jsp" redirect="true" />
    
        private String  name;
        private String  path;
        private boolean redirect;
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getPath() {
            return path;
        }
        public void setPath(String path) {
            this.path = path;
        }
        public boolean isRedirect() {
            return redirect;
        }
        public void setRedirect(boolean redirect) {
            this.redirect = redirect;
        }
}
 

ConfigModelFactory

public static configModel bulid(String path)throws Exception {
            InputStream in=ConfigModelFactory.class.getResourceAsStream(path);
            SAXReader sr=new SAXReader();
            Document doc=sr.read(in);
            //将actionmodel赋值并且添加configmodel里
        List<Element> actionEles=doc.selectNodes("/config/action");
        configModel  configModel=new configModel();
            for (Element actionEle : actionEles) {
                //实例化action对象
                ActionModel actionModel=new ActionModel();
                //加属性
                actionModel.setPath(actionEle.attributeValue("path"));
                actionModel.setType(actionEle.attributeValue("type"));
//                将forwardmodel赋值并且添加actionmodel里
            List<Element> forwardEles=actionEle.selectNodes("forward");
            for (Element s : forwardEles) {
                ForwardModel forwardModel=new ForwardModel();
                forwardModel.setName(s.attributeValue("name"));
                forwardModel.setPath(s.attributeValue("path"));
//                redirect 赋值并且增加actionModel里
                forwardModel.setRedirect("true".equals(s.attributeValue("redirect")));
                actionModel.push(forwardModel);
            }
                configModel.push(actionModel);//把action标签加进去
            }
            return configModel;
        }
    public static configModel bulid() throws Exception {
            String defaultPath="config.xml";
            return bulid(defaultPath); 
    }


二、工厂建模

23种设计模式之工厂 Factory 模式:
    configModelFactory是用来生产configModel对象的
     生产出来的 configModel对象就包含了config.xml的配置内容
     1.此地生产configModel有配置信息
     2.将对应的配置信息分别加载进行不同的模型对象里 
 

package com.lucy.model;

import java.io.InputStream;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;


public class ConfigModelFactory {
        public static configModel bulid(String path)throws Exception {
            InputStream in=ConfigModelFactory.class.getResourceAsStream(path);
            SAXReader sr=new SAXReader();
            Document doc=sr.read(in);
            //将actionmodel赋值并且添加configmodel里
        List<Element> actionEles=doc.selectNodes("/config/action");
        configModel  configModel=new configModel();
            for (Element actionEle : actionEles) {
                //实例化action对象
                ActionModel actionModel=new ActionModel();
                //加属性
                actionModel.setPath(actionEle.attributeValue("path"));
                actionModel.setType(actionEle.attributeValue("type"));
//                将forwardmodel赋值并且添加actionmodel里
            List<Element> forwardEles=actionEle.selectNodes("forward");
            for (Element s : forwardEles) {
                ForwardModel forwardModel=new ForwardModel();
                forwardModel.setName(s.attributeValue("name"));
                forwardModel.setPath(s.attributeValue("path"));
//                redirect 赋值并且增加actionModel里
                forwardModel.setRedirect("true".equals(s.attributeValue("redirect")));
                actionModel.push(forwardModel);
            }
                configModel.push(actionModel);//把action标签加进去
            }
            return configModel;
        }
    public static configModel bulid() throws Exception {
            String defaultPath="config.xml";
            return bulid(defaultPath); 
    }
    
}
 


三、案例解析

package com.lucy.model;

public class Demo1 {//建模后使用的案例
        
            public static void main(String[] args) throws Exception {

//                configModel configModel=new configModel();
                configModel configModel    =ConfigModelFactory.bulid();
                ActionModel actionModel=configModel.pop("/loginAction");
//                System.out.println(actionModel.getType());
                    
                ForwardModel forwardModel=actionModel.pop("failed");
                System.out.println(forwardModel.getPath());
             
            }
}
 

 效果图;

 【案例1】

web.xml进行建模

<?xml version="1.0" encoding="UTF-8"?>

    <!-- 案例1 对web-xml进行建模, 再写一个servlet,再进行查找  读取到servlet-class的值 -->


<web-app>
  <servlet>
      <servlet-name>jrebelServlet</servlet-name>
      <servlet-class>com.zking.xml.JrebelServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
      <servlet-name>jrebelServlet</servlet-name>
      <url-pattern>/jrebelServlet</url-pattern>
  </servlet-mapping>
  
  <servlet>
      <servlet-name>jrebelServlet2</servlet-name>
      <servlet-class>com.zking.xml.JrebelServlet2</servlet-class>
  </servlet>
  
  <servlet-mapping>
      <servlet-name>jrebelServlet2</servlet-name>
      <url-pattern>/jrebelServlet2</url-pattern>
      <url-pattern>/jrebelServlet3</url-pattern>
  </servlet-mapping>
</web-app>

 【注:UrlPatternModel,ServletClassModel和ServletNameModel 类内容一致】

package com.lucy.zy;

public class ServletNameModel {
            private String context;

            public String getContext() {
                return context;
            }

            public void setContext(String context) {
                this.context = context;
            };
            
    
}
 

package com.lucy.zy;

import java.util.ArrayList;
import java.util.List;

public class ServletMappingModel {
    private ServletNameModel servletNameModel;
    private List<UrlPatternModel> urlPatternModels = new ArrayList<>();
    public ServletNameModel getServletNameModel() {
        return servletNameModel;
    }
    public void setServletNameModel(ServletNameModel servletNameModel) {
        this.servletNameModel = servletNameModel;
    }
    
    public void pushUrlPatternModel(UrlPatternModel urlPatternModel) {
        urlPatternModels.add(urlPatternModel);
    }
    
    public List<UrlPatternModel> getUrlPatternModels() {
        return urlPatternModels;
    
    }
    
    
}
 

package com.lucy.zy;

public class ServletModel {
        
    
    private ServletNameModel servletNameModel ;
    private ServletClassModel servletClassModel;
    public ServletNameModel getServletNameModel() {
        return servletNameModel;
    }
    public void setServletNameModel(ServletNameModel servletNameModel) {
        this.servletNameModel = servletNameModel;
    }
    public ServletClassModel getServletClassModel() {
        return servletClassModel;
    }
    public void setServletClassModel(ServletClassModel servletClassModel) {
        this.servletClassModel = servletClassModel;
    } 
    
    
}
 

package com.lucy.zy;

import java.util.ArrayList;
import java.util.List;

public class WebappModel {

    private List<ServletModel> servletModels = new ArrayList<>();
    private List<ServletMappingModel> servletMappingModels = new ArrayList<>();

    public void pushServletModel(ServletModel servletModel) {
        servletModels.add(servletModel);
    }
    
    public List<ServletModel> getServletModels() {
        return servletModels;
    }
    
    public void pushServletMappingModel(ServletMappingModel servletMappingModel) {
        servletMappingModels.add(servletMappingModel);
    }
    
    public List<ServletMappingModel> getServletMappingModels() {
        return servletMappingModels;
    }
    
}
 

package com.lucy.zy;

import java.io.InputStream;

import java.util.List;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

public class WebAppModelFactory {
    
            public  static  WebappModel buildWebAppModel() {
                String xmlPath="/web.xml";
                return  buildWebAppModel(xmlPath);
        
    }
            public static WebappModel buildWebAppModel(String  xmlPath)  {
                InputStream in =WebAppModelFactory.class.getResourceAsStream(xmlPath);
                SAXReader sr=new SAXReader();
                WebappModel webappmodel=new WebappModel();
            try {
                
                 Document doc=sr.read(in);
                 //把servlet填充到web-app
                    List<Element> servletEles=doc.selectNodes("/web-app/servlet");
                for (Element servletEle : servletEles) {
                    ServletModel servletmodel=new ServletModel();
                    
                    //给servetModel填充xml内容
                Element  servletnameEle=(Element) servletEle.selectSingleNode("servlet-name");
                Element  servletclassEle=(Element) servletEle.selectSingleNode("servlet-class");
                //实例化ServletNameModel    ,ServletClassModel
                ServletNameModel servletnamemodel=new ServletNameModel();
                    ServletClassModel servletClassModel=new ServletClassModel(); 
                    //填充值
                    servletnamemodel.setContext(servletnameEle.getText());
                    servletClassModel.setContext(servletclassEle.getText());
                    //给servletModel赋值
                    servletmodel.setServletNameModel(servletnamemodel); 
                    servletmodel.setServletClassModel(servletClassModel);
                }
//                    将servlet-mapping的标签内填充入webapp 
//                    开始
                    
                    List<Element> servletMappingEles = doc.selectNodes("/web-app/servlet-mapping");
                    for (Element servletMappingEle : servletMappingEles) {
                        ServletMappingModel servletMappingModel = new ServletMappingModel();

                        /*
                         * 给ServletMappingModel填充xml的内容
                         */
                        Element servletNameEle = (Element) servletMappingEle.selectSingleNode("servlet-name");
                        ServletNameModel servletNameModel = new ServletNameModel();
                        servletNameModel.setContext(servletNameEle.getText());
                        servletMappingModel.setServletNameModel(servletNameModel);
                        
                        List<Element> urlPatternEles = servletMappingEle.selectNodes("url-pattern");
                        for (Element urlPatternEle : urlPatternEles) {
                            
                            UrlPatternModel urlPatternModel = new UrlPatternModel();
                            urlPatternModel.setContext(urlPatternEle.getText());
                            servletMappingModel.pushUrlPatternModel(urlPatternModel);
                        }
                        webappmodel.pushServletMappingModel(servletMappingModel);
                    
                    }

                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                return webappmodel;
            }
            
            /**
             * 通过浏览器输入的网址自动找到对应的后台处理类
             * @param webAppModel    建模后的实体类
             * @param url    浏览器访问的网址
             * @return
             */
            public static String getServletClassByUrl(WebappModel webAppModel, String url) {
                String servletClass = "";
                /*
                 * 找到浏览器网址对应的servlet-name
                 */
                String servletName = "";
                List<ServletMappingModel> servletMappingModels = webAppModel.getServletMappingModels();
                for (ServletMappingModel servletMappingModel : servletMappingModels) {
                    List<UrlPatternModel> urlPatternModels = servletMappingModel.getUrlPatternModels();
                    for (UrlPatternModel urlPatternModel : urlPatternModels) {
                        if(url.equals(urlPatternModel.getContext())) {
                            ServletNameModel servletNameModel = servletMappingModel.getServletNameModel();
                            servletName = servletNameModel.getContext();
                        }
                    }
                }
                
                /*
                 * 找到servlet-name对应的后台处理类
                 */
                List<ServletModel> servletModels = webAppModel.getServletModels();
                for (ServletModel servletModel : servletModels) {
                    ServletNameModel servletNameModel = servletModel.getServletNameModel();
                    if(servletName.equals(servletNameModel.getContext())) {
                        ServletClassModel servletClassModel = servletModel.getServletClassModel();
                        servletClass = servletClassModel.getContext();
                    }
                }
                return servletClass;
            }
                
            public static void main(String[] args) {
                WebappModel webAppModel = WebAppModelFactory.buildWebAppModel();
                String res = getServletClassByUrl(webAppModel, "/jrebelServlet");
                String res2 = getServletClassByUrl(webAppModel, "/jrebelServlet2");
                String res3 = getServletClassByUrl(webAppModel, "/jrebelServlet3");
                System.out.println(res);
                System.out.println(res2);
                System.out.println(res3);
                
            }
                    
         
}
 

 ===========================不得转载和抄袭=============================

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值