网络通信与xml转换知识点Word文件下载.docx

上传人:b****5 文档编号:19679903 上传时间:2023-01-08 格式:DOCX 页数:38 大小:36.72KB
下载 相关 举报
网络通信与xml转换知识点Word文件下载.docx_第1页
第1页 / 共38页
网络通信与xml转换知识点Word文件下载.docx_第2页
第2页 / 共38页
网络通信与xml转换知识点Word文件下载.docx_第3页
第3页 / 共38页
网络通信与xml转换知识点Word文件下载.docx_第4页
第4页 / 共38页
网络通信与xml转换知识点Word文件下载.docx_第5页
第5页 / 共38页
点击查看更多>>
下载资源
资源描述

网络通信与xml转换知识点Word文件下载.docx

《网络通信与xml转换知识点Word文件下载.docx》由会员分享,可在线阅读,更多相关《网络通信与xml转换知识点Word文件下载.docx(38页珍藏版)》请在冰豆网上搜索。

网络通信与xml转换知识点Word文件下载.docx

另外,Android已经成功地集成了HttpClient,这意味着开发人员可以直接在Android应用中使用Httpclient来访问提交请求、接收响应。

比如一个Android应用需要向指定页面发送请求,但该页面并不是一个简单的页面,只有当用户已经登录,而且登录用户的用户名有效时才可访问该页面。

如果使用HttpURLConnection来访问这个被保护的页面,那么需要处理的细节就太复杂了。

其实访问Web应用中被保护的页面,使用浏览器则十分简单,用户通过系统提供的登录页面登录系统,浏览器会负责维护与服务器之间的Sesion,如果用户登录的用户名、密码符合要求,就可以访问被保护资源了。

在Android应用程序中,则可使用HttpClient来登录系统,只要应用程序使用同一个HttpClient发送请求,HttpClient会自动维护与服务器之间的Session状态,也就是说程序第一次使用HttpClient登录系统后,接下来使用HttpClient即可访问被保护页而了。

扩展知识:

了解HttpCore

1.HTTPClient

Org.apache.http.client工具包

项目1

/**

*向远程的url服务器进行post一个数据包

*

*@paramurl

*需要进行post的服务器

*@paramparas

*数据包中的参数

*@return

*@throwsException

*/

publicstaticStringpostData(Stringurl,Stringdata,

StringuploadEncoding,StringresponseEncoding)throwsException{

RequestConfigconfig=RequestConfig.custom().build();

HttpClientclient=HttpClients.custom()

.setDefaultRequestConfig(config).build();

HttpClientContextcontext=HttpClientContext.create();

HttpPostpost=newHttpPost(url);

if(StringUtils.isNotBlank(data)){

post.setEntity(newStringEntity(data,uploadEncoding));

}

CloseableHttpResponseresponse=(CloseableHttpResponse)client

.execute(post,context);

returnEntityUtils.toString(response.getEntity(),responseEncoding);

}

2.URLConnection

Java自带

