第十五周笔记
XML基础_ Java解析XML 一、XML基础 1.1、 XML是什么? XML (可扩展标记语言)是一种很流行的简单的基于文本的语言来用作应用程序之间的通信模式。 它被认为是传输标准装置和存储数据。JAVA提供了极好的支持和丰富的库来解析,修改或查询XML文档。 XML是一种简单的基于文本的语言,它被设计为储存和运输以纯文本格式的数据。它代表着可扩展标记语言。以下是一些XML的显着 特征。 XML是一种标记语言。 XML是一种标记语言就像HTML-样。 XML标签不是像HTML那样预定义。 可以定义自己的标签,这就是为什么它被称为可扩展的语言。 XML标签被设计成自描述性的。 XML是W3C推荐用于数据存储和传输。 1.2、XML能干什么? 描述数据、存储数据、传输(交换)数据。 优缺点: 优势 以下是XML提供的优势: 技术无关.作为普通文本,XML是技术独立。它可以用于由任何技术进行数据的存储和传输的目的。 人类可读. XML使用简单的文本格式。它是人类可读和可以理解的。
可扩展性-在XML,自定义标签可以创建和很容易使用。 允许验证-使用XSD,DTD和XML结构可以很容易地验证。 缺点 下面是使用XML的缺点: 冗余的语法-通常XML文件中包含大量的重复计算。 冗余-作为一个冗长的语言,XML文件大小增加了传输和存储成本。 1.3、 XML与HTML区别 1、目的不- -样 2、XML被设计用来描述数据,其焦点是数据的内容。 3、HTML被设计用来展示数据,其焦点是数据的外观。 4、HTML可以不关闭标签(即标签可以不成对出现),但XML必须关闭标签(即标签必须成对出现)。 5、HTML中的标签标识文本如何展示,而XML中的标签标识文本是什么含义(什么类型的文本)。
XML文档节点类型 文档(document) 元素(element) 属性(attribute) 文本(PCDATA--parsed character data) 注释(comment) DOCTYPE :主要验证文档内容的正确性 实体(ENTITIES) CDATA(character data) 1.4、XML语法; 1、声明: <?xm] version="1.0" encoding="UTF-8"?> 2、根节点:必须只能有一个根节点 3、标签:标签必须有结束且区分大小写,标签必须顺序嵌套 4、属性:必须引号引起值 5、空格会被保留,HTML空格最多保留一个 6、命名规则:命名必须见名知意 a)名字可包含字母、数字以及其他的字符 b)名字不能以数字或者标点符号开始 c)名字不能以字符"xml”(或者XML、 Xml) 开始 7、名字不能包含空格
8、 不应在XML元素名称中使用":",这是由于它用于命名空间(namespaces) 的保留字。 9、标签优先于属性。 10、XML 命名空间可提供避免元素命名冲突的方法。
CDATA: 字符数据,<! [CDATA[字符数据]]>,字符数据不进行转义
12、 实体: &实体;
1.5、 Xml约束 1.5.1、 XML DTD约束 DTD (DocType Definition文档类型定义)的作用是定义XML文档的合法构建模块。它使用一系列的合法元素来定义文档结构。 用 于约定XML格式。 1、DTD引用方式 1.1、内部<!DOCTYPE根元素[元素声明]>
1.5.2、 XML Schema约束 XML Schema是基于XML的DTD替代者。XML Schema描述XML文档的结构。XML Schema语言也称作XML Schema定,义 (XML Schema Definition, XSD)。+ DTD不是通过XML语法定义文档结构,不能定义数据类型和限制Schema通过XML语法定义文档结构,可以定义数据类型和限制 约定XML格式 定义可出现在文档中的元素 定义可出现在文档中的属性 定义哪个元素是子元素 定义子元素的次序 定义子元素的数目 定义元素是否为空,或者是否可包含文本 定义元素和属性的数据类型 定义元素和属性的默认值以及固定值
1、为何使用Schema Vr XML Schema是DTD的继任者 XML Schema可针对未来的需求进行扩展 XML Schema更完善,功能更强大 XML Schema基于XML编写 XML Schema支持数据类型和限制 XML Schema支持命名空间
二、Java XML教程 1、Java XML解析器 1.1、什么是XML解析? 解析XML是指将通过XML文档访问数据或修改数据的一个操作或方法。 Java库中提供了两种XML解析器: 1、像文档对象模型(Document Object Model, DOM) 解析器这的树型解析器(tree parse),它们将读入的XML文档转换成树结构。 2、像XML简单API (Simple API for XML,SAX) 解析器这样的流机制解析器(streaming parser),它们在读入XML文档时生成相应的事件。 1.2、XML解析器是什么? XML解析器提供方法来访问或修改XML文档中的数据。Java提供 了多种选择来解析XML文档。以下是各种类型解析器其通常用于解析 XML文档。 Dom解析器-解析通过加载该文件的全部内容,并创建其完整分级树中存储的文件。 SAX解析器-解析基于事件触发器的文档。不完整(部分)的文件加载到存储器中。 JDOM解析器-解析以类似的方式,以DOM解析器但更简单的方法的文档。 StAX解析器-解析以类似的方式,以SAX解析器但在更高效的方式的文档。 XPath解析器-解析基于表达式XML并广泛选择使用XSLT。 DOM4]解析器- Java库来解析XML, XPath和使用Java集合框架XSLT, 为DOM, SAX和JAXP的支持。 6、Java DOM4]解析器 优势 DOM4]使Java开发的灵活性和XML解析代码易于维护。它是轻量级的,快速的API。
DOM4j类 DOM制定义了几个Java类。以下是最常见的类: 类 说明 Document:表示整个XML文档。文档Document对象是通常被称为DOM树。 Element: 表示一个XML元素。Element对象有方法来操作其子元素, 它的文本,属性和名称空间。 Attribute: 表示元素的属性。属性有方法来获取和设置属性的值。它有父节点和属性类型。 Node : 代表元素,属性或处理指令
Document提供了获取根元素的方法:Element getRootElement()
而element的每一个实例用于表示当前xml文件的一个元素(一对标签),它提供了获取
其元素相关的方法:
获取当前标签的名字:String getName()
获取当前标签中间的文本:String getText()
获取当前标签下指定名字的子标签:Element element(String name)
获取当前标签下的所有子标签:List elements()
获取当前标签下指定名字的子标签:List elements(String name)
获取当前标签下指定名字标签的属性:Attribute attribute(String name)
Attribute的每一个实例表示一个属性,它有两个方法:
获取属性名:String getName()
获取属性值:String getValue()
一、设计模式的分类
总体来说设计模式分为三大类:
创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。
其实还有两类:并发型模式和线程池模式。
二、设计模式的六大原则
1、开闭原则(Open Close Principle)
开闭原则就是说对扩展开放,对修改关闭。在程序需要进行拓展的时候,不能去修改原有的代码,实现一个热插拔的效果。所以一句话概括就是:为了使程序的扩展性好,易于维护和升级。想要达到这样的效果,我们需要使用接口和抽象类,后面的具体设计中我们会提到这点。
2、里氏代换原则(Liskov Substitution Principle)
里氏代换原则(Liskov Substitution Principle LSP)面向对象设计的基本原则之一。 里氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。—— From Baidu 百科
3、依赖倒转原则(Dependence Inversion Principle)
这个是开闭原则的基础,具体内容:针对接口编程,依赖于抽象而不依赖于具体。
4、接口隔离原则(Interface Segregation Principle)
这个原则的意思是:使用多个隔离的接口,比使用单个接口要好。还是一个降低类之间的耦合度的意思,从这儿我们看出,其实设计模式就是一个软件的设计思想,从大型软件架构出发,为了升级和维护方便。所以上文中多次出现:降低依赖,降低耦合。
5、迪米特法则(最少知道原则)(Demeter Principle)
为什么叫最少知道原则,就是说:一个实体应当尽量少的与其他实体之间发生相互作用,使得系统功能模块相对独立。
6、合成复用原则(Composite Reuse Principle)
原则是尽量使用合成/聚合的方式,而不是使用继承。
三、Java的23中设计模式
从这一块开始,我们详细介绍Java中23种设计模式的概念,应用场景等情况,并结合他们的特点及设计模式的原则进行分析。
1、工厂方法模式(Factory Method)
工厂方法模式分为三种:
1、普通工厂模式,就是建立一个工厂类,对实现了同一接口的一些类进行实例的创建。
2、多个工厂方法模式,是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。
3、静态工厂方法模式,将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。
一、HTTP基础
1、web 交互的基本流程
客户端根据用户输入的地址信息请求服务器,服务器在接收到用户的请求后进行处理,然后将处理结果响应给客户端,客户端将响应结果展示给用户。 专业术语: 请求:客户端根据用户地址信息将数据发送给服务器的过程 响应:服务器将请求的处理结果发送给浏览器的过程
问题: 客户端也就是浏览器的版本是有很多的,服务器的版本也是有很多的,如何实现不同版本的浏览器和不同版本的服务器之间的数据交互呢? 解决: 规范浏览器和服务器的数据交互的格式。 实现: HTTP 协议
2、HTTP 的概念和介绍
概念: 超文本传输协议(Hyper Text Transfer Protocol)
作用: 规范了浏览器和服务器的数据交互
特点: 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有 GET、HEAD、POST。每种方法规定了客 户与服务器联系的类型不同。由于 HTTP 协议简单,使得 HTTP 服务器的程序规模小,因而通信速度很快 灵活:HTTP 允许传输任意类型的数据对象。正在传输的类型由Content-Type 加以标记。 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这 种方式可以节省传输时间。 无状态:HTTP 协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信 息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。支持 B/S 及 C/S 模式。HTTP1.1 版本后支持可持续连接
3、HTTP 的交互流程:
HTTP 的交互流程一般分为四个步骤(一次完整的请求): 步骤一: 客户端和服务器端建立连接 步骤二: 客户端发送请求数据到服务器端(HTTP 协议) 步骤三: 服务器端接收到请求后,进行处理,然后将处理结果响应客户端(HTTP 协议) 步骤四: 关闭客户端和服务器端的连接(HTTP1.1 后不会立即关闭)
4、HTTP 协议之请求格式
请求格式的结构: 请求头:请求方式、请求的地址和 HTTP 协议版本 请求行:消息报头,一般用来说明客户端要使用的一些附加信息 空行: 位于请求行和请求数据之间,空行是必须的。 请求数据:非必须。
注意: 一张网页的内容是极其丰富的,浏览器会遵循HTTP 请求的格式将有效数据发送给服务器。
5、HTTP 协议之请求方式
根据 HTTP 标准,HTTP 请求可以使用多种请求方法。HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。HTTP1.1 新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和CONNECT 方法。
get 和 post 请求方式的区别: get 请求方式: 请求数据会以?的形式隔开拼接在请求头中,不安全,没有请求实体部分。HTTP 协议虽然没有规定请求数据的大小,但是浏览 器对 URL 的长度是有限制的,所以 get 请求不能携带大量的数据。
post 请求方式: 请求数据在请求实体中进行发送,在 URL 中看不到具体的请求数据,安全。适合数据量大的数据发送。
6、HTTP 协议之响应
响应格式的结构: 响应行(状态行):HTTP 版本、状态码、状态消息 响应头:消息报头,客户端使用的附加信息 空行:响应头和响应实体之间的,必须的。 响应实体:正文,服务器返回给浏览器的信息
常见状态码: 200 OK //客户端请求成功 400 Bad Request //客户端请求有语法错误,不能被服务器所理解 401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate 报头域一起使用 403 Forbidden //服务器收到请求,但是拒绝提供服务 404 Not Found //请求资源不存在,eg:输入了错误的 URL 500 Internal Server Error //服务器发生不可预期的错误 503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常