java笔记

一、Dom4j
dom4j是一个Java的XML API,类似于jdom,用来读写XML文件的。dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件,可以在SourceForge上找到它。在IBM developerWorks上面可以找到一篇文章,对主流的Java XML API进行的性能、功能和易用性的评测,dom4j无论在那个方面都是非常出色的。如今你可以看到越来越多的Java软件都在使用dom4j来读写 XML,特别值得一提的是连Sun的JAXM也在用dom4j。这是必须使用的jar包,Hibernate用它来读写配置文件dom4j需要导入 dom4j-full.jar包.
二、Dom4j家庭成员

主要API都在org.dom4j这个包里定义:

1.Attribute Attribute定义了XML的属性
2.Branch Branch为能够包含子节点的节点如XML元素(Element)和文档(Docuemnts)定义了一个公共的行为,
3.CDATA CDATA 定义了XML CDATA 区域
4.CharacterData CharacterData是一个标识借口,标识基于字符的节点。如CDATA,Comment, Text.

  1. Comment Comment 定义了XML注释的行为
  2. Document 定义了XML文档
    7.DocumentType DocumentType 定义XML DOCTYPE声明
  3. Element Element定义XML 元素
    9. ElementHandler ElementHandler定义了 Element 对象的处理器
  4. ElementPath 被 ElementHandler 使用,用于取得当前正在处理的路径层次信息
  5. Entity Entity定义 XML entity
  6. Node Node为所有的dom4j中XML节点定义了多态行为
  7. NodeFilter NodeFilter 定义了在dom4j节点中产生的一个滤镜或谓词的行为(predicate)
  8. ProcessingInstruction ProcessingInstruction 定义 XML 处理指令.
  9. Text Text 定义XML 文本节点.
  10. Visitor Visitor 用于实现Visitor模式.
  11. XPath XPath 在分析一个字符串后会提供一个XPath 表达式
    三、DOM4J 类 DOM4J定义了几个Java类。以下是最常见的类说明
    Document 表示整个XML文档。文档Document对象是通常被称为DOM树。
    Element 表示一个XML元素。 Element对象有方法来操作其子元素,它的文本,属性和名称空间。
    Attribute 表示元素的属性。属性有方法来获取和设置属性的值。它有父节点和属性类型。
    Node 代表元素,属性或处理指令
    常见DOM4J的方法 当使用DOM4J,还有经常用到的几种方法:
    方法 方法说明
    SAXReader.read(xmlSource)() 构建XML源的DOM4J文档。
    Document.getRootElement() 得到的XML的根元素。
    Element.node(index) 获得在元素特定索引XML节点。
    Element.attributes() 获取一个元素的所有属性。
    Node.valueOf(@Name) 得到元件的给定名称的属性的值。

四、 Dom4j的使用

1.利用dom4j创建一个XML文件:
    public class CreateXML {  
    public static void main(String[] args) {  
            XMLWriter writer = null;  
            try {  
                // 1.document构建器  
                Document doc = DocumentHelper.createDocument();  
                // 2.添加元素(根)  
                Element students = doc.addElement("students");  
                Element student1 = students.addElement("student");  
                // 添加属性;  
                student1.addAttribute("stuno", "s001");  
                // 添加子元素  
                student1.addElement("stuname").setText("刘光蓝");  
                student1.addElement("stusex").setText("男");  
                student1.addElement("stuage").setText("25");  
                //设置输出格式  
                OutputFormat format=OutputFormat.createPrettyPrint();  
                format.setEncoding("UTF-8");  
                writer = new XMLWriter(new FileWrite("d:/student.xml"),format);  
                writer.write(doc);  
                System.out.println("生成XML成功!");  
            } catch (Exception e) {  
                e.printStackTrace();  
            } finally {  
                try {  
                    writer.close();  
                } catch (IOException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }  
            }  
        }  
    }

