以前做过HttpURLConnection传递参数的例子,这次用流来实现,看下面的这个例子。
工具类:
package com.hljw.health.y100.job; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.Charset; import java.util.Date; import java.util.HashMap; import java.util.Map; import com.alibaba.fastjson.JSON; import com.hljw.health.y100.pojo.CommunityParametersObject; import com.hljw.util.DateUtil; public class HttpClient { private static String _default_encoding = Charset.defaultCharset().name(); //1.发送请求 public static String getResopnseData(String data,String url) { try { HttpURLConnection connection = getURL(url); return sendRequest(connection, data); } catch (Exception e) { e.printStackTrace(); } return null; } //创建httpconn对象 private static HttpURLConnection getURL(String wsUrl) throws Exception { URL url = new URL(wsUrl); HttpURLConnection httpConn = (HttpURLConnection) url.openConnection(); httpConn.setRequestProperty("content-type", "text/html");//参数穿不过去请设置这一条 httpConn.setRequestProperty("Accept-Charset", "utf-8"); httpConn.setRequestMethod("POST"); httpConn.setUseCaches(false); httpConn.setDoInput(true); httpConn.setDoOutput(true); Charset.availableCharsets(); httpConn.setInstanceFollowRedirects(true); return httpConn; } //发送请求参数,并得到服务端的返回信息 private static String sendRequest(HttpURLConnection conn, String data) throws Exception { conn.getOutputStream().write(data.getBytes("utf-8")); conn.getOutputStream().flush(); conn.getOutputStream().close(); return response(conn); } private static String response(HttpURLConnection conn) throws Exception { StringBuffer info = new StringBuffer(); BufferedReader reader = new BufferedReader(new InputStreamReader(conn .getInputStream(),"utf-8")); // BufferedReader reader = new BufferedReader(new // InputStreamReader(conn.getInputStream())); // conn.connect(); System.out.println("============================="); System.out.println("Contents of post request"); System.out.println("============================="); String line = reader.readLine(); while (line != null) { info.append(line); line = reader.readLine(); } System.out.println("============================="); System.out.println("Contents of post request ends"); System.out.println("============================="); reader.close(); String ecod = conn.getContentEncoding(); if (ecod == null) { ecod = _default_encoding; } String resData = new String(java.net.URLDecoder.decode(info.toString(), "UTF-8").getBytes());// ecod conn.disconnect(); return resData; // Object obj = getResult(resData); } }
服务端:
服务端是一个servlet用来接收发过来的参数处理业务逻辑,向客户端返回信息
package com.hljw.health.y100.service.pinstitutions; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.alibaba.fastjson.JSON; import com.hljw.health.plat.service.pinstitutions.PInstitutionsService; import com.hljw.util.SpringUtil; import com.hljw.util.StringUtil; public class PInstitutionsServiceServlet extends HttpServlet{ private PInstitutionsService pInstitutionsService = (PInstitutionsService) SpringUtil.getBean("pInstitutionsService"); @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub this.doPost(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub System.out.println("ok"); System.out.println(pInstitutionsService); ResultObject res=parseResult(request);//解析参数 System.out.println(res); callBackPrint("哈哈,好的呢?dd", response);//想客户端打印信息 // pInstitutionsService.getPInstitutionsByOrgCode(institutions_code); } /** * 解析参数、回调的内容 * @param request * @return * @throws IOException */ private ResultObject parseResult(HttpServletRequest request) throws IOException{ StringBuffer info = new StringBuffer(); BufferedReader reader = new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF-8")); //防止中文乱码 String line = reader.readLine(); while (!StringUtil.isBlank(line)) { info.append(line); line = reader.readLine(); } ResultObject obj = null; if(info.length()>0){ obj = JSON.parseObject(info.toString(), ResultObject.class); } return obj; } /** * 回调打印信息 * @author hjh * @return */ private void callBackPrint(String content,HttpServletResponse response) throws IOException{ /* * 在调用getWriter之前未设置编码(既调用setContentType或者setCharacterEncoding方法设置编码), * HttpServletResponse则会返回一个用默认的编码(既ISO-8859-1)编码的PrintWriter实例。这样就会 * 造成中文乱码。而且设置编码时必须在调用getWriter之前设置,不然是无效的。 * */ response.setContentType("text/html;charset=UTF-8"); response.setCharacterEncoding("UTF-8"); PrintWriter out = response.getWriter(); //JSON在传递过程中是普通字符串形式传递的,这里简单拼接一个做测试 out.print(content); out.flush(); out.close(); } }
测试类
package com.hljw.health.y100.service.pinstitutions; import com.alibaba.fastjson.JSON; import com.hljw.health.y100.job.HttpClient; public class Test { public static void main(String[] args) { System.out.println("rrrr"); ResultObject res=new ResultObject(); res.setStatus("1"); res.setOpear("check中国"); String resStr = HttpClient.getResopnseData(JSON.toJSONString(res),"http://localhost:8080/healthplat/pInstitutions.action");//发送数据,并得到服务端返回的信息 System.out.println("**********"+resStr); } }
参数的传递用的json格式的数据,当然你也可以用其他的格式,值得注意的是
1.参数如果在服务端无法接收是因为在发送的方法里面没有设定,这个问题困扰了我很久,因为无论是servlet,还是struts1,struts2,都没有设置这一个,所以自己要设置一下。
httpConn.setRequestProperty("content-type", "text/html");//参数穿不过去请设置这一条
2.无论什么时候中文出现乱码是因为编码不统一,注意以下几个地方。
a.工具类里面发送的时候要设置中文utf-8编码
b.工具类接收服务端回调请求要设置UTF-8编码
c.服务端servlet接收参数流要用utf-8编码
d.服务端servlet想客户端打印字符的时候要设置UTF-8编码。
相关推荐
本知识点将深入探讨如何使用`HttpURLConnection`与Servlet协同工作,处理多文件参数以及实现断点上传功能。 首先,`HttpURLConnection`是Java API中的一个核心类,它负责提供HTTP协议的连接功能。相比Apache ...
HttpURLConnection实现三方接口HTTP调用调用,带有FILE文件参数
在给定的代码片段中,展示了如何使用`HttpURLConnection`进行文件下载。 首先,我们看到代码引入了`java.io`、`java.net`和`java.util`这三个包。`java.io`包含了输入/输出流,用于处理数据的读写;`java.net`包含...
本篇文章将详细讲解如何使用`HttpURLConnection`实现文件上传,同时涉及到服务器端处理上传文件的代码。我们将讨论以下核心知识点: 1. **HttpURLConnection介绍**: `HttpURLConnection`是Java标准库中的类,它是...
下面是一个使用HttpURLConnection上传文件的示例代码: ```java public class HttpConnectionUtil { public static String uploadFile(String actionUrl, String[] uploadFilePaths) { String end = "\r\n"; ...
HttpURLConnection调用三方HTTP接口,带有FILE文件参数
本篇文章将深入探讨HttpURLConnection的使用方法、特性以及一些关键的示例代码。 一、HttpURLConnection简介 HttpURLConnection继承自URLConnection,它提供了对HTTP协议的直接支持。相比于HttpClient,...
本篇文章将深入探讨如何在Android中简单使用`HttpURLConnection`进行网络请求。 首先,了解`HttpURLConnection`的基本用法。在Android中,网络操作通常在子线程(非UI线程)中进行,以避免阻塞主线程导致应用无响应...
本文将详细介绍如何使用`HttpURLConnection`和`HttpClient`这两种方式来实现这一目标。 首先,让我们从`HttpURLConnection`开始。`HttpURLConnection`是Java内置的HTTP客户端,它简单且易于使用,适用于轻量级的...
1. **创建连接**:使用`URL`对象构造一个`HttpURLConnection`实例,通常会通过`openConnection()`方法来实现。例如: ```java URL url = new URL("http://yourserver.com/upload"); HttpURLConnection connection...
通过以上分析可以看出,使用`HttpURLConnection`发送短信的过程主要包括了配置参数、编码内容、构建URL、创建连接并发送请求以及异常处理等几个步骤。这种方式虽然简单易行,但在实际生产环境中还需要考虑到安全性...
在本例中,我们将探讨如何使用`HttpURLConnection`来下载图片,这是一个基础但实用的网络编程任务。下面我们将详细介绍这个过程,并涉及到的相关知识点。 1. **HttpURLConnection简介**: `HttpURLConnection`是`...
在使用HttpUrlConnection发送GET请求时,我们将参数附加到URL上。例如,如果我们要从一个API获取JSON数据,URL可能类似于`http://api.example.com/data?key=value`。然后,我们可以创建一个HttpURLConnection实例,...
在这个主题中,我们将深入探讨HttpURLConnection的基本操作及其在实际应用中的使用。 首先,了解HttpURLConnection的基本结构是非常重要的。它继承自URLConnection类,提供了对HTTP协议的支持。通过URL对象的open...
HttpURLConnection的demo,里面有网络请求get post 上传文件,下载文件,介绍HttpURLConnection这个类整体流程是怎样使用的,方便初学者学习
`AsyncTask`包含三个泛型参数:`Params`、`Progress`和`Result`,分别代表输入参数类型、进度类型和返回结果类型。在`AsyncTask`中,主要涉及以下几个关键方法: 1. `onPreExecute()`:在执行任务前调用,通常用于...
本篇将详细讲解如何使用HttpURLConnection获取JSON数据并进行解析。首先,我们需要理解HttpURLConnection的基本用法,然后了解JSON数据的解析方法,以及如何在Android主线程和子线程之间通过Handler进行数据传递。 ...
本篇文章将深入探讨如何使用`HttpURLConnection`以POST方式提交请求。 ### 1. 创建连接 首先,我们需要获取到`HttpURLConnection`实例。这通常通过调用`URL`对象的`openConnection()`方法实现,然后强制转换为`...
在Android开发中,网络编程是不可或...使用HttpURLConnection可以方便地实现这些操作,提高应用的用户体验。在实际开发中,我们还需要考虑多线程下载、并发控制、下载队列管理等高级特性,以进一步优化性能和资源利用。