zoukankan      html  css  js  c++  java
  • Xml解析作业与Xml建模andXml建模作业

      作业:config.xml解析

    1、获取所有action中的type的值

    public static void main(String[] args) throws Exception {
            InputStream in=XmlDemo.class.getResourceAsStream("config.xml");        
            SAXReader sax= new SAXReader();
            Document doc=sax.read(in);
                                //获取所有action中的type的值
            List<Element> stuEles= doc.selectNodes("/config/action");
            for (Element stuEle : stuEles) {
                String type=stuEle.attributeValue("type");
                System.out.println(type);
                    
            }

    2、获取第二个action中的type的值

    List<Element> stuEles= doc.selectNodes("/config/action");
            for (Element stuEle : stuEles) {
                if("/loginAction".equals(stuEle.attributeValue("path"))) {
                    String type=stuEle.attributeValue("type");
                    System.out.println(type);
                }
            }

     3、获取第二个action的所有forward的path

    List<Element> stuEles= doc.selectNodes("/config/action");
            for (Element stuEle : stuEles) {
                if("/loginAction".equals(stuEle.attributeValue("path"))) {
                    List<Element> ford=(List<Element>) stuEle.selectNodes("forward");
                    for (Element element : ford) {
                        String path=element.attributeValue("path");
                        System.out.println(path);
                    }               
                }
            }

    4、获取第二个action的第二个forward的path

    List<Element> stuEles= doc.selectNodes("/config/action");
            for (Element stuEle : stuEles) {
                if("/loginAction".equals(stuEle.attributeValue("path"))) {
                    List<Element> ford=(List<Element>) stuEle.selectNodes("forward");
                    for (Element element : ford) {
                        if("success".equals(element.attributeValue("name"))) {
                        String path=element.attributeValue("path");
                        System.out.println(path);
                        }
                    }
                                    
                }
            }

    Xml建模

    1.什么是Xml建模

                       将XML配置文件中的元素,属性,文本信息 转换成对象的过程叫XML建模

    2.XML建模

                        1.根据XML配置文件元素节点创建元素,节点,实体类
                         ConfigModel ActionModel ForwardModel

                         2.利用dom4j+xpath技术实现XML建模ConfigModelFactory

    2. XML建模类
                          ConfigModel
                          ActionModel
                          ForwardModel
                          ConfigModelFactory

    建模的思路

                         1、分析需要被建模的文件中有那几个对象
                         2、每个对象拥有的行为以及属性
                         3、定义对象从小到大(从里到外)
                         4、通过23种的设计模式中的工厂模式,解析xml生产出指定对象
                         好处:
                                              提高代码的复用性

    4.利用工程模式+dom4j+xpath解析XML配置文件

    Config.xml文件

    <?xml version="1.0" encoding="UTF-8"?>
    <config>
        <!-- action标签:可以饱含0~N个forward标签 path:以/开头的字符串,并且值必须唯一 非空 type:字符串,非空 -->
        <action path="/regAction" type="test.RegAction">
            <!-- forward标签:没有子标签; name:字符串,同一action标签下的forward标签name值不能相同 ; path:以/开头的字符串 
                redirect:只能是false|true,允许空,默认值为false -->
            <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>

    3.使用Map集合存放子节点元素,其中Key为子节点的唯一属性,Value为整个子节点对象。

    定义对象实体类

    package com.zking.model;
    
    public class FowardModel {
    /*
     * 添加节点属性
     */
        private String name;
        private String path;
        private Boolean reairect;
        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 getReairect() {
            return reairect;
        }
        public void setReairect(Boolean reairect) {
            this.reairect = reairect;
        }
    }

    行为及属性 

    package com.zking.model;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class ActionModel {
    
        private String path;
        private String type;
        private Map<String, FowardModel> fmap=new HashMap<>();
        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;
        }
        
        //存放到Map集合
        public void push(FowardModel fowardModel) {
            fmap.put(fowardModel.getName(), fowardModel);
        }
        //获取 返回FowardModel
        public FowardModel pop(String name) {
        return    fmap.get(name);
    
        }
    }
    package com.zking.model;
    
    import java.util.HashMap;
    import java.util.Map;
    
    public class ConfigModel {
    
        private Map<String, ActionModel> amap=new HashMap<>();
        public void push(ActionModel actionModel) {
            amap.put(actionModel.getPath(), actionModel);
        }
        public ActionModel pop(String path) {
            return amap.get(path);
        }
       
    }

    4.利用工程模式+dom4j+xpath解析XML配置文件

    导入dom4j包

    package com.zking.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;
    
    /*
     * 
     * 23设计模式之一:工厂模式   用来将资源文件生产指定的实体类
     * 处理Java中所遇到的一些特定的一些问题
     * 
     * 好处:
     *     提高代码复用性
     */
    public class ConfigModelFactory {
    
        public static ConfigModel build() throws DocumentException {
            return ConfigModel("config.xml");
        }
    /*
     * 生产出有类容的实体类ConfigModel
     */
        private static ConfigModel ConfigModel(String xmlPath) throws DocumentException {
            // TODO Auto-generated method stub
            // 创建ConfigModel对象
            ConfigModel    configModel=new ConfigModel();
            ActionModel actionModel=null;
            FowardModel fowardModel=null;
            InputStream in = ConfigModelFactory.class.getResourceAsStream(xmlPath);
            SAXReader saxRead=new SAXReader();
            Document doc = saxRead.read(in);
            
            List<Element> actionEles = doc.selectNodes("/config/action");
            for (Element actionEle : actionEles) {
                actionModel=new ActionModel();
                
                //给actionModel对象填充Xml中的action标签的类容
                actionModel.setPath(actionEle.attributeValue("path"));
                actionModel.setType(actionEle.attributeValue("type"));
                
                List<Element> fowardEles = actionEle.selectNodes("foward");
                for (Element fowardEle : fowardEles) {
                    fowardModel=new FowardModel();
                    
                    //给fowardModel对象填充Xml中的foward标签的类容
                    fowardModel.setName(fowardEle.attributeValue("name"));
                    fowardModel.setPath(fowardEle.attributeValue("path"));
                    fowardModel.setReairect(!"false".equals(fowardEle.attributeValue("redirect")));
                    //<forward name="failed" path="/login.jsp" redirect="false" />
    //               redirect默认true 重定向
                    //只有false才是转发
                    //fowardEle.attributeValue("redirect")拿到是xml中你所填的值
                    //不填  重定向  !"false".equals(fowardEle.attributeValue("redirect")) false
                    //填 true 重定向   !"false".equals(fowardEle.attributeValue("redirect")) false
                    //填false 转发   !"false".equals(fowardEle.attributeValue("redirect")) true
                    
                    
                    actionModel.push(fowardModel);
                }
                
                configModel.push(actionModel);
            }
            return configModel;
        }
        public static void main(String[] args) throws DocumentException {
            ConfigModel configModel=ConfigModelFactory.build();
            ActionModel actionModel= configModel.pop("/loginAction");
            System.out.println(actionModel.getType());
        }
        
    }

    控制台输入结果:

    Xml建模作业

    ServletClassModel

    package com.zking.xml.webModel;
    
    public class ServletClassModel {
        private String context;
    
        public String getContext() {
            return context;
        }
    
        public void setContext(String context) {
            this.context = context;
        }
    }

    ServletMappingModel

    package com.zking.xml.webModel;
    
    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;
        }
    }

    ServletModel

    package com.zking.xml.webModel;
    
    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;
        }
    
    }

    ServletNameModel

    package com.zking.xml.webModel;
    
    public class ServletNameModel {
        private String context;
    
        public String getContext() {
            return context;
        }
    
        public void setContext(String context) {
            this.context = context;
        }
    }

    UrlPatternModel 

    package com.zking.xml.webModel;
    
    public class UrlPatternModel {
        private String context;
    
        public String getContext() {
            return context;
        }
    
        public void setContext(String context) {
            this.context = context;
        }
    
    }

    WebAppModel

    package com.zking.xml.webModel;
    
    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;
        }
    
    }

    WebAppModelFactory

    package com.zking.xml.webModel;
    
    import java.io.InputStream;
    import java.util.List;
    
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.Node;
    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 saxReader = new SAXReader();
            WebAppModel webAppModel = new WebAppModel();
            try {
                Document doc = saxReader.read(in);
                
                List<Element> servletEles = doc.selectNodes("/web-app/servlet");
                for (Element servletEle : servletEles) {
                    ServletModel servletModel = new ServletModel();
    
                    
                    Element servletNameEle = (Element) servletEle.selectSingleNode("servlet-name");
                    Element servletClassEle = (Element) servletEle.selectSingleNode("servlet-class");
                    ServletNameModel servletNameModel = new ServletNameModel();
                    ServletClassModel servletClassModel = new ServletClassModel();
                    servletNameModel.setContext(servletNameEle.getText());
                    servletClassModel.setContext(servletClassEle.getText());
                    
                    servletModel.setServletNameModel(servletNameModel);
                    servletModel.setServletClassModel(servletClassModel);
    
                    webAppModel.pushServletModel(servletModel);
                }
    
                
                List<Element> servletMappingEles = doc.selectNodes("/web-app/servlet-mapping");
                for (Element servletMappingEle : servletMappingEles) {
                    ServletMappingModel servletMappingModel = new ServletMappingModel();
    
                    
                    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;
        }
        
    
        public static String getServletClassByUrl(WebAppModel webAppModel, String url) {
            String servletClass = "";
        
            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();
                    }
                }
            }
            
    
            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);
            
        }
    }

                                                                                                                                                                                                                                                                                                     2019-06-1119:22:01

  • 相关阅读:
    Assetbundle资源单一打包,以及加载方法
    VS2010 Chromium编译
    一道思考题
    Windbg源码调试
    C++ static_cast dynamic_cast reinterpret_cast const_cast转换
    条件断点设置
    FFmpeg 2.0编译配置
    error LNK2001: 无法解析的外部符号 _IID_IDirectDraw7
    Windbg常用命令
    DDraw绘图
  • 原文地址:https://www.cnblogs.com/xcn123/p/11005515.html
Copyright © 2011-2022 走看看