2.利用dom4j读取一个XML文件:

    public class ReaderXML {
     public static void main(String[] args) {
           try {
      SAXReader saxReader=new SAXReader();
      Document doc=saxReader.read(new File("d:/student.xml"));
      //利用XPath来访问元素,属性
      //  /students/student[1] 指定某个元素
      //  /students/student/@stuno 指定某个属性
      //  /students/student[@stuno='s002']做判断
      List data=doc.selectNodes("/students/student");
      for(Node node:data){
            //node.asXML() 以字符串的格式打印XML
            if("Element".equals(node.getNodeTypeName())){
        Element element=(Element)node;
        //读取属性值
        System.out.println(element.attributeValue("stuno"));
        //读取子元素文本值
        System.out.println(element.elementText("stuname"));
        System.out.println(element.elementText("stusex"));
        System.out.println(element.elementText("stuage")+"\n");
        }
       }
      } catch (Exception e) {
       e.printStackTrace();
      }   
     }
    }

3.利用dom4j修改一个XML文件:

    public class UpdateXMLData {  
        public static void main(String[] args) {  
           XMLWriter writer = null;  
           try {  
                SAXReader saxReader = new SAXReader();  
                Document doc = saxReader .read(new File("d:/student.xml"));  
                List data = doc  
                        .selectNodes("/students/student[@stuno='s002']");  
                for (Node node : data) {  
                    if ("Element".equals(node.getNodeTypeName())) {  
                        Element temp = (Element) node;  
                                            //修改student的stuno属性值  
                        temp.setAttributeValue("stuno", "stu002");  
                    }  
                }  
                OutputFormat format = OutputFormat.createPrettyPrint();  
                format.setEncoding("UTF-8");  
                writer = new XMLWriter(new FileWriter("d:/student.xml"), format);  
               writer.write(doc);  
                System.out.println("修改成功!");  
            } catch (Exception e) {  
                e.printStackTrace();  
            } finally {  
                try {  
                    writer.close();  
                } catch (IOException e) {  
                    // TODO Auto-generated catch block  
                    e.printStackTrace();  
                }  
            }  
        }  
    }

二、 XML基础_Java解析XML
案例源码地址:https://gitee.com/ren_jianbiao/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、声明:<?xml 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 命名空间可提供避免元素命名冲突的方法。
11、CDATA:字符数据,<![CDATA[字符数据]]> ,字符数据不进行转义
12、实体:&实体;

<?xml version='1.0' encoding='UTF-8' ?>




zhangsan
23
nan


lisi
24
nv


1.5、Xml约束
1.5.1、XML DTD 约束
DTD(DocType Definition 文档类型定义)的作用是定义 XML 文档的合法构建模块。它使用一系列的合法元素来定义文档结构。用于约定XML格式。
1.5.2、XML Schema 约束
XML Schema 是基于 XML 的 DTD 替代者。XML Schema 描述 XML 文档的结构。XML Schema 语言也称作 XML Schema 定义(XML Schema Definition,XSD)。 DTD不是通过XML语法定义文档结构, 不能定义数据类型和限制Schema通过XML语法定义文档结构,可以定义数据类型和限制
2、Schema引用方式

如何找Schema?和DTD一样,首先根据命名空间问环境要,找不到再根据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。
DOM4J解析器 - Java库来解析XML,XPath和使用Java集合框架XSLT,为DOM,SAX和JAXP的支持。
2、Java DOM解析器
2.1、DOM解析器简介
文档对象模型是万维网联盟(W3C)的官方推荐。它定义了一个接口,使程序能够访问和更新样式,结构和XML文档的内容。支持DOM实现该接口的XML解析器。
DOM接口 DOM定义了几个Java接口。这里是最常见的接口:
1、节点 - DOM的基本数据类型。
2、元素 - 要处理的对象绝大多数是元素。
3、Attr - 代表元素的属性。
4、文本 - 元素或Attr的实际内容。
5、文档 - 代表整个XML文档。文档对象是通常被称为DOM树。

