java笔记·

📝 ✏️ 📌
java笔记·

一、环境准备java

(1)下载dom4j-1.6.1.jarnode

(2)下载junit-4.10.jar微信

二、舒适提示dom

解析XML过程是经过获取Document对象,而后继续获取各个节点以及属性等操做,所以获取Document对象是第一步,大致说来,有三种方式:编码

(1)本身建立Document对象spa

[java] view plaincopyprint?在CODE上查看代码片派生到个人代码片.net

Document document = DocumentHelper.createDocument(); code

Element root = document.addElement("students"); orm

其中students是根节点,能够继续添加其余节点等操做。

(2)读取XML文件获取Document对象

[java] view plaincopyprint?在CODE上查看代码片派生到个人代码片

//建立SAXReader对象

SAXReader reader = new SAXReader();

//读取文件 转换成Document

Document document = reader.read(new File("XXXX.xml"));

(3)读取XML文本内容获取Document对象

[java] view plaincopyprint?在CODE上查看代码片派生到个人代码片

String xmlStr = "......";

Document document = DocumentHelper.parseText(xmlStr);

三、示例

(1)xml文件内容以下

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

<微信公众号>@残缺的孤独

<学号>20140101

<地址>北京海淀区

<座右铭>要么强大,要么听话

<新浪微博>@残缺的孤独

<学号>20140102

<地址>北京朝阳区

<座右铭>在哭泣中学会坚强

(2)解析过程

[java] view plaincopyprint?在CODE上查看代码片派生到个人代码片

package cn.com.yy.dom4j;

import java.io.File;

import java.util.Iterator;

import java.util.List;

import org.dom4j.Attribute;

import org.dom4j.Document;

import org.dom4j.Element;

import org.dom4j.io.SAXReader;

import org.junit.Test;

public class Dom4JforXML {

@Test

public void test() throws Exception{

//建立SAXReader对象

SAXReader reader = new SAXReader();

//读取文件 转换成Document

Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml"));

//获取根节点元素对象

Element root = document.getRootElement();

//遍历

listNodes(root);

}

//遍历当前节点下的全部节点

public void listNodes(Element node){

System.out.println("当前节点的名称:" + node.getName());

//首先获取当前节点的全部属性节点

List list = node.attributes();

//遍历属性节点

for(Attribute attribute : list){

System.out.println("属性"+attribute.getName() +":" + attribute.getValue());

}

//若是当前节点内容不为空,则输出

if(!(node.getTextTrim().equals(""))){

System.out.println( node.getName() + ":" + node.getText());

}

//同时迭代当前节点下面的全部子节点

//使用递归

Iterator iterator = node.elementIterator();

while(iterator.hasNext()){

Element e = iterator.next();

listNodes(e);

}

}

}

(3)解析结果

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

当前节点的名称:students

当前节点的名称:student1

属性id:001

当前节点的名称:微信公众号

微信公众号:@残缺的孤独

当前节点的名称:学号

学号:20140101

当前节点的名称:地址

地址:北京海淀区

当前节点的名称:座右铭

座右铭:要么强大,要么听话

当前节点的名称:student2

属性id:002

当前节点的名称:新浪微博

新浪微博:@残缺的孤独

当前节点的名称:学号

学号:20140102

当前节点的名称:地址

地址:北京朝阳区

当前节点的名称:座右铭

座右铭:在哭泣中学会坚强

四、dom4j操做节点属性

使用dom4j能够操做节点属性,好比添加节点属性、删除节点属性、修改属性值等操做。下面使用dom4j为上述的student1节点删除id属性,新添name属性。

(1)代码示例

[java] view plaincopyprint?在CODE上查看代码片派生到个人代码片

@Test

public void test2()throws Exception{

//建立SAXReader对象

SAXReader reader = new SAXReader();

//读取文件 转换成Document

Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml"));

//获取根节点元素对象

Element root = document.getRootElement();

System.out.println("-------添加属性前------");

//获取节点student1

Element student1Element = root.element("student1");

//遍历

listNodes(student1Element);

//获取其属性

Attribute idAttribute = student1Element.attribute("id");

//删除其属性

student1Element.remove(idAttribute);

//为其添加新属性

student1Element.addAttribute("name", "这是student1节点的新属性");

System.out.println("-------添加属性后------");

listNodes(student1Element);

}

