Java访问远程服务

随着webService的崛起,我们开始中会越来越多的使用到访问远程webService服务。当然对于不同的webService框架一般都有自己的client包供使用,但是如果使用webService框架自己的client包,那么必然需要在自己的代码中引入它的包,如果同时调运了多个不同框架的webService,那么就需要同时引入多个不同的client包,这样做是很烦的。Java本生提供访问远程服务的包,在java.net.*下。接下来我们就用Java原生的package访问webService。

1、发送GET请求


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

class ReadByGet implements Runnable {

public void run() {

try {

URL url = new URL(

"http://fanyi.youdao.com/openapi.do?keyfrom=gusi123123&key=1075925116&type=data&doctype=json&version=1.1&q=hello");//此处访问有道的webService服务,参数都在url中

URLConnection connection = url.openConnection();//得到一个连接对象

InputStream is = connection.getInputStream();

InputStreamReader isr = new InputStreamReader(is, "UTF-8");

BufferedReader br = new BufferedReader(isr);//用于读取返回的数据流

StringBuffer sb = new StringBuffer();//用于接收返回的数据

String line = null;

while ((line = br.readLine()) != null) {

sb.append(line);

}

System.out.println(sb.toString());

br.close();//关闭各种连接

isr.close();

is.close();

} catch (IOException e) {

e.printStackTrace();

}

}

}

2、发送POST请求


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

class ReadByPost implements Runnable {

public void run() {

try {

URL url = new URL("http://fanyi.youdao.com/openapi.do");//此处通过post访问有道webService

// URLConnection connection = url.openConnection();

HttpURLConnection connection = (HttpURLConnection) url

.openConnection();//得到一个http的连接对象

connection.addRequestProperty("encoding", "UTF-8");

connection.setRequestMethod("POST");//设置请求方式

connection.setDoInput(true);//设置可写入

connection.setDoOutput(true);//设置可读取

OutputStream os = connection.getOutputStream();

OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");

BufferedWriter bw = new BufferedWriter(osw);//定义写入流对象

bw.write("keyfrom=gusi123123&key=1075925116&type=data&doctype=xml&version=1.1&q=hello");

bw.flush();//通过写入流对象写入请求参数

InputStream is = connection.getInputStream();

InputStreamReader isr = new InputStreamReader(is, "UTF-8");

BufferedReader br = new BufferedReader(isr);//定义读取流对象

StringBuffer sb = new StringBuffer();

String line = null;

while ((line = br.readLine()) != null) {

sb.append(line);

}//通过读取流读取返回数据

//关闭各种连接对象

br.close();

isr.close();

is.close();

bw.close();

osw.close();

os.close();

System.out.println(sb.toString());

} catch (IOException e) {

e.printStackTrace();

}

}

}

通过上面也发现使用java原生的package访问webService比较麻烦,然后我们伟大的apache也给我们提供通用的访问webService的jar包,需要的jar包依赖是:(使用到的类在org.apache.http.*)

<dependency>

<groupId>org.apache.httpcomponents</groupId>

<artifactId>httpclient</artifactId>

<version>4.3.6</version>

</dependency>

3、通过httpclient发送GET请求


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

