Java Web总结三

一、dom4j解析器(使用时需要导入dom4j-1.6.1.jar包)

  1、XML解析器有两类,分别是DOM和SAX。DOM一次性将整个XML文档读入内存中,形成一个倒状的树形结构;SAX分多次将整个XML文档读到内存。

  2、Java里解析XML文件的方式如下图所示:

  Java Web总结三

  3、dom4j的使用代码如下:   

Java Web总结三
package com.gnnuit.dom4j;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
import org.junit.Test;

/**
 * 使用Dom4j操作文件的CUD
 * 
 * @author YLY
 * 
 */
public class Demo2 {
    @Test
    public void create() throws Exception {
        Document document = getDocument();
        Element rootElement = document.getRootElement();
        // 取得第一辆汽车
        Element firstElement = (Element) rootElement.elements().get(0);
        // 添加新元素“单价”,并设置文本为30
        firstElement.addElement("单价").setText("30");
        // 将内存中的XML写到硬盘中
        write2xml(document);
    }

    @Test
    public void update() throws Exception {
        Document document = getDocument();
        Element rootElement = document.getRootElement();
        // 获得第一辆汽车
        Element firstElement = (Element) rootElement.elements().get(0);
        // 将第一辆汽车的单价修改为50万
        firstElement.element("单价").setText("50万");
        write2xml(document);
    }

    @Test
    public void delete() throws Exception {
        Document document = getDocument();
        Element rootElement = document.getRootElement();
        // 获得第一辆汽车
        Element firstElement = (Element) rootElement.elements().get(0);
        // 删除第一辆汽车的“单价”元素
        Element firstCarPriceElement = firstElement.element("单价");
        // 删除第一种方法
        // firstElement.remove(firstCarPriceElement);
        // 删除第二种方法
        firstCarPriceElement.getParent().remove(firstCarPriceElement);
        write2xml(document);
    }

    /**
     * 将内存中的XML写到硬盘
     * 
     * @param document
     * @throws FileNotFoundException
     * @throws UnsupportedEncodingException
     * @throws IOException
     */
    private void write2xml(Document document) throws FileNotFoundException,
            UnsupportedEncodingException, IOException {
        OutputStream out = new FileOutputStream(new File(
                "src/com/gnnuit/dom4j/car.xml"));
        OutputFormat format = OutputFormat.createPrettyPrint();
        XMLWriter writer = new XMLWriter(out, format);
        writer.write(document);
        writer.close();
    }

    /**
     * 获取Document对象
     * 
     * @return
     * @throws DocumentException
     */
    private Document getDocument() throws DocumentException {
        SAXReader saxReader = new SAXReader();
        Document document = saxReader.read(new File(
                "src/com/gnnuit/dom4j/car.xml"));
        return document;
    }
}
Java Web总结三

 

  4、基于dom4j的xpath技术。能够在xml文件中快速定位需要的元素。使用XPath时除了需要dom4j-1.6.1.jar包外,还需要导入jaxen-1.1-beta-6.jar包。

  5、SAX解析器:

    1)sun公司提供的一个基于事件的xml解析器。

    2)SAXParser是SAX解析器的核心类,在使用过程中,需要一个SAX处理器,该处理器必须扩展DefaultHandler。

    3)SAX解析器在解析XML文件时,会根据XML文件此时的状态,即开始标签,结束标签,调用SAX处理器对应的方法。

    4)SAX解析器在解析XML文件时,自动导航,无需像dom4j一样,人为导航。

    5)SAX解析器会将空白字符当作一个有效字符对待。

  6、SAX解析器实例:  

Java Web总结三
package com.gnnuit.sax;

import java.io.File;

import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.xml.sax.Attributes;
import org.xml.sax.helpers.DefaultHandler;

public class Demo1 {

    public static void main(String[] args) throws Exception {
        // 创建SAX解析器工厂
        SAXParserFactory factory = SAXParserFactory.newInstance();
        // 创建SAX解析器
        SAXParser parse = factory.newSAXParser();
        // 加载xml文件
        parse.parse(new File("src/com/gnnuit/sax/car.xml"), new MyHandler());
    }
}

// 自定义SAX处理器
class MyHandler extends DefaultHandler {
    public void startDocument() {
        System.out.println("文档开始");
    }

    public void endDocument() {
        System.out.println("文档结束");
    }

    public void startElement(String uri, String localName, String qName,
            Attributes attributes) {
        System.out.println("<" + qName + ">");
    }

    public void endElement(String uri, String localName, String qName) {
        System.out.println("</" + qName + ">");
    }

    public void characters(char[] ch, int start, int length) {
        String content = new String(ch, start, length).trim();
        if (content.length() > 0) {
            System.out.println(content);
        }
    }
}
Java Web总结三

 

   7、简单工厂设计模式

    1)目的就是统一管理访问层的所有Dao,让Service在Dao的处理上相对独立。

    2)引用DaoFactory来管理所有的具体Dao,并采用单例模式限制DaoFactory的个数。

    3)简单工厂设计模式如图所示:

    Java Web总结三

Java Web总结三,布布扣,bubuko.com

Java Web总结三

上一篇:python+selenium+webdriver(1)


下一篇:Vue.js源码解析-Vue初始化流程