XML建模看这一篇就够了(下)

简介: XML建模看这一篇就够了(下)

2.拓展案例

为了清晰明了,我将里面的代码进行了修改方便后期校验。

第一步:我们先对xml文件里面的节点进行分析看需要建立几个模型(实体),里面有六个模型分别是WebappModel、ServletModel、ServletnameModel、ServletclassModel、ServletMappingModel、UrlpatternModel。

第二步:分析每个Model里的属性(我们由小到大进行分析)。

UrlpatternModel:因为该标签没有自带属性只有Context文本内容所以只有属性Context。

ServletnameModel:因为该标签没有自带属性只有Context文本内容所以只有属性Context。

ServletMappingModel:因为该标签没有自带属性,也没有Context文本内容,只有两个标签,而url-pattern标签可能存在多个的情况所以用list集合保存,servlet-name标签则是用ServletnameModel实体。属性有实体类型ServletnameModel、list集合类型List<UrlpatternModel>。

ServletclassModel:因为该标签没有自带属性只有Context文本内容所以只有属性Context。

ServletModel:因为该标签没有自带属性,也没有Context文本内容,只有两个标签,所以属性有实体类型ServletnameModel、实体类型ServletclassModel。

WebappModel:因为该标签没有自带属性,也没有Context文本内容,只有两个标签,而这两个标签都有存在多个的可能性所以有属性list集合类型List<ServletModel>、List<ServletmappingModel>。

第三步:编写Model实体和set和get方法,注意set方法添加进去的是实体而不是集合,需要修改。

第四步:模拟工厂,初始化数据,因为webapp标签下有两个子标签,所以解析后需要单独对servlet和servletmapping进行遍历然后将解析内容添加到实体内。

👇👇下面我们直接看代码!!

UrlpatternModel模型

package XW.J2EE.XML03.Work;
/**
 * url-pattern标签实体
 * @author 索隆
 *
 */
public class UrlpatternModel {
  private String Context;
  public String getContext() {
    return Context;
  }
  public void setContext(String context) {
    Context = context;
  }
  @Override
  public String toString() {
    return "UrlpatternModel [Context=" + Context + "]";
  }
}

ServletnameModel模型

package XW.J2EE.XML03.Work;
/**
 * servlet-name标签实体
 * 
 * @author 索隆
 *
 */
public class ServletnameModel {
  private String Context;
  public String getContext() {
    return Context;
  }
  public void setContext(String context) {
    Context = context;
  }
  @Override
  public String toString() {
    return "ServletnameModel [Context=" + Context + "]";
  }
}

ServletMappingModel模型

package XW.J2EE.XML03.Work;
import java.util.ArrayList;
import java.util.List;
/**
 * servlet-mapping标签实体
 * 
 * @author 索隆
 *
 */
public class ServletmappingModel {
  private ServletnameModel servletnameList;
  private List<UrlpatternModel> urlpatternList = new ArrayList<UrlpatternModel>();
  public ServletnameModel getServletnameList() {
    return servletnameList;
  }
  public void setServletnameList(ServletnameModel servletnameList) {
    this.servletnameList = servletnameList;
  }
  public List<UrlpatternModel> getUrlpatternList() {
    return urlpatternList;
  }
  public void setUrlpatternList(UrlpatternModel urlpattern) {
    urlpatternList.add(urlpattern);
  }
}

ServletclassModel模型

package XW.J2EE.XML03.Work;
/**servlet-class标签实体
 * @author 索隆
 *
 */
public class ServletclassModel {
private String Cotext;
public String getCotext() {
  return Cotext;
}
public void setCotext(String cotext) {
  Cotext = cotext;
}
}

ServletModel模型

package XW.J2EE.XML03.Work;
/**servlet标签实体
 * @author 索隆
 *
 */
public class ServletModel {
  private ServletnameModel sssname;
  private ServletclassModel sssclass;
  public ServletnameModel getSname() {
    return sssname;
  }
  public void setSname(ServletnameModel sname) {
    this.sssname = sname;
  }
  public ServletclassModel getSclass() {
    return sssclass;
  }
  public void setSclass(ServletclassModel sclass) {
    this.sssclass = sclass;
  }
}

WebappModel模型

package XW.J2EE.XML03.Work;
import java.util.ArrayList;
import java.util.List;
public class WebappModel {
  private List<ServletModel> servletList = new ArrayList<>();
  private List<ServletmappingModel> servletmappingList = new ArrayList<>();
  public List<ServletModel> getServletList() {
    return servletList;
  }
  public void setServletList(ServletModel servlet) {
    servletList.add(servlet);
  }
  public List<ServletmappingModel> getServletmappingList() {
    return servletmappingList;
  }
  public void setServletmappingList(ServletmappingModel servletmapping) {
    servletmappingList .add(servletmapping);
  }
  @Override
  public String toString() {
    return "WebappModel [servletList=" + servletList + ", servletmappingList=" + servletmappingList + "]";
  }
}

模拟工厂

⑦WebXmlFactory

package XW.J2EE.XML03.Work;
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;
/**
 * web.xml工厂,初始化数据
 * 
 * @author 索隆
 *
 */
