java,http协议,接口
接口和协议的总结

接口和协议的总结1. 概述在计算机科学和网络通信中,接口和协议是两个非常重要的概念。
在软件开发过程中,接口定义了不同组件之间的交互规范,而协议则规定了数据传输和通信的规则。
本文将对接口和协议进行总结,并介绍它们在软件开发和网络通信中的应用。
2. 接口在软件开发中,接口是一种定义了方法和属性的抽象数据类型。
它定义了一个组件暴露给其他组件的公共访问点。
通过接口,可以实现组件之间的解耦和模块化,使得不同组件可以独立开发和测试。
接口的主要作用有以下几个方面:•定义行为规范:接口定义了组件对外提供的方法和属性,限定了组件与外界的交互方式和数据格式。
•实现多态:通过接口,可以根据不同的实现类调用相同的接口方法,实现多态性。
•简化开发过程:接口可以提供一个清晰的开发契约,帮助开发人员准确地理解组件之间的交互方式和数据格式。
在面向对象编程中,接口通常使用关键字interface来定义,不同编程语言对接口的实现方式有所差异。
例如,在Java中,接口是一种抽象数据类型,使用interface关键字定义,而在C#中,接口也是一种抽象数据类型,使用interface 关键字定义。
3. 协议在网络通信中,协议是一种规定了数据传输和通信的规则。
它规定了不同设备和程序之间的交互方式,确保数据能够正确地传输和解释。
协议可以分为不同的层次,每个层次负责不同的功能。
其中,最常用的是TCP/IP协议栈。
TCP/IP协议栈由TCP协议和IP协议组成,其中TCP协议负责可靠的数据传输,而IP协议负责数据的路由和寻址。
协议的主要作用有以下几个方面:•确保数据的可靠性:协议可以确保数据在传输过程中不丢失、不损坏和不重复。
•提供安全的通信:协议可以加密数据,防止数据被窃取和篡改。
•支持不同设备和程序的互联:协议定义了不同设备和程序之间的交互方式,使得它们可以互相通信。
常见的网络协议还包括HTTP协议、FTP协议、SMTP协议等。
它们都有自己的特点和应用场景,用于不同的网络通信需求。
接口分类(http接口、api接口、RPC接口、RMI、webservice、Restfu。。。

接⼝分类(http接⼝、api接⼝、RPC接⼝、RMI、webservice、Restfu。
在这之前⼀定要好好理解⼀下接⼝的含义,我觉得在这⼀类中接⼝理解成规则很恰当。
http接⼝:基于HTTP协议的开发接⼝.这个并不能排除没有使⽤其他的协议。
api接⼝:API(Application Programming Interface)应⽤程序编程接⼝,应⽤也包括⽹络应⽤程序,就像api⽂档基本上就是使⽤说明书,API接⼝可以简单理解成“应⽤程序使⽤接⼝”。
RPC接⼝:Remote Procedure Calls 远程过程调⽤ (RPC) 是⼀种协议,程序可使⽤这种协议向⽹络中的另⼀台计算机上的程序请求服务。
由于使⽤ RPC 的程序不必了解⽀持通信的⽹络协议的情况,因此 RPC 提⾼了程序的互操作性。
在 RPC 中,发出请求的程序是客户程序,⽽提供服务的程序是服务器。
RPC(远程过程调⽤)是⼀项⼴泛⽤于⽀持分布式应⽤程序(不同组件分布在不同计算机上的应⽤程序)的技术。
RPC 的主要⽬的是为组件提供⼀种相互通信的⽅式,使这些组件之间能够相互发出请求并传递这些请求的结果。
没有语⾔限制。
RMI:RMI(Remote Method Invocation,远程⽅法调⽤)RMI是针对于java语⾔的, RMI 允许您使⽤Java编写分布式对象Webservice接⼝:Webservice是系统对外的接⼝,⽐如你要从别的⽹站或服务器上获取资源或信息,别⼈肯定不会把数据库共享给你,他只能给你提供⼀个他们写好的⽅法来获取数据,你引⽤他提供的接⼝就能使⽤他写好的⽅法,从⽽达到数据共享的⽬的。
RESTful :简称 REST,是描述了⼀个架构样式的⽹络系统,其核⼼是⾯向资源,REST专门针对⽹络应⽤设计和开发⽅式,以降低开发的复杂性,提⾼系统的可伸缩性。
REST提出设计概念和准则为:1.⽹络上的所有事物都可以被抽象为资源(resource)2.每⼀个资源都有唯⼀的资源标识(resource identifier),对资源的操作不会改变这些标识3.所有的操作都是⽆状态的关于RPC和RMI的区别,各类博客有很多,我就不说了。
常用协议对应的端口号

常用协议对应的端口号常用协议对应的端口号是网络通信中非常重要的知识点,它们用于标识和区分不同的网络服务。
本文将介绍一些常见的协议以及它们对应的端口号。
1. HTTP (HyperText Transfer Protocol) - 端口号:80HTTP 是用于在 Web 浏览器和 Web 服务器之间传输文本、图像和其他多媒体文件的协议。
通过输入 URL,浏览器会向服务器发送 HTTP 请求,并通过 HTTP 响应返回请求的数据。
2. HTTPS (HyperText Transfer Protocol Secure) - 端口号:443 HTTPS 是 HTTP 的安全版本,它通过使用 SSL/TLS 协议对数据进行加密传输,确保数据在传输过程中的安全性。
3. FTP (File Transfer Protocol) - 端口号:20 (数据传输) 和 21 (控制)FTP 是一种用于在客户端和服务器之间传输文件的协议。
它使用两个不同的端口,一个用于数据传输,另一个用于控制和命令。
4. SSH (Secure Shell) - 端口号:22SSH 是一种通过加密来保护远程连接的协议。
它用于在本地计算机和远程服务器之间建立安全的终端会话。
5. SMTP (Simple Mail Transfer Protocol) - 端口号:25SMTP 是用于电子邮件传输的协议。
它定义了如何将电子邮件从发送方的邮件服务器发送到接收方的邮件服务器。
6. POP3 (Post Office Protocol version 3) - 端口号:110POP3 是一种用于从邮件服务器上下载电子邮件的协议。
它允许用户将邮件从服务器上下载到本地计算机上的邮件客户端。
7. IMAP (Internet Message Access Protocol) - 端口号:143IMAP 是一种用于从邮件服务器上接收和管理电子邮件的协议。
JAVA调用HTTP接口POST或GET实现方式

JAVA调⽤HTTP接⼝POST或GET实现⽅式HTTP是⼀个客户端和服务器端请求和应答的标准(TCP),客户端是终端⽤户,服务器端是⽹站。
通过使⽤Web浏览器、⽹络爬⾍或者其它的⼯具,客户端发起⼀个到服务器上指定端⼝(默认端⼝为80)的HTTP请求。
具体POST或GET实现代码如下:package com.yoodb.util;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import mons.httpclient.DefaultHttpMethodRetryHandler;import mons.httpclient.HttpClient;import mons.httpclient.HttpException;import mons.httpclient.methods.GetMethod;import mons.httpclient.methods.PostMethod;import mons.httpclient.params.HttpMethodParams;public class HttpConnectUtil {private static String DUOSHUO_SHORTNAME = "yoodb";//多说短域名 ****.yoodb.****private static String DUOSHUO_SECRET = "xxxxxxxxxxxxxxxxx";//多说秘钥/*** get⽅式* @param url* @author * @return*/public static String getHttp(String url) {String responseMsg = "";HttpClient httpClient = new HttpClient();GetMethod getMethod = new GetMethod(url);getMethod.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,new DefaultHttpMethodRetryHandler());try {httpClient.executeMethod(getMethod);ByteArrayOutputStream out = new ByteArrayOutputStream();InputStream in = getMethod.getResponseBodyAsStream();int len = 0;byte[] buf = new byte[1024];while((len=in.read(buf))!=-1){out.write(buf, 0, len);}responseMsg = out.toString("UTF-8");} catch (HttpException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {//释放连接getMethod.releaseConnection();}return responseMsg;}/*** post⽅式* @param url* @param code* @param type* @author * @return*/public static String postHttp(String url,String code,String type) {String responseMsg = "";HttpClient httpClient = new HttpClient();httpClient.getParams().setContentCharset("GBK");PostMethod postMethod = new PostMethod(url);postMethod.addParameter(type, code);postMethod.addParameter("client_id", DUOSHUO_SHORTNAME);postMethod.addParameter("client_secret", DUOSHUO_SECRET);try {httpClient.executeMethod(postMethod);ByteArrayOutputStream out = new ByteArrayOutputStream();InputStream in = postMethod.getResponseBodyAsStream();int len = 0;byte[] buf = new byte[1024];while((len=in.read(buf))!=-1){out.write(buf, 0, len);}responseMsg = out.toString("UTF-8");} catch (HttpException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} finally {postMethod.releaseConnection();}return responseMsg;}}1、下⾯说⼀下多说单点登录(SSO)获取access_token访问多说API的凭证。
java 不同系统之间传输数据的方法

java 不同系统之间传输数据的方法Java是一种强大且广泛应用的编程语言,用于开发各种类型的应用程序。
在实际开发中,经常需要在不同的系统之间传输数据。
本文将介绍一些常用的方法来实现Java不同系统之间的数据传输。
1. 使用Socket通信Socket通信是一种常用的网络通信方式,可以实现不同系统之间的数据传输。
通过Socket,我们可以在客户端和服务器之间建立一条双向通道进行数据交换。
在Java中,可以使用Java的原生Socket库来实现Socket通信。
客户端和服务器端通过准确的IP地址和端口号来建立连接。
客户端可以使用Socket类来与服务器进行通信,而服务器则使用ServerSocket类监听并接受客户端连接。
2. 使用HTTP协议HTTP协议是一种应用层协议,常用于Web应用程序中。
通过HTTP协议,不同系统之间可以通过发送和接收HTTP请求和响应来进行数据传输。
在Java中,可以使用Java的HttpURLConnection类或者第三方库,如Apache 的HttpClient来实现HTTP通信。
通过发送HTTP请求,可以将数据以请求参数或JSON/XML等格式发送到目标系统,并接收目标系统的HTTP响应。
3. 使用WebServiceWebService是一种通过网络进行通信的软件系统。
它可以使不同系统之间的应用程序通过Web服务接口进行数据传输和交互。
在Java中,可以使用Java的JAX-WS和JAX-RPC等API来开发和使用WebService。
通过定义WebService接口和实现相应的服务端和客户端,可以在不同系统之间轻松地传输数据。
4. 使用消息队列消息队列是一种常用的异步通信方式,允许不同系统之间以消息的形式传递数据。
消息队列将数据发送方发送的消息存储在队列中,接收方从队列中接收并处理消息。
在Java中,可以使用ActiveMQ、RabbitMQ等消息中间件来实现消息队列。
Java调用HttpHttps接口(1)--编写服务端

Java调⽤HttpHttps接⼝(1)--编写服务端 Http接⼝输⼊的数据⼀般是键值对或json数据,返回的⼀般是json数据。
本系列⽂章主要介绍Java调⽤Http接⼝的各种⽅法,本⽂主要介绍服务端的编写,⽅便后续⽂章⾥的客户端的调⽤。
⽂中所使⽤到的软件版本:Java 1.8.0_191、SpringBoot 2.2.1.RELEASE。
1、服务端Controllerpackage com.inspur.demo.http.server;import java.io.BufferedInputStream;import java.io.BufferedOutputStream;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.InputStream;import java.io.OutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.multipart.MultipartFile;import mon.entity.CallResult;import mon.util.FileUtil;import er;@Controller@RequestMapping(value="/httptest/", method = {RequestMethod.GET, RequestMethod.POST})public class HttpTestController {private static Logger logger = LoggerFactory.getLogger(HttpTestController.class);@RequestMapping(value = "getUser", produces = "application/json;charset=UTF-8")@ResponseBodypublic CallResult<User> getUser(String userId, String userName) {("userId={},userName={}", userId, userName);User user = new User();user.setUserId(userId);user.setUserName(userName);CallResult<User> result = new CallResult<User>(0, "OK", user);return result;}/*** 传⼊json* @param user* @return*/@RequestMapping("addUser")@ResponseBodypublic CallResult<User> addUser(@RequestBody User user) {(user.toString());CallResult<User> result = new CallResult<User>(0, "OK", user);return result;}/*** 上传⽂件* 这种⽅式不适合页⾯form表单上传⽂件,适合客户端调⽤* @param request* @return*/@RequestMapping(value = "upload", produces = "application/json;charset=UTF-8")@ResponseBodypublic CallResult<String> upload(HttpServletRequest request) {InputStream in = null;OutputStream out = null;CallResult<String> result = new CallResult<String>(0, "OK", "上传成功");try {in = new BufferedInputStream(request.getInputStream(), 16 * 1024);//假设上传的就是jpg⽂件String fileName = "d:/temp/upload_" + System.currentTimeMillis() + ".jpg";out = new BufferedOutputStream(new FileOutputStream(fileName), 16 * 1024);byte[] buffer = new byte[16 * 1024];int len = 0;while ((len = in.read(buffer)) != -1) {out.write(buffer, 0, len);}} catch (Exception e) {result = new CallResult<String>(-1, "发⽣异常", "");e.printStackTrace();} finally {FileUtil.close(in);FileUtil.close(out);}("upload返回结果:{}", result);return result;}/*** 上传⽂件及发送键值对数据* @param file* @param param1* @param param2* @return*/@RequestMapping("multi")@ResponseBodypublic CallResult<String> multi(@RequestParam("file") MultipartFile file, String param1, String param2) { ("file={},param1={},param2={}", file.getOriginalFilename(), param1, param2);InputStream in = null;OutputStream out = null;CallResult<String> result = new CallResult<String>(0, "OK", "上传成功");try {in = new BufferedInputStream(file.getInputStream(), 16 * 1024);String originalFilename = file.getOriginalFilename();//ie上传⽂件该值是全路径,处理下if (originalFilename.indexOf("\\") > -1) {originalFilename = originalFilename.substring(originalFilename.indexOf("\\") + 1);}String fileName = "d:/temp/multi_" + System.currentTimeMillis() + "_" + originalFilename;out = new BufferedOutputStream(new FileOutputStream(fileName), 16 * 1024);byte[] buffer = new byte[16 * 1024];int len = 0;while ((len = in.read(buffer)) != -1) {out.write(buffer, 0, len);}} catch (Exception e) {result = new CallResult<String>(-1, "发⽣异常", "");e.printStackTrace();} finally {FileUtil.close(in);FileUtil.close(out);}("multi返回结果:{}", result);return result;}/*** 下载⽂件* @param request* @param response*/@RequestMapping("download")public void download(HttpServletRequest request, HttpServletResponse response) {int BUFFER_SIZE = 16 * 1024;BufferedInputStream bis = null;OutputStream out = null;try {String fileName = "a.jpg";String urlFileName = "";if (request.getHeader("User-Agent").toLowerCase().indexOf("firefox") > 0) {urlFileName = new String(fileName.getBytes("UTF-8"), "ISO8859-1");} else {urlFileName = .URLEncoder.encode(fileName, "UTF-8");}response.reset();response.setContentType("application/octet-stream");response.setHeader("Content-Disposition", "attachment; filename=\"" + urlFileName + "\"");response.setHeader("Connection", "close");bis = new BufferedInputStream(new FileInputStream("d:/" + fileName), BUFFER_SIZE);out = new BufferedOutputStream(response.getOutputStream(), BUFFER_SIZE);byte buf[] = new byte[BUFFER_SIZE];int len;while ((len = bis.read(buf)) != -1) {out.write(buf, 0, len);}} catch (Exception e) {e.printStackTrace();} finally {FileUtil.close(bis);FileUtil.close(out);}}}2、其他辅助类2.1、CallResult类package mon.entity;import java.io.Serializable;import com.fasterxml.jackson.core.JsonProcessingException;import com.fasterxml.jackson.databind.ObjectMapper;/*** @param <T>*/public class CallResult<T> implements Serializable {private static final long serialVersionUID = 1L;/*** 返回码* 0 正常,其他异常*/private int returnCode = 0;/*** 描述*/private String description = "OK";/*** 结果数据*/private T result;public CallResult(){}public CallResult(int returnCode, String description) {this.returnCode = returnCode;this.description = description;}public CallResult(int returnCode, String description, T result) {this.returnCode = returnCode;this.description = description;this.result = result;}public int getReturnCode() {return returnCode;}public void setReturnCode(int returnCode) {this.returnCode = returnCode;}public String getDescription() {return description;}public void setDescription(String description) {this.description = description;}public T getResult() {return result;}public void setResult(T result) {this.result = result;}@Overridepublic String toString() {//return JSON.toJSONString(this, SerializerFeature.WriteMapNullValue, SerializerFeature.WriteNullListAsEmpty, SerializerFeature.WriteNullStringAsEmpty);try {return new ObjectMapper().writeValueAsString(this);} catch (JsonProcessingException e) {e.printStackTrace();}return "";}}View Code2.2、User类package com.inspur.demo.http.entity;public class User {private String userId;private String userName;public String getUserId() {return userId;}public void setUserId(String userId) {erId = userId;}public String getUserName() {return userName;}public void setUserName(String userName) {erName = userName;}@Overridepublic String toString() {return "User [userId=" + userId + ", userName=" + userName + "]"; }}View Code2.2、FileUtil类package mon.util;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;/*** ⽂件操作⼯具*/public class FileUtil {private FileUtil() {}public static void close(InputStream in) {try {if (in != null) {in.close();}} catch (IOException e) {e.printStackTrace();}}public static void close(OutputStream out) {try {if (out != null) {out.close();}} catch (IOException e) {e.printStackTrace();}}}View Code3、接⼝地址在本地部署后,访问地址为:4、Https接⼝Https接⼝可以通过openssl⽣成证书、nginx设置⽅向代理来实现;由于这不是本系列⽂章的重点,这⾥就不详细介绍了,感兴趣的可以搜索研究。
JAVA代码实现HTTP请求的常用方法

JAVA代码实现HTTP请求的常用方法在Java中,有多种方法可以实现HTTP请求。
下面将介绍几种常用的方法。
1. 使用Java内置的URL类和HttpURLConnection类:```javaimport java.io.BufferedReader;import java.io.InputStreamReader;public class HTTPRequestExamplepublic static void main(String[] args) throws ExceptionURL obj = new URL(url);HttpURLConnection con = (HttpURLConnection)obj.openConnection(;//设置请求方法con.setRequestMethod("GET");//添加请求头con.setRequestProperty("User-Agent", "Mozilla/5.0");//获取响应码int responseCode = con.getResponseCode(;System.out.println("Response Code: " + responseCode);BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream());String inputLine;StringBuffer response = new StringBuffer(;while ((inputLine = in.readLine() != null)response.append(inputLine);}in.close(;//打印响应内容System.out.println(response.toString();}```2. 使用第三方库HttpClient:```javapublic class HTTPRequestExamplepublic static void main(String[] args) throws Exception //创建GET请求//发送请求并获取响应//解析响应实体内容//打印响应内容System.out.println(response);// 关闭HttpClient连接}```3. 使用第三方库OkHttp:```javapublic class HTTPRequestExamplepublic static void main(String[] args) throws Exception// 创建OkHttpClient对象OkHttpClient okHttpClient = new OkHttpClient(;// 创建Request对象Request request = new Request.Builder.url(url).build(;//发送请求并获取响应Response response = okHttpClient.newCall(request).execute(;String responseBody = response.body(.string(;//打印响应内容System.out.println(responseBody);}```4. 使用第三方库RestTemplate(Spring框架的一部分):```javaimport org.springframework.web.client.RestTemplate;public class HTTPRequestExamplepublic static void main(String[] args)// 创建RestTemplate对象RestTemplate restTemplate = new RestTemplate(;//发送GET请求,并获取响应ResponseEntity<String> responseEntity = restTemplate.getForEntity(url, String.class);//获取响应内容String response = responseEntity.getBody(;//打印响应内容System.out.println(response);}```这些方法提供了不同的方式来实现HTTP请求,使用Java内置的URL 类和HttpURLConnection类相对简单,但是需要自己处理底层连接和数据读取。
Java获取http和https协议返回的json数据

Java获取http和https协议返回的json数据现在很多公司都是将数据返回⼀个json,⽽且很多第三⽅接⼝都是返回json数据,⽽且还需要使⽤到http协议,http协议是属于为加密的协议,⽽https协议需要SSL证书,https是将⽤户返回的信息加密处理,然⽽我们要获取这些数据,就需要引⼊SSL证书。
现在我提供两个⽅法,帮助各位如何获取http和https返回的数据。
获取http协议的数据的⽅法,如下:public static JSONObject httpRequest(String requestUrl, String requestMethod) {JSONObject jsonObject = null;StringBuffer buffer = new StringBuffer();try {URL url = new URL(requestUrl);// http协议传输HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();httpUrlConn.setDoOutput(true);httpUrlConn.setDoInput(true);httpUrlConn.setUseCaches(false);// 设置请求⽅式(GET/POST)httpUrlConn.setRequestMethod(requestMethod);if ("GET".equalsIgnoreCase(requestMethod))httpUrlConn.connect();// 将返回的输⼊流转换成字符串InputStream inputStream = httpUrlConn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String str = null;while ((str = bufferedReader.readLine()) != null) {buffer.append(str);}bufferedReader.close();inputStreamReader.close();// 释放资源inputStream.close();inputStream = null;httpUrlConn.disconnect();jsonObject = JSONObject.fromObject(buffer.toString());} catch (Exception e) {e.printStackTrace();}return jsonObject;}获取https协议的数据的⽅法,如下:public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr) {JSONObject jsonObject = null;StringBuffer buffer = new StringBuffer();try {// 创建SSLContext对象,并使⽤我们指定的信任管理器初始化TrustManager[] tm = { new MyX509TrustManager() };SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");sslContext.init(null, tm, new java.security.SecureRandom());// 从上述SSLContext对象中得到SSLSocketFactory对象SSLSocketFactory ssf = sslContext.getSocketFactory();URL url = new URL(requestUrl);HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();httpUrlConn.setSSLSocketFactory(ssf);httpUrlConn.setDoOutput(true);httpUrlConn.setDoInput(true);httpUrlConn.setUseCaches(false);// 设置请求⽅式(GET/POST)httpUrlConn.setRequestMethod(requestMethod);if ("GET".equalsIgnoreCase(requestMethod))httpUrlConn.connect();// 当有数据需要提交时if (null != outputStr) {OutputStream outputStream = httpUrlConn.getOutputStream();// 注意编码格式,防⽌中⽂乱码outputStream.write(outputStr.getBytes("UTF-8"));outputStream.close();}// 将返回的输⼊流转换成字符串InputStream inputStream = httpUrlConn.getInputStream();InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");BufferedReader bufferedReader = new BufferedReader(inputStreamReader);String str = null;while ((str = bufferedReader.readLine()) != null) {buffer.append(str);}bufferedReader.close();inputStreamReader.close();// 释放资源inputStream.close();inputStream = null;httpUrlConn.disconnect();jsonObject = JSONObject.fromObject(buffer.toString());} catch (ConnectException ce) {log.error("Weixin server connection timed out.");} catch (Exception e) {log.error("https request error:{}", e);}return jsonObject;}获取https协议的数据和获取http协议的区别在于// 创建SSLContext对象,并使⽤我们指定的信任管理器初始化TrustManager[] tm = { new MyX509TrustManager() };SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");sslContext.init(null, tm, new java.security.SecureRandom());// 从上述SSLContext对象中得到SSLSocketFactory对象SSLSocketFactory ssf = sslContext.getSocketFactory();URL url = new URL(requestUrl);HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();httpUrlConn.setSSLSocketFactory(ssf);⼤家有更好的⽅法欢迎留⾔分享,以上就是本次共享的内容。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
竭诚为您提供优质文档/双击可除java,http协议,接口篇一:http接口2.客户端:通过httpinvoker代理向服务器端发送请求,远程调用服务接口的方法3.服务器端与客户端通信的数据需要序列化配置服务器端和客户端的步骤配置服务器端1.添加springjaR文件建议使用spring2+.jar版本2.创建服务接口3.创建服务接口的具体实现类4.公开服务配置客户端1.添加springjaR文件建议使用spring2+.jar版本2.创建服务接口3.访问服务实例讲解服务器端1.服务接口:ucservice.java它提供两项服务,查询用户信息和记录日志,如下:publicinterfaceucservice{publicuserinfogetuserinfobyname(stringusername);publicintrecordlog(stringusername,stringpoint,strin goperate,stringdesc);}说明:举这个列子是因为其比较有代表性,它将展示普通数据类型(int,long等)和复杂数据类型(dto等)的远程调用方式。
userinfo是一个普通的dto,代码如下:publicclassuserinfoimplementsserializable{privatestaticfinallongserialVersionuid=-69709675067 12260305l;/**用户名*/privatestringusername;/**电子邮箱*/privatestringemail;/**注册日期*/privatedateregistdate;publicstringgetusername(){returnusername;}publicvoidsetusername(stringusername){ername=username;}publicstringgetemail(){returnemail;}publicvoidsetemail(stringemail){this.email=email;}publicdategetRegistdate(){returnregistdate;}publicvoidsetRegistdate(dateregistdate){this.registdate=registdate;}}注意:因为是在网络间传输对象,所以需要将userinfo 实现serializable接口,并指定一个serialVersionuid(任意值即可,同时客户端也要有这个类,否则在客户端接收对象时会因为serialVersionuid不匹配而出现异常)回到ucservice.java,它提供了两个服务(在这里一个方法代表一个服务功能),我们需要具体的实现类来实现真正的服务2.实现类是ucserviceimpl.javapublicclassucserviceimplimplementsucservice{privatestaticloggerpointrecordlog=logger.getlogger( "pointrecordlog");privatestaticloggerlogger=logger.getlogger(ucservic eimpl.class);privateucFacadeucFacade;publicvoidsetucFacade(ucFacadeucFacade){this.ucFacade=ucFacade;}publicuserinfogetuserinfobyname(stringusername){ userinfouser=null;try{user=ucFacade.getuserinfodetail(username);logger.debug("getuserinfosuccessbyusername:"+userna me);}catch(throwablet){logger.error("getuserinfofailbyusername:"+username, t);}returnuser;}publicintrecordlog(stringusername,stringpoint,strin goperate,stringdesc){intresult=0;try{(username+"-"+point+"-"+operate+ "-"+desc);}catch(throwablet){result=-1;logger.error(t);}returnresult;}}说明:ucFacade是通过spring注入的一个数据查询类,因为它与httpinvoker没有直接关系,所以不进行介绍。
3.公开服务ucservice.java2web-inF/application-context.xml:将接口声明为httpinvoker服务class="org.springframework.remoting.httpinvoker.htt pinvokerserviceexporter">value="qin.baike.service.ucservice">说明:httpinvokerserviceexporter实际上是一个springmvc控制器,它处理客户端的请求并调用服务实现。
2web-inF/service-servlet.xml:httpinvokerserviceexporter实际上是一个springmvc控制器,所以需要为其提供springuRl处理器,这里我们使用simpleurlhandlermappingclass="org.springframework.web.servlet.handler.simp leurlhandlermapping">httpservice2web-inF/web.xml:配置spring监听及dispatcherservletcontextconfiglocation/web-inF/application-context.xmlorg.springframework.web.context.contextloaderlisten erserviceorg.springframework.web.servlet.dispatcherservlet1篇二:使用java控制http协议客户端应用.*;importjava.io.*;importjava.util.properties;importjava.util.enumeration;publicclasshttp{protectedsocketclient;protectedbufferedoutputstreamsender;protectedbufferedinputstreamreceiver;protectedbytearrayinputstreambytestream;protecteduRltarget;privateintresponsecode=-1;privatestringresponsemessage="";privatestringserverVersion="";privatepropertiesheader=newproperties();publichttp(){}publichttp(stringurl){get(url);}/*get方法根据uRl,会请求文件、数据库查询结果、程序运行结果等多种内容*/publicvoidget(stringurl){ try{checkhttp(url);openserver(target.gethost(),target.getport());stringcmd="get"+getuRlFormat(target)+"http/1.0\r\n"+getbaseheads()+"\r\n";sendmessage(cmd);receivemessage();}catch(protocolexceptionp){p.printstacktrace();return;}catch(unknownhostexceptione){e.printstacktrace();return;}catch(ioexceptioni)i.printstacktrace();return;}}/**head方法只请求uRl的元信息,不包括uRl本身。
若怀疑本机和服务器上的*文件相同,用这个方法检查最快捷有效。
*/publicvoidhead(stringurl){checkhttp(url);openserver(target.gethost(),target.getport());stringcmd="head"+getuRlFormat(target)+"http/1.0\r\n "+getbaseheads()+"\r\n";sendmessage(cmd);receivemessage();}catch(protocolexceptionp){p.printstacktrace();return;}catch(unknownhostexceptione){。