zoukankan      html  css  js  c++  java
  • XML建模实列

    XML建模

    建模的由来:

               就是将指定的xml字符串当作对象来操作
               好处在于,只需要调用指定的方法就可以完成预定的字符串获取;

    建模的一个思路:

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

    注:属性为String类型,子元素标签则是map的值,子元素标签的唯一标识则为map的值

       建模分两步:  

               1、以面向对象的编程思想,描述xml资源文件  

               2、将xml文件中内容封装进model实体对象。

        

       实列:

     实列是通过对一个web.xml文件进行建模

     web.xml文件信息

    <?xml version="1.0" encoding="UTF-8"?>
    
    <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>

    分析出xml文件中的属性以及行为,创建Model(模型)对象

      .分析出以下所有对象

    ServletNameModel   (servlet-name)

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

    ServletClassModel   (servlet-class)

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

    ServletUrlpatternModel  (url-pattern)

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

    ServletModel     (servlet)

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

    ServletMappingModel   (servlet-Mapping)

    package com.zking.ServletModel;
    
    import java.util.ArrayList;
    import java.util.List;
    
    import org.w3c.dom.ls.LSInput;
    
    public class ServletMappingModel {
    
        private ServletNameModel servletNameModel;
        private List<ServletUrlPatternModel> servletUrlPatternModels= new ArrayList<>();
        
        public ServletNameModel getServletNameModel() {
            return servletNameModel;
        }
        
        public void pushUrlPatternModel(ServletUrlPatternModel urlPatternModel) {
            servletUrlPatternModels.add(urlPatternModel);
        }
        
        
        public void setServletNameModel(ServletNameModel servletNameModel) {
            this.servletNameModel = servletNameModel;
        }
        
        public List<ServletUrlPatternModel> getServletUrlPatternModels() {
            return servletUrlPatternModels;
        }
        
        
    }

    ServletWebAppModel   (web-app)

    package com.zking.ServletModel;
    
    import java.util.ArrayList;
    import java.util.List;
    
    public class ServletWebAppModel {
    
        private List<ServletModel> servletModels=new ArrayList<>();
        private List<ServletMappingModel> servletMappingModels = new ArrayList<>();
        
        public List<ServletModel> getServletModels() {
            return servletModels;
        }
        
        public List<ServletMappingModel> getServletMappingModels() {
            return servletMappingModels;
        }
        
        public void pushServletModel(ServletModel servletModel) {
            servletModels.add(servletModel);
        }
        
        public void pushServletMappingModel(ServletMappingModel servletMappingModel) {
            servletMappingModels.add(servletMappingModel);
        }
        
        
        
    }

    用的是23种设计模式中的工厂模式,Factory

    package com.zking.ServletModel;
    
    import java.io.InputStream;
    import java.util.List;
    
    import org.dom4j.Document;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    
    public class ServletWebFactory {
    
        
        
        
        public static ServletWebAppModel buildWebAppModel() {
            String xmlPath = "/web.xml";
            return buildWebAppModel(xmlPath);
        }
    
        /**
         * 建模
         * 
         * @param xmlPath
         * @return
         */
        public static ServletWebAppModel buildWebAppModel(String xmlPath) {
            InputStream in = ServletWebFactory.class.getResourceAsStream(xmlPath);
            SAXReader saxReader = new SAXReader();
            ServletWebAppModel webAppModel = new ServletWebAppModel();
            try {
                Document doc = saxReader.read(in);
                /*
                 * 将servlet的标签内容填充进WebApp
                 */
                List<Element> servletEles = doc.selectNodes("/web-app/servlet");
                for (Element servletEle : servletEles) {
                    ServletModel servletModel = new ServletModel();
    
                    /*
                     * 给ServletModel填充xml的内容
                     */
                    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);
                }
    
                /*
                 * 将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) {
                        ServletUrlPatternModel urlPatternModel = new ServletUrlPatternModel();
                        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(ServletWebAppModel webAppModel, String url) {
            String servletClass = "";
            /*
             * 找到浏览器网址对应的servlet-name
             */
            String servletName = "";
            List<ServletMappingModel> servletMappingModels = webAppModel.getServletMappingModels();
            for (ServletMappingModel servletMappingModel : servletMappingModels) {
                List<ServletUrlPatternModel> urlPatternModels = servletMappingModel.getServletUrlPatternModels();
                for (ServletUrlPatternModel 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) {
            ServletWebAppModel webAppModel = ServletWebFactory.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);
            
        }
        
            
        
    }

    运行代码得到结果:

  • 相关阅读:
    Linux下如何查看版本信息
    java单利模式设计
    MIT 2012 分布式课程基础源码解析-底层通讯实现
    MIT 2012分布式课程基础源码解析-事件管理封装
    MIT 2012分布式课程基础源码解析-线程池实现
    MIT 2012分布式课程基础源码解析一-源码概述
    Leetcode按Tag刷题
    网页搜集系统
    c/c++中的各种字符串转换
    gentoo装X服务器时显卡选择
  • 原文地址:https://www.cnblogs.com/ly-0919/p/11005808.html
Copyright © 2011-2022 走看看