public class WebXmlFactory {
  public static WebappModel build(String xmlpath) throws Exception {
    // WebappModel实体
    WebappModel WebappModel = new WebappModel();
    // 获取配置文件并转换成流对象
    InputStream ins = WebXmlFactory.class.getResourceAsStream(xmlpath);
    // 实例化dom4j
    SAXReader sa = new SAXReader();
    // dom4j读取流
    Document read = sa.read(ins);
    // 获取web-app标签下的所有<servlet>标签
    // ServletModel实体
    ServletModel servletModel = new ServletModel();
    List<Element> servletNodes = read.selectNodes("/web-app/servlet");
    for (Element servletNode : servletNodes) {
      // servlet标签下所有servlet-name标签并将cotext内容添加Servletname实体
      List<Element> servletnameNodes = servletNode.selectNodes("servlet-name");
      for (Element servletnameNode : servletnameNodes) {
        // Servletname实体
        ServletnameModel Servletname = new ServletnameModel();
        // System.out.println(servletnameNode.getText());
        Servletname.setContext(servletnameNode.getText());
        // ServletModel添加属性
        servletModel.setSname(Servletname);
      }
      // servlet标签下所有servlet-class标签并将cotext内容添加Servletclass实体
      List<Element> servletclassNodes = servletNode.selectNodes("servlet-class");
      for (Element servletclassNode : servletclassNodes) {
        // Servletclass实体
        ServletclassModel Servletclass = new ServletclassModel();
        // System.out.println(servletclassNode.getText());
        Servletclass.setCotext(servletclassNode.getText());
        // ServletModel添加属性
        servletModel.setSclass(Servletclass);
      }
    }
    // 添加到WebappModel实体
    WebappModel.setServletList(servletModel);
    // --------------------------------------------------------
    // servletmappingModel实体
    ServletmappingModel servletmappingModel = new ServletmappingModel();
    // 获取web-app标签下的所有<servlet-mapping>标签
    List<Element> servletmappingNodes = read.selectNodes("/web-app/servlet-mapping");
    for (Element servletmappingNode : servletmappingNodes) {
      // servlet-mapping标签下所有servlet-name标签并将cotext内容添加Servletname实体
      List<Element> servletnameNodes = servletmappingNode.selectNodes("servlet-name");
      for (Element servletnameNode : servletnameNodes) {
        // Servletname实体
        ServletnameModel Servletname = new ServletnameModel();
        // System.out.println(servletnameNode.getText());
        Servletname.setContext(servletnameNode.getText());
        // 将Servletname实体加入servletmappingModel实体
        servletmappingModel.setServletnameList(Servletname);
      }
      // servlet-mapping标签下所有url-pattern标签并将cotext内容添加Urlpattern实体
      List<Element> urlpatternNodes = servletmappingNode.selectNodes("url-pattern");
      for (Element urlpatternNode : urlpatternNodes) {
        // Urlpattern实体
        UrlpatternModel Urlpattern = new UrlpatternModel();
        // System.out.println(urlpatternNode.getText());
        Urlpattern.setContext(urlpatternNode.getText());
        // 将Urlpattern实体加入servletmappingModel实体
        servletmappingModel.setUrlpatternList(Urlpattern);
      }
    }
    // 添加到WebappModel实体
    WebappModel.setServletmappingList(servletmappingModel);
    return WebappModel;
  }
}

最后我们来测试一下

需求:通过url-pattern读取到servlet-class

package XW.J2EE.XML03.Work;
import java.util.List;
public class Test01 {
  public static void main(String[] args) throws Exception {
    //通过url-pattern读取到servlet-class
    String url="林俊杰的url2";
    System.out.println("传递进来的url________"+url);
    //定义一个servlet-name保存从servlet-mapping找到的servlet-name
    String servletname="";
    WebappModel build = WebXmlFactory.build("web.xml");
    List<ServletmappingModel> servletmappingList = build.getServletmappingList();
    for (ServletmappingModel servletmappingModel : servletmappingList) {
      //通过servletmappingModel拿到UrlpatternModel
      List<UrlpatternModel> urlpatternList = servletmappingModel.getUrlpatternList();
      for (UrlpatternModel urlpatternModel : urlpatternList) {
        //查询指定的url路径找到servlet-name
        //System.out.println(urlpatternModel.getContext());
        if(urlpatternModel.getContext().equals(url)) {
          //找到了输出servlet-name的值
          ServletnameModel servletnameList = servletmappingModel.getServletnameList();
          //添加到定义的变量内
          servletname=servletnameList.getContext();
          System.out.println("servlet-mapping找到的servlet-name________"+servletname);
        }
      }
    }
    //遍历所有的ServletModel
    List<ServletModel> servletList = build.getServletList();
    for (ServletModel servletModel : servletList) {
      //拿到ServletModel下所有ServletnameModel
      ServletnameModel sname = servletModel.getSname();
      //判断servlet-mapping中name和servlet是否一致
      if(sname.getContext().equals(servletname)) {
        ServletclassModel sclass = servletModel.getSclass();
        System.out.println("servlet-class的值________"+sclass.getCotext());
      }
    }
  }
}

打印结果

到此我的分享就结束啦!!

 


相关文章
|
XML Java 数据格式
一.Xml建模之入门
一.Xml建模之入门
62 1
|
XML 设计模式 开发框架
J2EE(xml建模)
J2EE(xml建模)
53 0
|
XML 存储 设计模式
XML系列(三)之 XML建模
XML系列(三)之 XML建模
|
XML 设计模式 开发框架
J2EE之XML建模(超详细)
J2EE之XML建模(超详细)
50 0
|
XML 存储 JSON
XML建模最详细介绍讲解
XML建模最详细介绍讲解
94 0
|
XML 存储 设计模式
XML建模
XML建模
72 0
|
XML 存储 开发框架
J2EE之XML建模
J2EE之XML建模
41 0
|
XML 数据采集 JSON
XML建模
XML建模
52 0
|
XML 存储 Java
XML建模
XML建模
|
11月前
|
XML 存储 设计模式
xml建模
xml建模
50 0