publicstaticStringgetFromSpecialUrl(Stringstr,Stringparam)throwsException{

log.info("

requestcorezy++++++++++++++++++++++++++++++++++++++++++"

);

URLurl=null;

URLConnectionconn=null;

BufferedReaderbufferedReader=null;

InputStreaminputStream=null;

StringBufferresponseXml=null;

PrintWriteroutput=null;

Stringresult;

try{

url=newURL(str);

log.info("

url"

+url);

conn=(URLConnection)url.openConnection();

conn.setDoInput(true);

conn.setDoOutput(true);

conn.setConnectTimeout(1000);

output=newPrintWriter(conn.getOutputStream());

output.print(param.toString());

output.close();

responseXml=newStringBuffer();

inputStream=conn.getInputStream();

bufferedReader=newBufferedReader(newInputStreamReader(

inputStream,"

GBK"

));

Strings;

while((s=bufferedReader.readLine())!

=null){

responseXml.append(s);

}

bufferedReader.close();

}catch(IOExceptione){

e.printStackTrace();

System.out.println("

系统处理异常!

"

result=responseXml.toString();

System.out.println("

接收到的报文:

+result);

returnresult;

3.HTTPClient和URLConnection的区别

对比项目

URLConnection

HTTPClient

提交方式(Methods)

HEAD,GET,POST,PUT,DELETE,TRACE,OPTIONS

HEAD,GET,POST,PUT,DELETE,TRACE,OPTIONS,WEBDav,IPP,甚至各种自定义提交方式

响应(ResponseCodes)

只能获取http状态码小于400的状态码,响应头信息(headers),响应内容.对于响应状态码为4xx或者5xx获取response的任何信息都只会抛出IOException

任何时候都可以获取响应的任何信息:

响应状态码,响应头信息,响应内容信息等等。

代理和SOCKS

支持,SOCKS仅支持4

支持,SOCKS支持4和5

认证(Authorization)

支持Basic、早期的DigestJDK1.2+(不支持现在的Digestauthentication),甚至不能处理apache返回的Digest信息

支持Basic、DigestAuthentication、自定义的其他认证方案

Cookies

不支持

支持

请求输出流

(Truerequestoutputstreams)

请求发送之前,所有的数据都被缓存起来

通过socket直接输出HttpOutputStream

响应输入流

(Trueresponseinputstreams)

JDK1.2-支持,1.3+不支持chunkedencoding(不支持大多数推送服务器的响应)

长连接

(PersistentConnections)

JDK1.2-HTTP/1.0Keep-Alive,JDK1.3+ 

HTTP/1.1Persistent

支持HTTP/1.0Keep-Alive和HTTP/1.1Persistent

PipeliningofRequests

设置超时

处理HTTP之外的协议

支持如:

ftp,gopher,mailto,文件系统

开源

二,XML工具包xStream

XmlUtils

xStream可以轻易的将Java对象和xml文档相互转换,而且可以修改某个特定的属性和节点名称,而且也支持json的转换;

它们都完美支持JSON,但是对xml的支持还不是很好。

一定程度上限制了对Java对象的描述,不能让xml完全体现到对Java对象的描述。

这里将会介绍xStream对JSON、XML的完美支持。

xStream不仅对XML的转换非常友好,而且提供annotation注解,可以在JavaBean中完成对xml节点、属性的描述。

以及对JSON也支持,只需要提供相关的JSONDriver就可以完成转换。

1、下载jar包、及官方资源

xStream的jar下载地址:

https:

//nexus.codehaus.org/content/repositories/releases/com/thoughtworks/xstream/xstream-distribution/1.3.1/xstream-distribution-1.3.1-bin.zip

添加xstream-1.3.1.jar文件到工程中,就可以开始下面的工作;

需要的jar如下:

2、测试用例代码

publicclassXStreamTest{

privateXStreamxstream=null;

privateObjectOutputStreamout=null;

privateObjectInputStreamin=null;

privateStudentbean=null;

@Before

publicvoidinit(){

xstream=newXStream();

//xstream=newXStream(newDomDriver());

//需要xpp3jar

bean=newStudent();

bean.setAddress("

china"

bean.setEmail("

jack@"

bean.setId

(1);

bean.setName("

jack"

Birthdayday=newBirthday();

day.setBirthday("

2010-11-22"

bean.setBirthday(day);

@After

publicvoiddestory(){

xstream=null;

bean=null;

if(out!

out.flush();

out.close();

if(in!

in.close();

System.gc();

通过XStream对象的toXML方法就可以完成Java对象到XML的转换,toXML方法还有2个相同签名的方法,需要传递一个流。

然后通过流来完成xml信息的输出。

3、需要的JavaBean

packagecom.hoo.entity;

publicclassStudent{

privateintid;

privateStringname;

privateStringemail;

privateStringaddress;

privateBirthdaybirthday;

//getter、setter

publicStringtoString(){

returnthis.name+"

#"

+this.id+"

+this.address+"

+this.birthday+"

+this.email;

}

1、Java转换成XML

1.1JavaBean转换XM

@Test

publicvoidwriteBean2XML(){

System.out.println("

------------Bean->

XML------------"

System.out.println(xstream.toXML(bean));

重命名后的XML"

//类重命名

//xstream.alias("

account"

Student.class);

生日"

Birthday.class);

//xstream.aliasField("

Student.class,"

birthday"

Birthday.class,"

//System.out.println(xstream.toXML(bean));

//属性重命名

xstream.aliasField("

邮件"

email"

//包重命名

xstream.aliasPackage("

hoo"

"

com.hoo.entity"

看结果中的第一份xml内容,是没有经过然后修改或重命名的文档,按照原样输出。

文档中的第二份文档的package经过重命名,email属性也经过重命名以及类名也可以进行重命名的。

运行后结果如下:

XML------------

<

com.hoo.entity.Student>

<

id>

1<

/id>

name>

jack<

/name>

email>

jack@<

/email>

address>

china<

/address>

birthday>

2010-11-22<

/birthday>

/com.hoo.entity.Student>

重命名后的XML

hoo.Student>

邮件>

/邮件>

/hoo.Student>

1.2将List集合转换成xml文档

publicvoidwriteList2XML(){

try{

//修改元素名称

xstream.alias("

beans"

ListBean.class);

student"

----------List-->

XML----------"

ListBeanlistBean=newListBean();

listBean.setName("

thisisaListCollection"

List<

Object>

list=newArrayList<

();

list.add(bean);

//引用bean

//list.add(listBean);

//引用listBean,父元素

tom@"

bean.setId

(2);

tom"

Birthdayday=newBirthday("

bean.setBirthday(day);

listBean.setList(list);

//将ListBean中的集合设置空元素,即不显示集合元素标签

//xstream.addImplicitCollection(ListBean.class,"

list"

//设置reference模型

//xstream.setMode(XStream.NO_REFERENCES);

//不引用

xstream.setMode(XStream.ID_REFERENCES);

//id引用

//xstream.setMode(XStream.XPATH_ABSOLUTE_REFERENCES);

//绝对路径引用

//将name设置为父类(Student)的元素的属性

xstream.useAttributeFor(Student.class,"

name"

xstream.useAttributeFor(Birthday.class,"

//修改属性的name

xstream.aliasAttribute("

姓名"

System.out.println(xstream.toXML(listBean));

}catch(Exceptione){

e.printStackTrace();

上面的代码运行后,结果如下:

XML----------

beansid="

1"

>

thisisaListCollection<

listid="

2"

studentid="

3"

姓名="

birthdayid="

4"

生日="

/>

/student>

studentreference="

5"

2<

tom@<

6"

/list>

/beans>

如果不加xstream.addImplicitCollection(ListBean.class,"

这个设置的话,会出现一个List节点包裹着Student节点元素。

添加addImplicitCollection可以忽略这个list节点元素。

那么上面的list节点就不存在,只会在beans元素中出现name、student这2个xml元素标签;

setMode是设置相同的对象的引用方式,如果设置XStream.NO_REFERENCES就是不引用,会输

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 艺术

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1