zoukankan      html  css  js  c++  java
  • 轻装上阵,安卓工程师之路---day05(Dom4J & Tomcat)

    01 Java-DOM4J(DOM4J开源组织)-DOM解析XML文件

    解析:是用Java等相关技术将XML文件中有用的信息提取

    出来的过程叫解析。

    解析分为二个大类别

    1. DOMDocument Object Model)类别

    一次性将硬盘中的XML文件加载的内存形成一个倒状的树结构,从根开始从上向下依次遍历,获取有用节点的内容

    2. SAX(Simple Api for Xml)类别

    分多次将硬盘中的XML文件加载的内存中,以事件的方式去解析节点中有用的内容

    目前:

    1. 空间不是问题,问题是时间,所以W3C组织推荐使用DOM技术解析。

    //创建XML文件,无文件则创建;有文件则覆盖

    Document xmlDocument = DocumentHelper.createDocument();

    //将符合条件的字符串转成XML文件

    Document xmlDocument = DocumentHelper.parseText(str);

    //创建dom4j核心解析器

    SAXReader saxReader = new SAXReader();

    //读取硬盘中的xml文件

    Document xmlDocument = saxReader.read(new File("E:/bookstore.xml"));

    //写出到硬盘文件

    XMLWriter xmlWriter = new XMLWriter(new FileWriter("E:\test.xml"));

    xmlWriter.write(document);

    xmlWriter.close();

    Document对象写入XML文件 

    1.文档中全为英文,不设置编码,直接写入的形式.  

    XMLWriter writer = new XMLWriter(new  FileWriter("output.xml"));  

    writer.write(document);  writer.close();

    2.文档中含有中文,设置编码格式写入的形式.

    OutputFormat format = OutputFormat.createPrettyPrint();// 指定XML编码                   

    format.setEncoding("GBK");       

    XMLWriter writer = new XMLWriter(newFileWriter("output.xml"),format);

    writer.write(document);writer.close();

    字符串与XML的转换 

    1.将字符串转化为XML

          String text = "<members> <member>sitinspring</member></members>";

      Document document = DocumentHelper.parseText(text);

    2.将文档或节点的XML转化为字符串.

    类加载器:我们的所有程序文件,都是由类加载器去读取硬盘中的内容,以流的方式加载到JVM中的

    类加载器分为不同的类别,如果是读取我们自已创建的程序文件,始终只是一个类加载器去负责读取

    类加载器不会乱去加载,只会去类目录下加载文件,即在开发工具的默认是src目录下加载

    02 XPATH表达式(//goods[@id='isbn100'])

    XPATH就是一个字符串,不过这个字符串有其特殊的含义,利用其特殊含义能快速定位节点。

    使用XPath必须导入jaxen-1.1-beta-6.jar , dom4jlib文件夹下

    jaxen-1.1-beta-6.jar

    /tv/a/b/c/d表示从根节点开始查询,一直查询到d节点

    XPATH使用方法

    查询节点

    获取所有符合条件的节点

    selectNodes(String xpathExpression) 返回List集合

    获取符合条件的单个节点

    selectSingleNode(String xpathExpression) 返回一个Node对象。

    如果符合条件的节点有多个,那么返回第一个。 

    03 web入门

    WEB应用,就是属于B/S软件结构

    所有的客户端和所有的服务器要通信,必须采用双方认可的规则,即HTTP(超文本传输协议)

    Web应用的特点

    1_服务器响应客户端的是HTML

    2_客户端采用URL来定位全世界唯一的资源

    3_为了便于记忆,不用IP,用域名来对IP进行封装

    4_客户端与服务器都采用HTTP这种应用层的协议,底层是TCP/IP协议

    web网站上有二类资源,一类是动态资源,一类是静态资源,

    静态资源用html/css技术完成,动态资源用servlet/jsp/asp/php技术完成,

    凡是用java技术来开发web应用中的动态资源,统称为JavaWeb

    客户端访问服务器,不管服务器是否有对应的资源,服务器都会给客户端以响应,

    所以响应可分为正确响应和错误响应

    客户端使用URL来访问服务器的资源:以下例如:

    http://www.baidu.com:8080/mail/index.html回车

    http://协议名称,这只是web中最常用的协议,例如:https://ftp://,等等

    www.baidu.com全世界唯一的一个域名,通常一个域名对应着一个唯一的IP地址

    8080表示服务器上的一个资源所占用的端口号,通常是不变的,HTTP协议默认端口号为80

    /mail表示服务器上的一个资源的路径

    /index.html表示服务器上的一个具体资源名称

    学习Web应用之前,为什么要用Web服务器呢?

    因为如果Web服务器,不能将本地资源读取出来,并响应给远程的客户端,

    这时Web服务器相当于一个中介,接收客户端的请求,并做出对应的响应

    我们可以将Web服务器理解为本例的Demo01这么一个网络应用程序

    什么JavaEE规范?

    JavaEE规范表示多个具体技术的统称,例如:ServletJspJavaBeanJDBCJavaMail,。。。。

    04 常见服务器简介

    oracle--WebLogic---适合于大型应用

    ibm-----WebSphere---适合于大型应用

    apache---tomcat---适合于小型应用---java源免费

    启动tomcat服务器后,在浏览器地址栏输入如下URLhttp://127.0.0.1:8080回车

    127.0.0.1是本机IP地址

    localhost是本机域名,在tomcat中默认的虚拟主机名字就叫做localhost

    192.168.32.9局域网中本机IP地址

    提倡用127.0.0.1这个

    05 Tomcat的安装,启动与目录结构

    通过浏览器访问的应用,我们叫web应用,

    这里说的浏览器可以是PC浏览器,也可以是移动设备上的浏览器

    所有的web资源,都应该放在一个目录下保存,该目录我们叫web应用的根目录,也叫网站的根目录

    创建好的web应用,必须将其根目录放到web服务器管理,方可被外界访问,这个过程叫虚拟目录的映射

    06 Tomcat中设置虚拟目录和主机/网站/站点

    <Context 

            docBase="真实web应用根目录所有的位置

    path="/开头的虚拟目录名字" />

    配置虚拟目录

       修改tomcat/conf/server.xml文件

       <Host>

        <Context docBase="E:mail" path="" />

    <Context docBase="E:mail" path="/mail" />

    <Context docBase="E:mail" path="/xx/mail" />

    <Context docBase="E:mail" path="/xx/yy/mail" />

       </Host>

    配置虚拟主机/网站,即tomcat服务器中有一个虚拟的www.baidu.com网站,目前只能供自己访问,不能供外界访问

       修改tomcat/conf/server.xml文件

       <Host name="www.baidu.com"  appBase="E:">

           <Context docBase="E:mail" path="" />

    <Context docBase="E:mail" path="/mail" />

    <Context docBase="E:mail" path="/xx/mail" />

    <Context docBase="E:mail" path="/xx/yy/mail" />

       </Host>

       修改C:WindowsSystem32driversetcHosts文件

       #127.0.0.1     www.baidu.com

       

       最终效果:

       http://www.baidu.com:8080/mail/index.html回车

       http://www.baidu.com:8080/index.html回车

       http://www.baidu.com/index.html回车(HTTP协议默认是80,修改tomcat的端口号为80

       http://www.baidu.com/index.html回车(path=""

       http://www.baidu.com回车(默认欢迎文件)

       www.baidu.com虚拟主机/网站

       /mail虚拟目录

    输入域名,计算机的解析过程

    浏览器先去本地找Hosts文件,将域名解析成ip地址

    如果本地找不到,再去internetdns服务器找域名对应的ip地址

    如果本地找到了,不去internet找了

    07 web应用结构以及在MyEclipse中创建web应用

          

    Dom4j 的重点代码赏析:

    1.dom4j基本使用

    /**

     * 演示使用dom4j如下内容

     * 1)创建一个新的xml文件

     * 2)将一个符合xml文件内容的字符串转成xml文件

     * 3)加载已存在的xml文件到内存,形成一个倒状的树结构,根就是Document对象

     */

    /**

     *  创建一个新的xml文件

     */

    public static void type01() throws Exception {

    //创建一个内存对象Document,它就表示硬盘中xml文件

    Document xmlDocument = DocumentHelper.createDocument();

    //将内存中的对象Document写入到硬盘中,形成一个xml文件

    XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(new File("E:/new.xml")));

    xmlWriter.write(xmlDocument);

    xmlWriter.close();

    }

    /**

     * 将一个符合xml文件内容的字符串转成xml文件

     */

    public static void type02() throws Exception {

    //创建符合xml内容的字符串

    String str = "<root><city>广州</city></root>";

    //将字符串转成document对象

    Document xmlDocument = DocumentHelper.parseText(str);

    //将内存中的document对象输出到硬盘,形成一个xml文件

    XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(new File("E:/new.xml")));

    xmlWriter.write(xmlDocument);

    xmlWriter.close();

    }

    /**

     * 加载已存在的xml文件到内存,形成一个倒状的树结构,根就是Document对象

     */

    public static void type03() throws Exception {

    //创建dom4j核心解析器

    SAXReader saxReader = new SAXReader();

    //读取硬盘中的xml文件

    Document xmlDocument = saxReader.read(new File("E:/bookstore.xml"));

    //判断是否已读取到xml文件

    System.out.println(xmlDocument!=null?"已读取xml文件":"未读取xml文件");

    }

    /**

     * 使用dom4j解析器

     * 1)获取根节点的名字 

     * 2)获取根节点下的直接子节点的个数

     */

    public class Demo02 {

    public static void main(String[] args) throws Exception{

    //创建dom4j解析器对象

    SAXReader saxReader = new SAXReader();

    //创建InputStream对象,指向硬盘的xml文件

    InputStream is = new FileInputStream(new File("E:\bookstore.xml"));

    //通过字节流,加载硬盘中的xml文件到内存

    Document xmlDocument = saxReader.read(is);

    //获取根节点

    Element rootElement = xmlDocument.getRootElement();

    //显示根节点的名字

    System.out.println(rootElement.getName());

    //获取根节点下的直接子节点的个数和名字

    List<Element> list = rootElement.elements("book");

    System.out.println("根节点下有"+list.size()+"直接子节点");

    }

    }

    /**

     * 使用dom4j解析器

     * 1)解析所有book节点属性值

     * 2)解析所有book节点下子节点中的内容

     */

    public class Demo03 {

    public static void main(String[] args) throws Exception{

    //创建dom4j解析器对象

    SAXReader saxReader = new SAXReader();

    //创建InputStream对象,指向硬盘的xml文件

    InputStream is = new FileInputStream(new File("E:\bookstore.xml"));

    //通过字节流,加载硬盘中的xml文件到内存

    Document xmlDocument = saxReader.read(is);

    //获取根节点

    Element rootElement = xmlDocument.getRootElement();

    //获取根节点下所有book子节点所形成的集合

    List<Element> list = rootElement.elements("book");

    //迭代

    for(Element element : list){

    //获取book节点的id属性值

    String id = element.attributeValue("id");

    //分别获取book节点的title/auth/price子节点的内容

    String title = element.element("title").getText().trim();

    String auth = element.element("auth").getText().trim();

    String price = element.element("price").getText().trim();

    //将来我们可以将上述属性值封装到JavaBean对象中的所有属性中,加入到List<JavaBean>集合

    System.out.println(id+":"+title+":"+auth+":"+price);

    System.out.println("------------------------------");

    }

    }

    }

    /**

     * 使用dom4j解析器

     * 1)修改节点的属性值

     * 2)修改节点中的内容

     * 3)将内存中的document对象,写入到硬盘中的xml文件

     */

    public class Demo04 {

    public static void main(String[] args) throws Exception{

    //创建dom4j解析器对象

    SAXReader saxReader = new SAXReader();

    //创建InputStream对象,指向硬盘的xml文件

    InputStream is = 

    Demo04.class.getClassLoader().getResourceAsStream("cn/itcast/android/xml/bookstore.xml");

    //通过字节流,加载硬盘中的xml文件到内存

    Document xmlDocument = saxReader.read(is);

    //获取根节点

    Element rootElement = xmlDocument.getRootElement();

    //获取根节点下所有book子节点所形成的集合

    List<Element> list = rootElement.elements("book");

    //迭代

    for(Element element : list){

    //如果book节点的id属性值是"it201501"的话

    if(element.attributeValue("id").equals("it201501")){

    //修改book节点的id属性值

    element.addAttribute("id","it201601");

    }

    //如果book节点的price子节点的内容为222的话

    if(element.element("price").getText().equals("222")){

    //修改book节点的price子节点内容

    element.element("price").setText("333");

    }

    }

    //上述修改只在内存中,还得将内存中的document对象写入到硬盘的xml文件中

    //紧缩格式:createCompactFormat()

    //优美格式:createPrettyPrint()

    OutputFormat format = OutputFormat.createPrettyPrint();

    OutputStream os = new FileOutputStream(new File("E:/bookstore.xml"));

    XMLWriter xmlWriter = new XMLWriter(os,format);

    xmlWriter.write(xmlDocument);

    xmlWriter.close();

    }

    }

    /**

     * 使用dom4j解析器

     * 1)创建新节点,即Element

     * 2)为节点添加属性和子节点

     * 3)将新节点添加到所有原来节点之后和之前

     */

    public class Demo05 {

    public static void main(String[] args) throws Exception{

    //创建dom4j解析器对象

    SAXReader saxReader = new SAXReader();

    //创建InputStream对象,指向硬盘的xml文件

    Document xmlDocument = saxReader.read(Demo05.class.getClassLoader().getResource("cn/itcast/android/xml/bookstore.xml"));

    //获取根节点

    Element rootElement = xmlDocument.getRootElement();

    //获取根节点下的所有子节点

    List<Element> list = rootElement.elements("book");

    //创建新book节点

    Element newBookElement = DocumentHelper.createElement("book");

    //为新book节点设置属性值 

    newBookElement.addAttribute("id","it201503");

    //为新book节点添加子节点及其内容

    newBookElement.addElement("title").setText("ios编程指南");

    //将新book节点添加到所有book节点之后

    //list.add(newBookElement);

    //将新book节点插入到第一个位置

    list.add(1,newBookElement);

    //document对象输出到硬盘中,形成xml文件

    OutputFormat format = OutputFormat.createPrettyPrint();

    OutputStream os = new FileOutputStream(new File("E:/bookstore.xml"));

    XMLWriter xmlWriter = new XMLWriter(os,format);

    xmlWriter.write(xmlDocument);

    xmlWriter.close();

    }

    }

    XPATH用法

    /**

     * 使用dom4j解析器

     * 传统方式定位d标签

     * XPATH方式定位d标签

     */

    public class Demo06 {

    public static void main(String[] args) throws Exception{

    //创建dom4j解析器对象

    SAXReader saxReader = new SAXReader();

    //创建InputStream对象,指向硬盘的xml文件

    Document xmlDocument = 

    saxReader.read(

    Demo06.class.getClassLoader().getResource("cn/itcast/android/xml/tv.xml"));

    //Element rootElement = xmlDocument.getRootElement();

    //String name = rootElement.element("a").element("b").element("c").element("d").getText().trim();

    //System.out.println(name);

    //System.out.println("----------------------------------");

    //String xpath = "/tv/a/b/c/d";

    //String xpath = "//d";

    //String age = "23";

    //String xpath = "//d[@age='"+age+"']";

    String xpath = "//e[@name='哈哈' and @pass='123']";

    Element element = (Element) xmlDocument.selectSingleNode(xpath);

    //List<Element> list = xmlDocument.selectNodes(xpath);

    if(element!=null){

    String name = element.getText().trim();

    System.out.println(name);

    }else{

    System.out.println("查无此人");

    }

    }

    }

  • 相关阅读:
    AspNetPager分页控件
    Asp.Net MVC 路由表
    自动检测海岸线,生成海浪网格
    斜坡刷子,一种好用的地形编辑方式
    用NVPerfHud4剖析Farcry的绘制过程
    初学BSP,上一些测试数据
    让游戏通过红蓝立体眼镜展现立体效果
    没有贴图拉伸的陡峭悬崖
    刚刚做的Bloom(伪HDR)效果
    近两个礼拜地图编辑器的一些进展
  • 原文地址:https://www.cnblogs.com/canceler/p/4675185.html
Copyright © 2011-2022 走看看