3、Java SAX解析器
3.1、Java SAX解析器简介
SAX解析器在解析XML输入数据的各个组成部分时会报告事件,但不会以任何方式存储文档,而是由事件处理器建立相应的数据结构。实际上DOM解析器是在SAX解析器的基础上构建的,它在接收到解析器事件时构建DOM树。
SAX(针对XML的简单API)是基于事件为XML文档的解析器不像DOM解析器,SAX解析器创建没有解析树。
1、读取XML文件从上到下,构成一个结构完整的XML文档的标记
2、令牌以相同的顺序进行处理,它们出现在文档中
3、报告应用程序,因为它们所出现解析器遇到标记的特性
4、应用程序提供了必须的解析器注册的“事件”处理程序
5、作为标记标识,在处理程序回调方法相关信息调用
什么时候使用? 应该使用SAX解析器的时候:
1、可以在XML文档从上往下处理以线性方式
2、该文件并不深层次嵌套
3、处理一个非常大的XML文档,DOM树会占用太多的内存。典型DOM的实现使用10字节的存储器以表示XML的一个字节
4、解决的问题涉及的XML文档的一部分
5、数据是可用的,只要它是由解析器看出,这样的SAX可以很好地用于到达流的XML文档
SAX的缺点
1、它是在一个只进入处理随机访问方式XML文档
2、如果需要跟踪的数据分析器已经看到或更改项目的顺序,必须自已编写代码和数据存储
ContentHandler接口 此接口指定SAX解析器用来通知XML文档,已经看到部件应用程序的回调方法。
方法 方法描述
void startDocument() 调用在一个文件的开头。
void endDocument() 调用在一个文件的末尾。
void startElement(String uri, String localName, String qName, Attributes atts) 调用在一个元素的开头
void endElement(String uri, String localName,String qName) 调用在一个元件的末端。
void characters(char[] ch, int start, int length) 字符数据出现时调用。
void ignorableWhitespace( char[] ch, int start, int length) 当DTD是当前和忽略空白遇到时调用。
void processingInstruction(String target, String data) 当处理指令的认可时调用。
void setDocumentLocator(Locator locator)) 提供可用于识别文档中的位置的定位器。
void skippedEntity(String name) 一个尚未解决实体遇到时调用。
void startPrefixMapping(String prefix, String uri) 当一个新的命名空间的映射定义调用。
void endPrefixMapping(String prefix) 当一个命名空间定义结束其范围时调用。

属性接口 这种接口指定用于处理连接到一个元素的属性的方法。 int getLength() - 返回属性的数目。 String getQName(int index) String getValue(int index) String getValue(String qname)
3.2、Java SAX解析器 - 解析XML文档
在使用SAX解析器时,需要一个处理器来为各种解析器事件定义事件动作。DefaultHandler接口定义了若干个在解析文档时解析器会调用的回调方法。
下面是最重要的几个方法:
1、startElement和endElement在每当遇到起始或终止标签时调用。
2、characters在每当遇到字符数据时调用。
3、startDocument和endDocument分别在文档开始和结束时各调用一次。

三、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 协议版本
请求行:消息报头,一般用来说明客户端要使用的一些附加信息
空行:位于请求行和请求数据之间,空行是必须的。
请求数据:非必须。

5、HTTP 协议之请求方式
根据 HTTP 标准,HTTP 请求可以使用多种请求方法。HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD 方法。HTTP1.1 新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和CONNECT 方法。
get 和 post 请求方式的区别:
get 请求方式:请求数据会以?的形式隔开拼接在请求头中,不安全,没有请求实体部分。HTTP 协议虽然没有规定请求数据的大小,但是浏览 器对 URL 的长度是有限制的,所以 get 请求不能携带大量的数据。
http://localhost:8080/ServletDemo/login.do?username=zhangsan&password=123456
post 请求方式:请求数据在请求实体中进行发送,在 URL 中看不到具体的请求数据,安全。适合数据量大的数据发送。
http://localhost:8080/ServletDemo/login.do
6、HTTP 协议之响应
响应格式的结构:
响应行(状态行):HTTP 版本、状态码、状态消息
响应头:消息报头,客户端使用的附加信息
空行:响应头和响应实体之间的,必须的。
响应实体:正文,服务器返回给浏览器的信息
HTTP 常见响应状态码含义: HTTP 状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP 状态码共分为 5 种类型
常见状态码: 200 OK //客户端请求成功 400 Bad Request //客户端请求有语法错误,不能被服务器所理解 401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate 报头域一起使用 403 Forbidden //服务器收到请求,但是拒绝提供服务 404 Not Found //请求资源不存在,
eg:输入了错误的 URL 500 Internal Server Error //服务器发生不可预期的错误 503 Server Unavailable //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值