教授通过代码示例学习Commons HTTPClient4组件的编程技术——实现在客户端程序中直接提交XML格式参数

httpclient4  时间:2021-01-29  阅读:()

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

1. 1 实现在客户端程序中直接提交XML格式参数

1. 1. 1直接发送XML文件内容

下面采用直接发送XML文件内容的方式实现代码示例的实现过程和程序代码如下。

1、添加一个PostXMLHttpC lient类

1类名称为PostXMLHttpClient包名称为com.px1987.httpclient

2代码示例package com.px1987.httpclient;import java. io.File;import java. io. IOException;import java. io. InputStream;

杨教授工作室精心创作的优秀程序员职业提升必读系列资料import java. io.ObjectInputStream;import java.util.ArrayList;import java.util. Iterator;import java.util.List;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.ClientProtocolException;import org.apache.http.client.HttpClient;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.FileEntity;import org.apache.http. impl.client.DefaultHttpClient;import com.px1987.httpclient.vobject.UserInfoVO;public class PostXMLHttpClient {public PostXMLHttpClient() throws ClientProtocolException, IOException,ClassNotFoundException {

HttpClient httpClient = new DefaultHttpClient() ;

StringuserLoginTargetURL="http://127.0.0. 1:8080/webbank/deaxmlrequestservlet";

HttpPost onePostMethod = new HttpPost(userLoginTargetURL) ;

StringuserInfoXMLFileName=this.getClass() .getResource("/userInfo.xml") .getFile() ;

FileEntity xmlFileEntity = new FileEntity(new File(userInfoXMLFileName) ,

"text/xml;charset=\"gb2312\"") ; //与XML文件的编码保持一致性onePostMethod. setEntity(xmlFileEntity) ;

HttpResponse httpResponse =httpClient. execute(onePostMethod) ;int httpStatusCode=httpResponse.getStatusLine() .getStatusCode() ;if(httpStatusCode==HttpStatus.SC_OK) {

System.out.println(httpResponse.getStatusLine() ) ;//打印服务器返回的

杨教授工作室版权所有盗版必究 2/9页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料状态

HttpEntity entity = httpResponse.getEntity() ;if (entity == null) {

System.out.println("服务器没有返回任何的信息") ;return;

}

InputStream oneInputStream = entity.getContent() ;

ObjectInputStream oneObjectInputStream=new ObjectInputStream(oneInputStream) ;

List<UserInfoVO> allUserInfos=

(ArrayList<UserInfoVO> )oneObjectInputStream.readObject() ;if(allUserInfos==null) {

System.out.println("服务器没有返回任何的信息") ;return;

}

Iterator<UserInfoVO> allItems=allUserInfos. iterator() ;while(allItems.hasNext() ) {

UserInfoVO oneUserInfoVO=(UserInfoVO)allItems.next() ;int type_User_AdminDigit=oneUserInfoVO.getType_User_Admin() ;String returnUserName=oneUserInfoVO.getUserName() ;

String returnUserPassWord=oneUserInfoVO.getUserPassWord() ;System. out.println(" 获 得 的 用 户 角 色 类 型 为 "+type_User_AdminDigit) ;

System. out.println("获得的用户名称为 "+returnUserName) ;System. out.println("获得的用户密码为 "+returnUserPassWord) ;}entity.consumeContent() ; //确保资源释放

}else{

杨教授工作室版权所有盗版必究 3/9页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

System.out.println("方法执行过程中出现了错误") ;//打印服务器返回的状态

}onePostMethod.abort() ; //结束本次请求httpClient.getConnectionManager() . shutdown() ; ;//释放连接

}public static void main(String[] args) throws ClientProtocolException,IOException, ClassNotFoundException {

PostXMLHttpClient oneWebBankAppclient=new PostXMLHttpClient() ;

}

}

2、在项目的当前类路径下添加use rInfo.xml文件

1创建出该use rInfo.xml文件

2 userInfo.xml文件的内容如下

<?xml version="1.0" encoding="gb2312"?>

<userInfos>

<userinfo>

<userName>杨少波</userName>

<userPassWord>admin</userPassWord>

杨教授工作室版权所有盗版必究 4/9页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料<typeUserAdmin>1</typeUserAdmin>

</userinfo>

</userInfos>

3、设计一个接收XML数据的服务器端的Servlet组件类DealXMLRequestServlet1类名称为DealXMLRequestServlet。包名称为com.px1987.httpclient. servlet

2 URL-Pattern设置为/deaxmlrequestservlet

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

4、编程该DealXMLRequestServlet程序类package com.px1987.httpclient. servlet;import java. io.BufferedReader;import java. io.ByteArrayInputStream;import java. io. IOException;import java. io. InputStream;import java. io.ObjectOutputStream;import java.util.ArrayList;import java.util. Iterator;import java.util.List;import javax. servlet.ServletException;import javax. servlet.ServletOutputStream;import javax. servlet.http.HttpServlet;import javax. servlet.http.HttpServletRequest;import javax. servlet.http.HttpServletResponse;import org. jdom.Document;import org. jdom.Element;import org. jdom.JDOMException;import org. jdom. input.SAXBuilder;

