zoukankan      html  css  js  c++  java
  • (八)——WebHandler

      1 package my.tomcat2;
      2 
      3 import org.xml.sax.Attributes;
      4 import org.xml.sax.SAXException;
      5 import org.xml.sax.helpers.DefaultHandler;
      6 
      7 import javax.xml.parsers.ParserConfigurationException;
      8 import javax.xml.parsers.SAXParser;
      9 import javax.xml.parsers.SAXParserFactory;
     10 import java.io.IOException;
     11 import java.util.ArrayList;
     12 import java.util.List;
     13 
     14 /**
     15  * 在解析一个node节点结束标签(例如</name>)时,会触发endElement和characters方法,要在endElement方法内,将currentTag = null .
     16  * 这里是 解析xml 文档所需的一个 处理器,这里不懂的同学可以学习一下 Java 如何解析 xml
     17  */
     18 public class WebHandler extends DefaultHandler {
     19     //这是用来,存放 web.xml 中<servlet></servlet>里的信息的,因为多条信息,所以将其存入 List 中
     20     private List<Entity> entities;
     21     //这是用来,存放 web.xml 中<servlet>...</servlet>里的信息的
     22     private Entity entity;
     23     //这里用来,存放 web.xml 中<servlet-mapping>...</servlet-mapping>里的信息的
     24     private Mapping mapping;
     25     //同理
     26     private List<Mapping> mappings;
     27     //这个是用来在  public void characters(char[] ch, int start, int length),执行这个方法的时候,需要知道他的标签值,因为我们只是要存储<servlet-name>...</servlet-name>
     28     //<servlet-class>...</servlet-class> 和 <servlet-name>...</servlet-name><url-pattern>...</url-pattern>,需要判断,在这里至于为什么 在endElement()是需要将flag = null,请看类之前的注释
     29     private String flag;
     30     //判断是 servlet 还是 servlet-mapping
     31     private boolean isMapping;
     32 
     33     @Override
     34     public void startDocument() throws SAXException {
     35         super.startDocument();
     36         //文档开始,进行初始化
     37         entities = new ArrayList<>();
     38         mappings = new ArrayList<>();
     39         System.out.println("文档开始");
     40     }
     41 
     42     @Override
     43     public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
     44         super.startElement(uri, localName, qName, attributes);
     45         //元素开始,判断
     46         System.out.println("元素开始" + qName);
     47         if(null != qName){
     48             flag = qName;
     49 
     50             if(qName.equals("servlet")){
     51                 isMapping = false;
     52                 entity = new Entity();
     53             }else if(qName.equals("servlet-mapping")){
     54                 isMapping = true;
     55                 mapping = new Mapping();
     56             }
     57         }
     58     }
     59 
     60     @Override
     61     public void characters(char[] ch, int start, int length) throws SAXException {
     62         super.characters(ch, start, length);
     63         //元素
     64         String str = new String(ch, start, length);
     65         //开始 存储 信息了
     66         if(null != flag){
     67             if(isMapping){
     68                 if(flag.equals("servlet-name")){
     69                     mapping.setServletName(str);
     70                 }else if(flag.equals("url-pattern")){
     71                     mapping.getUrlList().add(str);
     72                 }
     73             }
     74             if(!isMapping){
     75                 if(flag.equals("servlet-name")){
     76                     entity.setServletName(str);
     77                 }else if(flag.equals("servlet-class")){
     78                     entity.setServletClass(str);
     79                 }
     80             }
     81         }
     82     }
     83 
     84     @Override
     85     public void endElement(String uri, String localName, String qName) throws SAXException {
     86         super.endElement(uri, localName, qName);
     87         //元素结束,将 对象 add进 List中去
     88         if(null != qName){
     89             if(qName.equals("servlet")){
     90                 entities.add(entity);
     91             }else if(qName.equals("servlet-mapping")){
     92                 mappings.add(mapping);
     93             }
     94         }
     95 
     96         flag = null;
     97     }
     98 
     99     @Override
    100     public void endDocument() throws SAXException {
    101         super.endDocument();
    102         //文档结束
    103     }
    104 
    105 /*    public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
    106         SAXParserFactory saxParserFactory = SAXParserFactory.newInstance();
    107         SAXParser saxParser = saxParserFactory.newSAXParser();
    108 
    109         WebHandler webHandler = new WebHandler();
    110         saxParser.parse(Thread.currentThread().getContextClassLoader().getResourceAsStream("web.xml"), webHandler);
    111         System.out.println(webHandler.getEntities());
    112         for(Entity temp : webHandler.getEntities()){
    113             System.out.println(temp.toString());
    114         }
    115     }*/
    116 
    117     //你需要 在 WebApp 中将这里的 List 存入到 它里面的 Map 中去
    118     public List<Entity> getEntities() {
    119         return entities;
    120     }
    121 
    122     public List<Mapping> getMappings() {
    123         return mappings;
    124     }
    125 }
  • 相关阅读:
    habse与Hadoop兼容性问题
    java读取TXT文件(硬核区分编码格式)
    ffmpeg相关用法
    java服务器间http通讯,同时传输文件流和数据,并接收返回的文件流或数据
    js 获取正整数各个位上的数字
    解决Input输入中文重复出现拼音
    为什么 io 包一般以 byte 数组做为处理单位?
    Vue3 + Ts 封装axios
    Vue3 ant design 使用Moment.js日期格式化的实现
    Vue3 NProgress进度条
  • 原文地址:https://www.cnblogs.com/AI-Cobe/p/9606937.html
Copyright © 2011-2022 走看看