定义:
是一种约束语言(同为约束语言的还有schema)
作用:
用来校验XML文件,约束xml配置文件,
检验xml格式。
用处:
一般就用在xml文件中。
引用:
引用有两种方式
1、引用本地dtd (SYSTEM)
<!DOCTYPE persons SYSTEM "路径">
2、引用互联网上的dtd (PUBLIC)
<!DOCTYPE persons PUBLIC "路径">
怎么使用:
这里用一个.xml进行演示,比较直观。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persons>
-<persons>
-<person parent="p2" qq="aaa" sex="男" pid="p1">
<name>张小明</name>
<age>10</age>
-<contact>
<phone>1234567</phone>
</contact>
<br/>
</person>
-<person pid="p2">
<name>张大明</name>
<age>35</age>
-<contact>
<email>123@qq.com</email>
</contact>
</person>
</persons>
1、在xml文件中加入DTD声明
语法:
那么如上面的xml文件,它的根目录就是persons
所以它的声明为:
<!DOCTYPE persons[]>
2、定义元素
语法:
元素的分类如下图:
元素的限制:
元素出现的次数表示:
那么根据上面给出的config.xml就可以写出它的元素(元素写在声明的那个方括号里)
<!DOCTYPE persons[
<!ELEMENT persons (person+)>
<!ELEMENT person (name,age,contact,br?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT contact (phone|email)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT br EMPTY>
]>
3、然后来看属性
语法:
属性的类型:
元素也写在声明里,然后根据上面给出的xml文件,在后面加上属性定义
<!DOCTYPE persons[
<!ELEMENT persons (person+)>
<!ELEMENT person (name,age,contact,br?)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT age (#PCDATA)>
<!ELEMENT contact (phone|email)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT email (#PCDATA)>
<!ELEMENT br EMPTY>
<!ATTLIST person
pid ID #REQUIRED
sex (男|女) "男"
qq CDATA #IMPLIED
parent IDREF #IMPLIED
>
]>
1、做配置
2、数据交互
现数据交互已经被淘汰,一般用json(更加简单,方便)
具体我之前有发过博客举例
XML解析具体举例
定义:
获取数据的一种方式。
作用:
可以解析出xml文件的数据,
获取xml格式中的数据。
用在哪里
解析框架配置文件
怎么用
dom4j
加载文件
查一组(多个节点):selectNodes("action")
查单个(单个节点):selectSingleNode("xxx")
sax解析
具体我之前有发过博客举例
XML建模具体举例
目的:
为了更便捷的操作xml
提高程序性能
怎么用:
以面向对象的思维操作xml
将xml中的元素看成一个对象。
用在哪里:
框架配置文件读写信息的地方
具体我之前有发过博客举例
反射举例
为什么要学习反射
JAVA反射机制是构建框架技术的基础所在。
掌握Java反射机制,能让代码变得更灵活。
反射实例化能实例化未知的对象帮助开发人员处理未知的网络请求(这是对比new实例化反射实例化的优点)
比较大白话描述就是,当你不知道你后面要使用的是个什么类,用反射就可以(像做通用方法,不确定是什么类的时候),而不是像new实例化一样,一定要知道是什么类才可以实例化,反射就比较灵活,可以更好的走通代码。
作用
可以动态的实例化对象,读写属性,调用方法。
重点
首先,反射的一切相关代码都要从获取到类对象开始,获取到对象,才能获取到它的属性,方法之类。
所以怎么获取类对象勒?
其中2,3是我比较常用的
1、Class.forName(类的完整路径名)
2、类名.class
3、对象.getClass()
然后获取到类对象之后呢,就可以开始操作了
具体的操作
实例化对象
1、无参公有的实例化
2、有一个参数的公有构造器实例化
3、有两个参数的公有构造器实例化
4、私有的构造器实例化 重点
调用方法
用途:可以用在自定义mvc的增强子控制器中
1、无参公有的方法调用
2、有一个参数的方法调用
3、私有的方法调用
读写属性
用途:通用的增删改
1、公有的
2、私有的
这个我之前也有写过举例,可移步去我之前的博客看,这里就不再重复了~
自定义标签
目的:
在现有这些标签不能满足我们代码所需的一些要求的时候,这个时候就需要自己去定义了,简单来说就是可以对症下药。
作用
学习jsp自定义标签的目的就是为了敲代码的时候可以更加轻松,减少代码量。
这个我之前也写过具体怎么做,也写得比较详细,可以去康康~
自定义mvc的增删改查
如果要用反射的方法的话
只需要将eclipse里面的datetime对应的字段的类型改成TimeStamp就行。
然后针对输出的TimeStamp的值后面会有一个.0的后缀,在实体类里面加两行代码就行了。