(2)结果

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

-------添加属性前------

当前节点的名称:student1

属性id:001

当前节点的名称:微信公众号

微信公众号:@残缺的孤独

当前节点的名称:学号

学号:20140101

当前节点的名称:地址

地址:北京海淀区

当前节点的名称:座右铭

座右铭:要么强大,要么听话

-------添加属性后------

当前节点的名称:student1

属性name:这是student1节点的新属性

当前节点的名称:微信公众号

微信公众号:@残缺的孤独

当前节点的名称:学号

学号:20140101

当前节点的名称:地址

地址:北京海淀区

当前节点的名称:座右铭

座右铭:要么强大,要么听话

五、dom4j新增节点

使用dom4j能够删除指定节点、新增节点等操做,咱们使用dom4j为student1节点新增phone节点,以下。

(1)代码

[java] view plaincopyprint?在CODE上查看代码片派生到个人代码片

//添加节点

@Test

public void test3()throws Exception{

//建立SAXReader对象

SAXReader reader = new SAXReader();

//读取文件 转换成Document

Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml"));

//获取根节点元素对象

Element root = document.getRootElement();

System.out.println("-------添加节点前------");

//获取节点student1

Element student1Element = root.element("student1");

//遍历

listNodes(student1Element);

//添加phone节点

Element phoneElement = student1Element.addElement("phone");

//为phone节点设置值

phoneElement.setText("137xxxxxxxx");

System.out.println("-------添加节点后------");

listNodes(student1Element);

}

(2)结果

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

-------添加节点前------

当前节点的名称:student1

属性id:001

当前节点的名称:微信公众号

微信公众号:@残缺的孤独

当前节点的名称:学号

学号:20140101

当前节点的名称:地址

地址:北京海淀区

当前节点的名称:座右铭

座右铭:要么强大,要么听话

-------添加节点后------

当前节点的名称:student1

属性id:001

当前节点的名称:微信公众号

微信公众号:@残缺的孤独

当前节点的名称:学号

学号:20140101

当前节点的名称:地址

地址:北京海淀区

当前节点的名称:座右铭

座右铭:要么强大,要么听话

当前节点的名称:phone

phone:137xxxxxxxx

六、把Document对象写入新的文件

有时,咱们须要把document对象写入新的文件,dom4j提供了对应的API以便咱们进行操做。咱们在完成第 5 后,把document写入新的文件s1.xml,以下。

(1)代码

[java] view plaincopyprint?在CODE上查看代码片派生到个人代码片

//添加节点后,写入新的文件

@Test

public void test4()throws Exception{

//建立SAXReader对象

SAXReader reader = new SAXReader();

//读取文件 转换成Document

Document document = reader.read(new File("src/cn/com/yy/dom4j/s.xml"));

//获取根节点元素对象

Element root = document.getRootElement();

System.out.println("-------添加节点前------");

//获取节点student1

Element student1Element = root.element("student1");

//遍历

listNodes(student1Element);

//添加phone节点

Element phoneElement = student1Element.addElement("phone");

//为phone节点设置值

phoneElement.setText("137xxxxxxxx");

System.out.println("-------添加节点后------");

listNodes(student1Element);

//把student1Element写入新文件

writerDocumentToNewFile(document);

System.out.println("---写入完毕----");

}

//document写入新的文件

public void writerDocumentToNewFile(Document document)throws Exception{

//输出格式

OutputFormat format = OutputFormat.createPrettyPrint();

//设置编码

format.setEncoding("UTF-8");

//XMLWriter 指定输出文件以及格式

XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(new File("src/cn/com/yy/dom4j/s1.xml")),"UTF-8"), format);

//写入新文件

writer.write(document);

writer.flush();

writer.close();

}