杨教授工作室版权所有盗版必究 6/9页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料import com.px1987.httpclient.vobject.UserInfoVO;public class DealXMLRequestServlet extends HttpServlet {private static final long serialVersionUID = 1L;public DealXMLRequestServlet() {super() ;

}public void destroy() {super.destroy() ;

}public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

StringBuffer oneXMLStringBuffer = new StringBuffer() ;

String oneXMLLine = null;

BufferedReader reader = request.getReader() ;while( (oneXMLLine = reader.readLine() ) != null) {oneXMLStringBuffer.append(oneXMLLine) ;

}

String xmlTextContent =oneXMLStringBuffer. toString() ;

Document xmlDocument = null;

SAXBuilder oneSAXBuilder = new SAXBuilder() ;

InputStream oneInputStream=newByteArrayInputStream(xmlTextContent.getBytes() ) ;try {xmlDocument = oneSAXBuilder.build(oneInputStream) ;

} catch (JDOMException e) {e.printStackTrace() ;

}

杨教授工作室版权所有盗版必究 7/9页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料List<UserInfoVO> allUserInfos=parseXMLDocumentTags(xmlDocument) ;ServletOutputStream oneServletOutputStream=response.getOutputStream() ;ObjectOutputStream oneObjectOutputStream =new ObjectOutputStream(oneServletOutputStream) ;oneObjectOutputStream.writeObject(allUserInfos) ;

}public List<UserInfoVO> parseXMLDocumentTags(Document xmlDocument) {List<UserInfoVO> allUserInfos=new ArrayList<UserInfoVO>() ;

Element rootElement = xmlDocument.getRootElement() ; //得到根元素java.util.List<Element> allUserInfoElements = rootElement.getChildren() ;//得到根元素所有子元素的集合

Iterator<Element> allElementItems=allUserInfoElements. iterator() ;while(allElementItems.hasNext() ) {

Element oneUserInfoElement=(Element)allElementItems.next() ;//<userInfo>

String userName=oneUserInfoElement.getChildText("userName") ;

String userPassWord=oneUserInfoElement.getChildText("userPassWord") ;

StringtypeUserAdmin=oneUserInfoElement.getChildText("typeUserAdmin") ;

UserInfoVO oneUserInfoVO=new UserInfoVO() ;oneUserInfoVO. setUserName(userName) ;oneUserInfoVO. setUserPassWord(userPassWord) ;oneUserInfoVO. setType_User_Admin(Integer.parseInt(typeUserAdmin) ) ;allUserInfos.add(oneUserInfoVO) ;

}return allUserInfos;

}public void init() throws ServletException {

杨教授工作室版权所有盗版必究 8/9页

杨教授工作室精心创作的优秀程序员职业提升必读系列资料

}

}

5、在服务器端项目中添加j do m.j ar系统库

由于在Web服务器端项目中需要应用JD o m系统库解析从客户端发送的XM L文件中的相关标签 因此需要添加JDo m系统库文件如下图所示

6、执行本示例并获得相关的结果

VPSDime7美元/月,美国达拉斯Windows VPS,2核4G/50GB SSD/2TB流量/Hyper-V虚拟化

VPSDime是2013年成立的国外VPS主机商,以大内存闻名业界,主营基于OpenVZ和KVM虚拟化的Linux套餐,大内存、10Gbps大带宽、大硬盘,有美国西雅图、达拉斯、新泽西、英国、荷兰机房可选。在上个月搞了一款达拉斯Linux系统VPS促销,详情查看:VPSDime夏季促销:美国达拉斯VPS/2G内存/2核/20gSSD/1T流量/$20/年,此次推出一款Windows VPS,依然是...

云俄罗斯VPSJusthost俄罗斯VPS云服务器justg:JustHost、RuVDS、JustG等俄罗斯vps主机

俄罗斯vps云服务器商家推荐!俄罗斯VPS,也叫毛子主机(毛子vps),因为俄罗斯离中国大陆比较近,所以俄罗斯VPS的延迟会比较低,国内用户也不少,例如新西伯利亚机房和莫斯科机房都是比较热门的俄罗斯机房。这里为大家整理推荐一些好用的俄罗斯VPS云服务器,这里主要推荐这三家:justhost、ruvds、justg等俄罗斯vps主机,方便大家对比购买适合自己的俄罗斯VPS。一、俄罗斯VPS介绍俄罗斯...

Hostodo(年付12美元)斯波坎VPS六六折,美国西海岸机房

Hostodo是一家成立于2014年的国外VPS主机商,现在主要提供基于KVM架构的VPS主机,美国三个地区机房:拉斯维加斯、迈阿密和斯波坎,采用NVMe或者SSD磁盘,支持支付宝、PayPal、加密货币等付款方式。商家最近对于上架不久的斯波坎机房SSD硬盘VPS主机提供66折优惠码,适用于1GB或者以上内存套餐年付,最低每年12美元起。下面列出几款套餐配置信息。CPU:1core内存:256MB...

httpclient4为你推荐
电脑桌面背景图适合女生用的桌面背景图片有哪些?涡轮增压和自然吸气哪个好本田车自然吸气和涡轮增压哪个好骁龙765g和骁龙865哪个好请问苹果的a13处理器和骁龙865综合性能两个相差大不大?以及打游戏哪个更流畅?江门旅游景点哪个好玩的地方江门有什么地方好玩的?朗逸和速腾哪个好朗逸和新速腾哪个性能更好点?录音软件哪个好录音软件哪个好用又简单宝来和朗逸哪个好朗逸 和 宝来 哪个好?手机杀毒软件哪个好手机用什么杀毒软件好杰士邦和杜蕾斯哪个好安全套是杜蕾斯的好用还是杰士邦的好用?网校哪个好会计网校哪个好
域名购买 域名转让网 全球付 linode代购 便宜建站 免费ftp站点 个人免费空间 亚马逊香港官网 卡巴斯基是免费的吗 便宜空间 vul 金主 免费php空间 闪讯网 ncp 什么是dns 西部数码主机 koss耳机 qq空间技术网 qq空间登陆首页 更多