java数据采集_基于Java的数据采集(终结篇)

本文介绍了如何使用Java RMI(远程方法调用)实现远程数据采集。通过创建远程接口、实现接口、设置服务端和客户端,详细展示了如何进行远程数据的抓取、存储和访问。示例中,服务端创建RMI注册表,客户端通过地址查找并调用服务端的方法进行数据交互。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于写过关于JAVA采集入库的三篇文章:

分别实现了

①抓取页面信息并显示

②简单采集入库存储

③调用本地数据库查询

④远程调用实现操作(未实现)

以上这些功能都是基于本地的,有时候我们需要远程去调用这类数据,这时我们就可以用JAVA提供的RMI机制实行远程调用访问。

什么是RMI?

RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方法调用的任何对象必须实现该远程接口。调用这样一个对象时,其参数为 "marshalled" 并将其从本地虚拟机发送到远程虚拟机(该远程虚拟机的参数为 "unmarshalled")上。该方法终止时,将编组来自远程机的结果并将结果发送到调用方的虚拟机。如果方法调用导致抛出异常,则该异常将指示给调用方。

简单了解下RMI,看下简单实现吧

1、定义远程接口

首先,我们需要写个远程接口IHello 该接口继承了远程对象Remote.

接口IHello里面有个hello的方法,用于客户端连接后 打招呼.

由于IHello继承了远程Remote对象, 所以需要抛一个 RemoteException 远程异常.

1 importjava.rmi.Remote;2 importjava.rmi.RemoteException;3

4

5 public interface IHello extendsRemote{6

7 public String hello(String name) throwsRemoteException;8 }

2、实现接口

接下来,我们实现下 该接口里的方法, 实现接口的方法在服务端.

这里的HelloImpl类 实现了接口IHello里的方法.

注意:这里HelloImpl同样继承了 UnicastRemoteObject 远程对象,这个必须写,不然服务端启动后会莫名其妙报错.

1 importjava.rmi.RemoteException;2 importjava.rmi.server.UnicastRemoteObject;3

4 /**

5 * UnicastRemoteObject 这个必须写,虽然不写代码也不会出错,但在运行服务器的时候会出现莫名错误6 *@authorBalla_兔子7 *8 */

9 public class HelloImpl extends UnicastRemoteObject implementsIHello {10

11 protected HelloImpl() throwsRemoteException {12 super();13 }14

15 @Override16 publicString hello(String name) {17 String strHello="你好!"+name+"正在访问服务端";18 System.out.println(name+"正在访问服务端");19 returnstrHello;20 }21

22 }

3、编写服务端

服务端,由于RMI实现远程访问的机制是指:客户端通过在RMI注册表上寻找远程接口对象的地址(服务端地址) 达到实现远程访问的目的,

所以,我们需要在服务端创建一个远程对象的注册表,用于绑定和注册 服务端地址 和 远程接口对象,便于后期客户端能够成功找到服务端

1 importjava.rmi.Naming;2 importjava.rmi.RemoteException;3 importjava.rmi.registry.LocateRegistry;4

5

6 public classServer {7

8 /**

9 *@paramargs10 */

11 public static voidmain(String[] args) {12 try{13 IHello hello=newHelloImpl();14 int port=6666;15 LocateRegistry.createRegistry(port);16 String address="rmi://localhost:"+port+"/tuzi";17 Naming.bind(address, hello);18 System.out.println(">>>服务端启动成功");19 System.out.println(">>>请启动客户端进行连接访问..");20

21 } catch(Exception e) {22 e.printStackTrace();23 }24 }25

26 }

4、编写客户端

客户端上同样需要定义一个 远程访问的地址 - 即服务端地址,

然后,通过在RMI注册表上寻找该地址;  如果找到 则建立连接.

1 importjava.net.MalformedURLException;2 importjava.rmi.Naming;3 importjava.rmi.NotBoundException;4 importjava.rmi.RemoteException;5 importjava.util.Scanner;6

7

8 public classClient {9 public static voidmain(String[] args) {10

11 int port=6666;12 String address="rmi://localhost:"+port+"/tuzi";13 try{14 IHello hello=(IHello) Naming.lookup(address);15 System.out.println("<<

17 System.out.println(hello.hello("Rabbit"));18 Scanner scanner=newScanner(System.in);19 String input=scanner.next();20 } catch(MalformedURLException e) {21 //TODO Auto-generated catch block

22 e.printStackTrace();23 } catch(RemoteException e) {24 //TODO Auto-generated catch block

25 e.printStackTrace();26 } catch(NotBoundException e) {27 //TODO Auto-generated catch block

28 e.printStackTrace();29 }30

31 }32 }

运行效果图:

a21dd5a943c8715263694cbce2f4641f.png

0f50d8d203d76c28f846451dcedfe519.png

5117ba4ea0dbe38a094b91f1fe96c5f6.png

华丽的分割线

接下来就来看看我们的程序吧,今天换种口味来采集下《2013-2014赛季常规赛排名》

05b1bc595c00852c5ca0d36fc763149d.png

先上效果图:

68700211cd51906ba60bf8ac01c892fe.png

ece1632865eb2585ddd26fa2c79b60d9.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值