(2)查看s1.xml文件

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

<微信公众号>@残缺的孤独

<学号>20140101

<地址>北京海淀区

<座右铭>要么强大,要么听话

137xxxxxxxx

<新浪微博>@残缺的孤独

<学号>20140102

<地址>北京朝阳区

<座右铭>在哭泣中学会坚强

由于涉及到中文,因此在输出时要设定UTF8编码,OutputStreamWriter进行设置编码。

还有输出格式的问题,在此处使用的是 OutputFormat.createPrettyPrint(),输出文档时进行了排版格式化。还有一种是 OutputFormat.createCompactFormat()方法,输出内容是一行,没有进行格式化,是紧凑型的输出。以下:

[html] view plaincopyprint?在CODE上查看代码片派生到个人代码片

dom4j生成xml文档

1、创建一个Document对象(即一个XML文档对象),如下:

1

Document document = DocumentHelper.createDocument();

通过上面这句定义一个 XML 文档对象。

2、在创建好的Document对象上面创建一个根节点(即XML的根节点),代码如下:

1

Element root = document.addElement("根节点名称");

通过这句定义一个 XML 元素,这里添加的是根节点。

Element 有几个重要的方法:

addComment(String comment) 添加注释

addAttribute(QName qName, String value)

addAttribute(String name, String value) 添加属性

addElement(String name) 添加子元素

3、最后通过 XMLWriter 生成物理文件,默认生成的 XML 文件排版格式比较乱,可以通过 OutputFormat 类格式化输出,默认采用 createCompactFormat()显示比较紧凑, 最好使用 createPrettyPrint()。