public class ReadByClientGet implements Runnable {

HttpClient client = HttpClients.createDefault();

public void run() {

String uri = "http://www.baidu.com";//访问百度

HttpGet get = new HttpGet(uri);//得到请求对象

try {

HttpResponse response = client.execute(get);//执行访问请求

HttpEntity entity = response.getEntity();//得到返回数据

String result = EntityUtils.toString(entity, "UTF-8");//将返回数据输出

System.out.println(result);

} catch (ClientProtocolException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

4、通过httpclient发送POST请求


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

public class ReadByClientPost implements Runnable {

HttpClient client = HttpClients.createDefault();//创建一个client对象

public void run() {

try {

String uri = "http://fanyi.youdao.com/openapi.do";//post访问有道webService

HttpPost post = new HttpPost(uri);//得到post请求对象

//构造请求参数,通过NameValuePair对象(类似于Map集合)

List<NameValuePair> parameters = new ArrayList<NameValuePair>();

parameters.add(new BasicNameValuePair("keyfrom", "gusi123123"));

parameters.add(new BasicNameValuePair("key", "1075925116"));

parameters.add(new BasicNameValuePair("type", "data"));

parameters.add(new BasicNameValuePair("doctype", "json"));

parameters.add(new BasicNameValuePair("version", "1.1"));

parameters.add(new BasicNameValuePair("q", "java"));

post.setEntity(new UrlEncodedFormEntity(parameters,"UTF-8"));

HttpResponse response = client.execute(post);//执行post请求,并且接收返回数据

HttpEntity entity = response.getEntity();

String result = EntityUtils.toString(entity, "UTF-8");

System.out.println(result);//输出返回数据

} catch (ClientProtocolException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

}

通过上面httpclient只是最简单的基本的访问webService服务。当然还有很多其他细节以及功能可以设计和处理。接下来通过测试方法测试上面的四种访问请求的结果:(输出结果不再粘贴)


1

2

3

4

5

6

7

8

public class Main {

public static void main(String[] args) {

// new Thread(new ReadByGet()).start();

// new Thread(new ReadByPost()).start();

// new Thread(new ReadByClientGet()).start();

//new Thread(new ReadByClientPost()).start();

}

}

时间: 2024-10-29 14:40:42

Java访问远程服务的相关文章

Spring整合Hessian访问远程服务

声明:该文章转载自Spring整合Hessian访问远程服务,本人搬过来只是为了记录下学习Hessian的过程,忘此博主理解,在此感谢,等本人有能力了再学一些原创的东东,本人实践了下,hessianServer项目不是web project,由于较菜,花了一个下午才把java project转换成为web project. 项目下载: hessianServer:http://files.cnblogs.com/ontheroad_lee/hessianServer.rar hessianCli

Java 访问指示符

Java 访问指示符 poublic,protected 以及 private 都置于方法或数据成员的前面.每 个访问指示符都只控制着对那个特定定义的访问 public: 用public修饰的类.类属变量及方法,包内及包外的任何类(包括子类和普通类)均可以访问: protected: 用protected修饰的类.类属变量及方法,包内的任何类及包外那些继承了该类的子类才能访问 protected 关键字为我们引入了一种名为"继承"的概念,它以现有的类为 基础,并在其中加入新的成员,同时

Java访问USB设备

最近在用Java访问RDing设备,使用的是Java HID API.使用过程中发现一个问题,由于是嵌入式小白,不知道如何向USB设备发送report.于是想到可以看看自带的软件如何访问USB的.找到了一个叫做Bus Hound的软件.非常小,但是功能很全,可以看到电脑上所有USB设备的通信信息.如下图所示.这样就可以看到控制信息和读入读出信息.

Java访问数据库

首先简介一下JDBC: JDBC:Java DataBase Connection. JDBC:Java数据库连接.它是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问. 它由一组用Java语言编写的类和接口组成. JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序,同时,JDBC也是个商标名. 一.Java访问数据库的原理: 举个例子来讲:Oracle.SQLServer.MySQL.DB2等数据库可以类比为“水厂”,Con

Java访问权限控制

访问权限控制   java提供了访问权限修饰词,以供类库开发人员向客户端程序员指明哪些是可用的,哪些是不可用的.访问权限控制的等级,从最大权限到最小权限依次是:public.protected.包访问权限(没有关键字).private. 包:库单元 包内有一组类,它们在单一名字空间之下被组织在了一起.如果你向导入某个标准库中的类的话,可以使用import关键字.我们之所以要导入,就是要提供一个管理名字空间的机制.所有类成员的名称都是彼此分离的.所以具有相同方法的不同类在程序运行时不会出现错误的.

JAVA访问URL

JAVA访问URL: package Test; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URI; import java.net.URISyntaxException; import java.

java访问控制符

当修饰符修饰成员变量和方法时: private(当前类访问权限):自身的private只能在当前类的内部被访问. 例子说明: class Circle{ private static double pi = 3.14; private double radius; public Circle(double r){ radius = r; } //获得圆数组中半径最大值 public static double compare(Circle[] cirs){ double max = cirs[0

[JavaWeb基础] 003.JAVA访问Mysql数据库

上面两篇讲解了简单的JSP + Servlet的搭建和请求,那么后面我们肯定要用到数据交互,也就是操纵数据库的数据,包括对数字的增加,删除,修改,查询.我们就用简单的MySql来做例子 我们需要引入驱动包mysql-connector-java.jar,自行去网上下载,有很多. 下面我跟着代码看看怎么进行增删改查 1.打开数据库 // 驱动程序名 private String driver = "com.mysql.jdbc.Driver"; // URL指向要访问的数据库名scutc

Java 访问权限控制:你真的了解 protected 关键字吗?

摘要: 在一个类的内部,其成员(包括成员变量和成员方法)能否被其他类所访问,取决于该成员的修饰词:而一个类能否被其他类所访问,取决于该类的修饰词.Java的类成员访问权限修饰词有四类:private,无(默认情况下,包访问权限),protected 和 public,而其中只有包访问权限和public才能修饰一个类(内部类除外).特别地,很多的介绍Java的书籍对protected介绍的比较笼统,常常会对大家造成误解.因此,本文重点揭示了 protected 关键字的内涵和用法,并介绍了一些其他