小码农的代码(五)----------web交互之HTTP传输HttpURLConnection

2024-09-04 12:38

本文主要是介绍小码农的代码(五)----------web交互之HTTP传输HttpURLConnection,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

小码农的代码(五)----------web交互之HTTP传输HttpURLConnection

  • 博客分类: 
  • web
  • JAVA
  • http
http web java 
工作中难免会遇到多系统交互的问题,回顾开发过的项目有用过公司内部封装的scoket,也有webService,目前物流系统与上游ERP系统与下游仓储系统对接使用的是http方式的交互,因此先来记录一下http方式交互的代码编写思路与内容,在后续的博文中再来讨论scoket与webservice。 
对于http自然就有get与post两种方式,我的理解是get方式更倾向于消息的获取,而post在于信息的交互与修改,在请求中get方式会在url中出现明文的参数,而post方式相对来说就更加安全而且请求没有大小限制。 
在本文中使用的是URLConnection来实现http post传输。首先新建一个Url,
 

Java代码   收藏代码
  1. URL localURL = new URL("http://localhost:8080/HttpServerDemo/servlet/LoginServlet");HttpURLConnection httpURLConnection = (HttpURLConnection) connection;  

然后打开一个url连接,
Java代码   收藏代码
  1. URLConnection connection = localURL.openConnection();  
再者设置相关的http报文头,设置请求方法为POST
Java代码   收藏代码
  1. httpURLConnection.setDoOutput(true);//使用 URL 连接进行输出  
  2.         httpURLConnection.setDoInput(true);//使用 URL 连接进行输入  
  3.         httpURLConnection.setRequestMethod("POST");  
  4.         httpURLConnection.setRequestProperty("Accept-Charset""utf-8");  
  5.         httpURLConnection.setRequestProperty("Content-Type",  
  6.                 "application/x-www-form-urlencoded");  
  7.         httpURLConnection.setRequestProperty("Content-Length",  
  8.                 String.valueOf(parameterData.length()));  

最后就是通过流形式将参数内容写入请求体中。
Java代码   收藏代码
  1. OutputStream outputStream = httpURLConnection.getOutputStream();OutputStreamWriter outputStreamWriter = null;  
  2. outputStreamWriter = new OutputStreamWriter(outputStream,"utf-8");  
  3.             outputStreamWriter.write("请求参数");           outputStreamWriter.flush();  
调用完毕之后记得关闭流 同样的,如果需要将服务端的返回信息进行打印,也通过流的方式获取并输出。
Java代码   收藏代码
  1. InputStream inputStream = null;  
  2.         InputStreamReader inputStreamReader = null;  
  3.         BufferedReader reader = null;inputStream = httpURLConnection.getInputStream();  
  4.             inputStreamReader = new InputStreamReader(inputStream);  
  5.             reader = new BufferedReader(inputStreamReader);  
  6.   
  7.             while ((tempLine = reader.readLine()) != null) {  
  8.                 resultBuffer.append(tempLine);  
  9.             }  
这里有个注意点就是reader.readLine()需要赋值之后再去判断,否则判断的值与循环体内的tempLine的值不一致导致错误,另外同样需要关闭流 接下去就是服务端的代码新建一个servlet,通过request.getInputStream()输入流获取请求内容并打印
Java代码   收藏代码
  1. BufferedReader bufferedReader = new BufferedReader(new InputStreamReader( request.getInputStream(),"utf-8"));  
  2.         StringBuffer buffer = new StringBuffer();  
  3.         String line = new String();  
  4.         while ((line = bufferedReader.readLine()) != null) {  
  5.             buffer.append(line).append("\n");  
  6.         }  
  7.         System.out.println(buffer.toString());  
对于需要输出到客户端的返回报文同样写入输出流通过response输出
Java代码   收藏代码
  1. response.setCharacterEncoding("utf-8");  
  2.        response.setContentType("text/plain; charset=UTF-8");  
  3.       PrintWriter writer = response.getWriter();  
  4.        writer.write(buffer.toString());  
  5.        response.getWriter().write("It is ok!");  
这里有个注意点就是对于输出编码的设置必须在写入流之前对response进行设置才能起到效果 最后关闭各个流。 
这样,一个简单的http post请求与服务器响应就写完了,总结而言就是将参数信息通过输出流的方式写入到请求中,通过HttpURLConnection方式传递到服务器。服务器对请求内容进行解析并返回到客户端。 
而在实际的开发过程中,多数情况是在获得服务器请求报文格式的前提下进行开发,这时就只需要按照报文格式来向服务端发送请求即可,通常报文支持json或者xml格式,下面就对这两种方式写一个简单的测试用例。首先是json格式的只需要将前文中outputStreamWriter.write("请求测试")的内容替换为jsonObject.toString()即可,xml同理。
Java代码   收藏代码
  1. JSONObject jsonObject = new JSONObject();  
  2.         jsonObject.append("username""fredzhanghao");  
  3.         jsonObject.append("blog""http://675990021.iteye.com/admin");  
  4.         jsonObject.append("test""中文测试");  
json格式需要加载json包,具体见pom文件
  • HttpDemo01.rar (21.5 KB)
  • 下载次数: 1
  • 服务端.rar (13.2 KB)
  • 下载次数: 1

这篇关于小码农的代码(五)----------web交互之HTTP传输HttpURLConnection的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1136046

相关文章

python实现pdf转word和excel的示例代码

《python实现pdf转word和excel的示例代码》本文主要介绍了python实现pdf转word和excel的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、引言二、python编程1,PDF转Word2,PDF转Excel三、前端页面效果展示总结一

在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码

《在MyBatis的XML映射文件中<trim>元素所有场景下的完整使用示例代码》在MyBatis的XML映射文件中,trim元素用于动态添加SQL语句的一部分,处理前缀、后缀及多余的逗号或连接符,示... 在MyBATis的XML映射文件中,<trim>元素用于动态地添加SQL语句的一部分,例如SET或W

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

使用C#代码计算数学表达式实例

《使用C#代码计算数学表达式实例》这段文字主要讲述了如何使用C#语言来计算数学表达式,该程序通过使用Dictionary保存变量,定义了运算符优先级,并实现了EvaluateExpression方法来... 目录C#代码计算数学表达式该方法很长,因此我将分段描述下面的代码片段显示了下一步以下代码显示该方法如

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

python多进程实现数据共享的示例代码

《python多进程实现数据共享的示例代码》本文介绍了Python中多进程实现数据共享的方法,包括使用multiprocessing模块和manager模块这两种方法,具有一定的参考价值,感兴趣的可以... 目录背景进程、进程创建进程间通信 进程间共享数据共享list实践背景 安卓ui自动化框架,使用的是

SpringBoot生成和操作PDF的代码详解

《SpringBoot生成和操作PDF的代码详解》本文主要介绍了在SpringBoot项目下,通过代码和操作步骤,详细的介绍了如何操作PDF,希望可以帮助到准备通过JAVA操作PDF的你,项目框架用的... 目录本文简介PDF文件简介代码实现PDF操作基于PDF模板生成,并下载完全基于代码生成,并保存合并P

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

SpringCloud集成AlloyDB的示例代码

《SpringCloud集成AlloyDB的示例代码》AlloyDB是GoogleCloud提供的一种高度可扩展、强性能的关系型数据库服务,它兼容PostgreSQL,并提供了更快的查询性能... 目录1.AlloyDBjavascript是什么?AlloyDB 的工作原理2.搭建测试环境3.代码工程1.