public class TestDom4j {

public static void main(String[] args) {

// 创建文档。

Document document = DocumentHelper.createDocument();

// 设置文档DocType,这里为了举例,添加hibernate的DocType

document.addDocType("hibernate-configuration",

"-//Hibernate/Hibernate Configuration DTD 3.0//EN",

"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd");

// 文档增加节点,即根节点,一个文档只能有一个根节点,多加出错

Element root = document.addElement("skills");

// 添加注释

root.addComment("第一个技能");

// 根节点下添加节点

Element first = root.addElement("skill");

// 节点添加属性

first.addAttribute("name", "独孤九剑");

// 节点下添加节点

Element info = first.addElement("info");

// 节点设置内容数据

info.setText("为独孤求败所创,变化万千,凌厉无比。其传人主要有风清扬、令狐冲。 ");

// 同理增加其他节点,内容,属性等

Element second = root.addElement("skill");

second.addAttribute("name", "葵花宝典");

Element info2 = second.addElement("info");

info2.setText("宦官所创,博大精深,而且凶险至极。练宝典功夫时,首先要自宫净身。 ");

/**

* 第二种方法增加节点,内容,属性等。先创建节点,属性,然后使用add加入。

*/

// 创建节点

Element third = DocumentHelper.createElement("skill");

// 将节点加入到根节点中

root.add(third);

// 创建属性,第一个参数指定了拥有者,也可以为null,指定拥有者

Attribute name = DocumentHelper.createAttribute(third, "name", "北冥神功");

// 将属性加入到节点上

third.add(name);

// 创建子节点并加入到节点中

Element info3 = DocumentHelper.createElement("info");

info3.setText("逍遥派的顶级内功之一,能吸人内力转化为自己所有,威力无穷。 ");

third.add(info3);

try {

// 创建格式化类

OutputFormat format = OutputFormat.createPrettyPrint();

// 设置编码格式,默认UTF-8

format.setEncoding("UTF-8");

// 创建输出流,此处要使用Writer,需要指定输入编码格式,使用OutputStream则不用

FileOutputStream fos = new FileOutputStream("d:/skills.xml");

// 创建xml输出流

XMLWriter writer = new XMLWriter(fos, format);

// 生成xml文件

writer.write(document);

writer.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

生成 XML 文件内容:

3.0//EN" "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

为独孤求败所创,变化万千,凌厉无比。其传人主要有风清扬、令狐冲。

宦官所创,博大精深,而且凶险至极。练宝典功夫时,首先要自宫净身。

逍遥派的顶级内功之一,能吸人内力转化为自己所有,威力无穷。

什么是WebServices?

它是一种构建应用程序的普遍模型,能够在不论什么支持网络通信的操作系统中实施执行;它是一种新的web应用程序分支,是自包括、自描写叙述、模块化的应用,能够公布、定位、通过web调用。Web Service是一个应用组件,它逻辑性的为其它应用程序提供数据与服务.各应用程序通过网络协议和规定的一些标准数据格式(Http,XML,Soap)来訪问Web Service,通过Web Service内部运行得到所需结果.Web Service能够运行从简单的请求到复杂商务处理的不论什么功能。

一旦部署以后,其它Web Service应用程序能够发现并调用它部署的服务。

关键的技术和规则

在构建和使用Web Service时,主要用到下面几个关键的技术和规则:

1.XML:描写叙述数据的标准方法.

2.SOAP:表示信息交换的协议.

3.WSDL:Web服务描写叙述语言.

4.UDDI:通用描写叙述、发现与集成,它是一种独立于平台的。基于XML语言的用于在互联网上描写叙述商务的协议。

XML

可扩展的标记语言(XML)是Web service平台中表示数据的基本格式。除了易于建立和易于分析外,XML基本的长处在于它既是平台无关的。又是厂商无关的。无关性是比技术优越性更重要的:软件厂商是不会选择一个由竞争对手所发明的技术的。

HTTP 协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网( WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。

HTTP 是一个基于 TCP/IP 通信协议来传递数据(HTML 文件、图片文件、查询结果等)。

HTTPS 协议是 HyperText Transfer Protocol Secure(超文本传输安全协议)的缩写,是一种通过计算机网络进行安全通信的传输协议。

HTTPS 经由 HTTP 进行通信,但利用 SSL/TLS 来加密数据包,HTTPS 开发的主要目的,是提供对网站服务器的身份认证,保护交换资料的隐私与完整性。

HTTP 的 URL 是由 http:// 起始与默认使用端口 80,而 HTTPS 的 URL 则是由 https:// 起始与默认使用端口443。

HTTP 工作原理

HTTP 协议工作于客户端-服务端架构上。

浏览器作为 HTTP 客户端通过 URL 向 HTTP 服务端即 WEB 服务器发送所有请求。

Web 服务器有:Apache 服务器,IIS 服务器(Internet Information Services)等。

Web 服务器根据接收到的请求后,向客户端发送响应信息。

HTTP 默认端口号为 80,但是你也可以改为 8080 或者其他端口。

HTTP 三点注意事项:

HTTP 是无连接:无连接的含义是限制每次连接只处理一个请求,服务器处理完客户的请求,并收到客户的应答后,即断开连接,采用这种方式可以节省传输时间。

HTTP 是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送,客户端以及服务器指定使用适合的 MIME-type 内容类型。

HTTP 是无状态:HTTP 协议是无状态协议,无状态是指协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大,另一方面,在服务器不需要先前信息时它的应答就较快。

工厂方法

如果有一个客户老王,需要购买产品,产品分别是A、B、C。

如果用传统方法实现,分别定义A、B、C三个类,再分别创建他们所属的方法。

在客户对象中再分别调用他们的方法。

Product ClientProduct(String orderType) {

Product product;

if (orderType.equals("A")) {

product = new ProductA();

} else if (orderType.equals("B")) {

product = new ProductB();

} else if (orderType.equals("B")) {

product = new ProductC();

}

// product制作过程

product.common();

return product;

}

如果我们需要再增加一个产品D,就需要判断再增加一个分支,然后在分支里面创建产品对象,调用产品D的方法。

这样代码的维护性是极差的,查看我们的软件设计七大原则,很明显,这违反了开闭原则、依赖倒置原则.

如果又有个客户小王,那么小王也必须依赖每个产品类,这样就显得冗杂。

二、简单工厂(静态工厂)

简单工厂(静态工厂)模式就应用而生了。

如果我们将产品A、B、C抽象出来一个父类,再专门创建一个工厂类,在客户购买产品时,只需要传入产品的类型,由工厂去创建产品。

简单工厂模式中包含如下角色:

Factory:工厂角色

​ 工厂角色负责实现创建所有实例的内部逻辑。

Product:抽象产品角色

​ 抽象产品角色是所创建的所有对象的父类,负责描述所有实例所共有的公共接口。

ConcreteProduct:具体产品角色

​ 具体产品角色是创建目标,所有创建的对象都充当这个角色的某个具体类的实例。

看看我们对原始实现方式后的代码。

产品抽象父类:

/**

* @author tcy

* @Date 28-07-2022

*/

public class Product {

public void common(){

System.out.println("这是产品父类公共方法...");

}

}

产品A:

/**

* @author tcy

* @Date 28-07-2022

*/

public class ProductA extends Product{

public void common(){

System.out.println("这是产品A方法...");

}

}

产品B:

/**

* @author tcy

* @Date 28-07-2022

*/

public class ProductB extends Product{

public void common(){

System.out.println("这是产品B方法...");

}

}

工厂类:

/**

* @author tcy

* @Date 28-07-2022

*/

public class SimpleFactory {

public Product createProduct(String orderType) {

Product product = null;

if (orderType.equals("A")) {

product = new ProductA();

} else if (orderType.equals("B")) {

product = new ProductB();

} else if (orderType.equals("C")) {

product = new ProductC();

}

return product;

}

}

客户老王类:

/**

* @author tcy

* @Date 28-07-2022

*/

public class Client {

SimpleFactory simpleFactory;

public Client(SimpleFactory simpleFactory) {

this.simpleFactory = simpleFactory;

}

public Product orderProduct(String orderType) {

Product product;

product = simpleFactory.createProduct(orderType);

//调用每个产出相应的方法

product.common();

System.out.println(product.getClass());

return product;

}

public static void main(String[] args) {

Client client=new Client(new SimpleFactory());

client.orderProduct("A");

}

}

1.HTTP的请求方法经常使用的有GET和POST:网络

GET:请求URL并获得资源,初级理解为下载;异步

POST:向服务器添加新的内容,可理解为上传。spa

2.网络链接方式:代理

同步:发送同步消息后只能等待服务器返回消息,期间不能执行任何动做,表现为UI的冻结。对象

异步:向服务器发送异步消息后仍可执行其余操做,使用代理等待服务器返回消息,UI不冻结。资源

下面介绍四种经常使用连接方式:同步

1.GET同步io

(1)系统封装好的GET请求的同步连接方式有:table

NSString、NSData、NSArray、UIImage等类。

(2)手动建立一个GET同步连接的步骤:

.建立URL对象

.建立NSURLRequest对象

.建立NSURLConnection对象,发送同步连接

.接收数据

2.POST同步

.建立URL对象

.建立NSMutableURLRequest对象

.建立NSURLConnection对象,发送同步连接

.设置请求方式为POST(系统默认的请求方式为GET)

.接收数据

3.GET异步

.建立URL对象

.建立NSURLRequest对象

.建立NSURLConnection对象,设置代理(一般使用系统自己写好的代理,使类遵循某个协议即可以使用协议里面的方法),发送同步连接

.在代理的方法里实现接收数据

4.POST异步

.建立URL对象

.建立NSMutableURLRequest对象

.建立NSURLConnection对象,设置代理(一般使用系统自己写好的代理,使类遵循某个协议即可以使用协议里面的方法),发送同步连接

.设置请求方式为POST(系统默认的请求方式为GET)

.在代理的方法里实现接收数据

🔗 相关推荐

✨ 💡 🎯
天刀卖号去哪个平台
开彩365下载安装

天刀卖号去哪个平台

📅 07-06 👀 8184
郓城县人民法院审理一起网络传销案 “兴中天”一名骨干被判5年
电脑音量图标不见了如何恢复 教你几招快速恢复