Xml与dom4j

今日目标

       编写xml存放任意内容

       通过dtd写xml

       通过Schema写xml

       通过dom4j解析xml

       会使用反射对类、方法、构造进行相应操作

第一章  模拟servlet执行

1.1案例说明

通过浏览器发送请求-》服务器解析请求参数-》服务器处理请求-》结果返回到浏览器

1.2相关技术

     为了灵活实现的不同路径(/hello)执行不同资源(HelloMyservlet)我们需要使用xml进行配置;为了限定xml的内容,我们需要用xml约束;为了获得xml的内容,我们需要dom4j进行解析

1.2.1xml

1.2.1.1什么是xml

     Xml全称是ExtensibleMarkup Language,意思是可扩展的标记原因。Xml的语法上和html比较相似,但xml的标签可以由用户自己定义。

1.2.1.2常见应用

     用于做配置文件

1.2.1.3 Xml的语法

     文档声明

<?xml version=”1.0”encoding=”utf-8”?>

1.      必须<?xml version=”” ?>

2.      文档声明必须从文档的0行0列开始

3.      文档声明只有三个属性:

a)        Version:指定xml的版本 必选

b)       Encoding:制定文档的编码 可选

元素elemet

<servlet>

1.      元素是xml的重要一部分

2.      普通元素的结构开始标签。元素体,结束标签组成

3.      元素体:可以是元素,也可以是文本

4.      空元素:空元素只有开始标签,没有结束标签,但元素必须自己闭合,

5.      元素命名:

a)        区分大小写

b)       不能使用空格,不能使用冒号

c)        不建议以xml开头

6.      格式良好的xml文档,必须只有一个根元素。

属性

1.      属性的定义格式:属性名=属性值

2.      一个元素可以有0-n个属性

3.      属性名不能用空格、冒号等特殊祖父,且必须以字母开头

注释

与HTML相同,<!--    -->

转义字符

CDATA区

<![CDATA[

         //任意内容

]]>

 

1.2.2 DTD约束

常见的xml约束有:DTD、Schema

1.2.2.1 什么是DTD

DTD(Document Type Definition),文档类型定义,用来约束XML文档。

1.2.2.2DTD的要求

看懂DTD文档编写相应的XML(常见的有web.xml struts.xml …)

1.2.3 Schema约束

1.2.4 Xml的解析

解析方式有三种:

Dom解析:扫描整个xml文档,生成一个树形的数据结构对象。耗内存。

Sax 解析:逐行扫描解析,不好不太好修改xml

PULL解析:类似与SAX解析

解析器:

常见的解析开发包:

1.      JASP:sum公司的

2.      JDom:dom4j兄弟

3.      Jsop:

4.      Dom4j:前身是JDom

1.2.4.1 Dom4j的使用

1.导包

2.三个对象:

3.举例

                   //得到解析器

                   SAXReaderreader = new SAXReader();

                   Documentdoc;

           //得到document对象

doc =reader.read("src/cn/itcast/web/servlet/web.xml");

                    //得到根元素

                    ElementrootElement = doc.getRootElement();

                    //得到根元素的子元素集合中标签名为“servlet”所有元素

                    List<Element>serList = rootElement.elements("servlet");

                    //遍历“servlet”元素集合

                    for(Element serv : serList) {

                             //得到名为“servlet-name”元素集合

                             List<Element>classnameElements = serv.elements("servlet-class");

//遍历“servlet-name”元素集合

                             for(Element classnameElement : classnameElements) {

                                       //得到”servlet-name”元素的文本值

                                       Stringclassname = classnameElement.getText();

                                       Classclazz = Class.forName(classname);

                                       Objectobj = clazz.newInstance();

                                       if(obj instanceof IMyServlet) {

                                                IMyServletmyservlet = (IMyServlet) obj;

                                                myservlet.init();

                                                myservlet.service();

                                                myservlet.destory();

                                       }else {

                                                thrownew ClassCastException(classname);

                                       }

                             }


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值