国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

RMI簡介

這篇具有很好參考價值的文章主要介紹了RMI簡介。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

RMI 介紹

RMI (Remote Method Invocation) 模型是一種分布式對象應(yīng)用,使用 RMI 技術(shù)可以使一個 JVM 中的對象,調(diào)用另一個 JVM 中的對象方法并獲取調(diào)用結(jié)果。這里的另一個 JVM 可以在同一臺計算機也可以是遠程計算機。因此,RMI 意味著需要一個 Server 端和一個 Client 端。

Server 端通常會創(chuàng)建一個對象,并使之可以被遠程訪問。

這個對象被稱為遠程對象。Server 端需要注冊這個對象可以被 Client 遠程訪問。

Client 端調(diào)用可以被遠程訪問的對象上的方法,Client 端就可以和 Server 端進行通信并相互傳遞信息。

RMI 工作原理

正所謂 “知其然知其所以然”,在開始編寫 RMI 代碼之前,有必要了解一下 RMI 的工作原理,RMI 中 Client 端是和 Server 端是如何通信的呢?

下圖的可以幫助我們理解RMI 的工作流程。

RMI簡介,RMI,java

從圖中可以看到,Client 端有一個被稱 Stub 的東西,有時也會被成為存根,它是 RMI Client 的代理對象,Stub 的主要功能是請求遠程方法時構(gòu)造一個信息塊,RMI 協(xié)議會把這個信息塊發(fā)送給 Server 端。

這個信息塊由幾個部分組成:

  • 遠程對象標識符。

  • 調(diào)用的方法描述。

  • 編組后的參數(shù)值(RMI協(xié)議中使用的是對象序列化)。

既然 Client 端有一個 Stub 可以構(gòu)造信息塊發(fā)送給 Server 端,那么 Server 端必定會有一個接收這個信息快的對象,稱為 Skeleton 。

它主要的工作是:

  • 解析信息快中的調(diào)用對象標識符和方法描述,在 Server 端調(diào)用具體的對象方法。

  • 取得調(diào)用的返回值或者異常值。

  • 把返回值進行編組,返回給客戶端 Stub.

到這里,一次從 Client 端對 Server 端的調(diào)用結(jié)果就可以獲取到了。

RMI 配置:

1.定義傳輸?shù)膶ο?,傳輸?shù)膶ο笮枰獙崿F(xiàn)序列化(Serializable)接口。

?public class Emp implements Serializable {
? ? ?private Integer empNo;
? ? ?private String empName;
? ? ?private String addr;
? ? ?
? ? ?//省略 get/set
? ? ?@Override
? ? ?public String toString() {
? ? ? ? ?return "Emp{" +
? ? ? ? ? ? ? ? ?"empNo=" + empNo +
? ? ? ? ? ? ? ? ?", empName='" + empName + '\'' +
? ? ? ? ? ? ? ? ?", addr='" + addr + '\'' +
? ? ? ? ? ? ? ? ?'}';
? ?  }
?}

Server 端主要是構(gòu)建一個可以被傳輸?shù)念?User,一個可以被遠程訪問的類 UserService,同時這個對象要注冊到 RMI 開放給客戶端使用。

2.定義服務(wù)器接口(需要繼承 Remote 類,方法需要拋出 RemoteException)。

?public interface EmpService extends Remote {
? ? ?void addEmp(Emp emp) throws RemoteException;
? ? ?Emp findEmpById(Integer empNo) throws RemoteException;
??
?}

3.實現(xiàn)服務(wù)器接口(需要繼承 UnicastRemoteObject 類,實現(xiàn)定義的接口)。

?
public class EmpServiceImpl extends UnicastRemoteObject implements EmpService {
? ? ?public EmpServiceImpl() throws RemoteException {
? ? ? ? ?super();
??
? ?  }
??
? ? ?@Override
? ? ?public void addEmp(Emp emp) throws RemoteException {
? ? ? ? ?System.out.println(emp);
? ? ? ? ?System.out.println("保存數(shù)據(jù)成功。");
??
? ?  }
??
? ? ?@Override
? ? ?public Emp findEmpById(Integer empNo) throws RemoteException {
? ? ? ? ?System.out.println("id:" + empNo);
? ? ? ? ?System.out.println("查詢數(shù)據(jù)成功。");
? ? ? ? ?Emp emp = new Emp();
? ? ? ? ?emp.setEmpNo(empNo);
? ? ? ? ?emp.setEmpName("測試數(shù)據(jù)");
? ? ? ? ?emp.setAddr("測試數(shù)據(jù)");
? ? ? ? ?return emp;
??
? ?  }
?}

4.注冊( rmiregistry)遠程對象,并啟動服務(wù)端程序。

服務(wù)端綁定了 UserService 對象作為遠程訪問的對象,啟動時端口設(shè)置為 2022。

?public class TestServer {
? ? ?public static void main(String[] args) throws Exception {
? ? ? ? ?EmpService imp = new EmpServiceImpl();
? ? ? ? ?//注冊遠程服務(wù)的端口
? ? ? ? ?LocateRegistry.createRegistry(2022);
? ? ? ? ?//將遠程服務(wù)對象綁定為遠程服務(wù)
? ? ? ? ?Naming.rebind("rmi://127.0.0.1:2022/a", imp);
? ? ? ? ?System.out.println("server啟動成功。。。");
??
??
? ?  }
?}

RMI Client

相比 Server 端,Client 端就簡單的多。直接引入可遠程訪問和需要傳輸?shù)念?,通過端口和 Server 端綁定的地址,就可以發(fā)起一次調(diào)用。

?public class TestClient {
? ? ?public static void main(String[] args) throws Exception {
? ? ? ? ?EmpService server = (EmpService) Naming.lookup("rmi://127.0.0.1:2022/a");
? ? ? ? ?System.out.println("server:"+server);
? ? ? ? ?//遠程方法調(diào)用
? ? ? ? ?Emp emp = new Emp();
? ? ? ? ?emp.setAddr("tj");
? ? ? ? ?emp.setEmpName("喵星兔");
? ? ? ? ?emp.setEmpNo(2021);
? ? ? ? ?server.addEmp(emp);
??
? ? ? ? ?System.out.println(server.findEmpById(100));
??
? ?  }
?}

RMI 測試

啟動 Server 端。

server啟動成功。。。

啟動 Client 端。

Emp{empNo=100, empName='測試數(shù)據(jù)', addr='測試數(shù)據(jù)'}文章來源地址http://www.zghlxwxcb.cn/news/detail-789707.html

到了這里,關(guān)于RMI簡介的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Java問題解決:嚴重 [RMI TCP Connection(3)-127.0.0.1] org.apache.tomcat.util.descriptor.web.WebXmlParser.par

    Java問題解決:嚴重 [RMI TCP Connection(3)-127.0.0.1] org.apache.tomcat.util.descriptor.web.WebXmlParser.par

    ?tomcat服務(wù)器啟動是,出現(xiàn)多個嚴重錯誤: 這類問題很可能是配置文件錯誤,經(jīng)檢查后發(fā)現(xiàn),是web.xml文件出現(xiàn)問題: ?load-on-startup/load-on-startup中未輸入?yún)?shù),改成

    2024年02月11日
    瀏覽(14)
  • RMI反序列化分析

    RMI反序列化分析

    RMI全程Remote Method Invocation (遠程方法引用),RMI有客戶端和服務(wù)端,還有一個注冊中心,在java中客戶端可以通過RMI調(diào)用服務(wù)端的方法,流程圖如下: 服務(wù)端創(chuàng)建RMI后會在RMI Registry(注冊中心)注冊,之后客戶端都是從注冊中心調(diào)用方法,RMI分為三個主體部分: Client-客戶端

    2024年03月26日
    瀏覽(38)
  • 漏洞名稱:RMI 未授權(quán)訪問漏洞

    漏洞描述:RMI默認使用序列化來完成所有的交互,如果該端口暴露在公網(wǎng)上,且使用了Apache Commons Collections的漏洞版本,就可以在該服務(wù)器上執(zhí)行相關(guān)命令。 漏洞危害:攻擊者可在沒有認證的情況下直接操作對應(yīng)的 API 接口,可直接被非法增刪改次數(shù)據(jù)。且因為攻擊是在未認證下

    2024年02月06日
    瀏覽(19)
  • Http\Rpc\Rmi

    目錄 Http Rpc Rmi HTTP協(xié)議: 目的:HTTP(超文本傳輸協(xié)議)協(xié)議是用于在客戶端和服務(wù)器之間傳輸超文本和其他數(shù)據(jù)的協(xié)議,是Web應(yīng)用程序的基礎(chǔ)。 通信方式:HTTP協(xié)議使用TCP/IP協(xié)議作為傳輸協(xié)議,通過請求-響應(yīng)模型進行通信??蛻舳税l(fā)送HTTP請求到服務(wù)器,服務(wù)器返回HTTP響應(yīng)給

    2024年02月07日
    瀏覽(17)
  • 安全學習_開發(fā)相關(guān)_JNDI介紹(注入)&RMI&LDAP服務(wù)

    https://blog.csdn.net/dupei/article/details/120534024 高版本繞過參考: https://www.mi1k7ea.com/2020/09/07/%E6%B5%85%E6%9E%90%E9%AB%98%E4%BD%8E%E7%89%88JDK%E4%B8%8B%E7%9A%84JNDI%E6%B3%A8%E5%85%A5%E5%8F%8A%E7%BB%95%E8%BF%87/ https://kingx.me/Restrictions-and-Bypass-of-JNDI-Manipulations-RCE.html 什么是jndi注入 為什么有jndi注入 JDNI注入安全

    2024年02月03日
    瀏覽(16)
  • 037-安全開發(fā)-JavaEE應(yīng)用&JNDI注入&RMI服務(wù)&LDAP服務(wù)&JDK繞過&調(diào)用鏈類

    037-安全開發(fā)-JavaEE應(yīng)用&JNDI注入&RMI服務(wù)&LDAP服務(wù)&JDK繞過&調(diào)用鏈類

    1、JavaEE-JNDI注入-RMILDAP 2、JavaEE-漏洞結(jié)合-FastJson鏈 3、JavaEE-漏洞條件-JDK版本繞過 演示案例: ?JNDI注入-RMILDAP服務(wù) ?JNDI注入-FastJson漏洞結(jié)合 ?JNDI注入-JDK高版本注入繞過 思考明白: 什么是jndi注入 為什么有jndi注入 JDNI注入安全問題 JDNI注入利用條件 參考:https://blog.csdn.net/

    2024年04月10日
    瀏覽(16)
  • Tomcat項目報錯:嚴重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.ContainerBase.addChildInter

    Tomcat項目報錯:嚴重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.ContainerBase.addChildInter

    嚴重 [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.ContainerBase.addChildInternal ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/1_demo_war]] 在src/main/webapp/WEB-INF/web.xml文件中配置Servlet時,映射地址中沒有/ 正

    2024年01月16日
    瀏覽(29)
  • Tomcat出現(xiàn)警告:[RMI TCP Connection(3)-127.0.0.1] org.apache.tomcat.util.descriptor.web.WebXml.setVersion

    Tomcat出現(xiàn)警告:[RMI TCP Connection(3)-127.0.0.1] org.apache.tomcat.util.descriptor.web.WebXml.setVersion

    解決方案 tomcat、JDK、web.xml 對應(yīng)關(guān)系,向下兼容 web.xml——version2.2——JDK1.1——Tomcat3.3 web.xml——version2.3——JDK1.3——Tomcat4.1 web.xml——version2.4——JDK1.4——Tomcat5.5 web.xml——version2.5——JDK5.0——Tomcat6.0 web.xml——version3.0——JDK6.0——Tomcat7.0 web.xml——version3.1——JDK7.0——

    2024年02月05日
    瀏覽(41)
  • Java NIO (一)簡介

    Java NIO (一)簡介

    ? ? ? ? 在1.4版本之前,Java NIO類庫是阻塞IO,從1.4版本開始,引進了新的異步IO庫,被稱為Java New IO類庫,簡稱為Java NIO。New IO類庫的目的 就是要讓Java支持非阻塞IO。 ? ? ? ? Java NIO類庫包含三個核心組件: ? ? ? ? 1、Channel(通道) ? ? ? ? 2、Buffer(緩沖區(qū)) ? ? ? ? 3、

    2024年01月20日
    瀏覽(16)
  • Java簡介與安裝指南

    本文介紹了Java的基本概念和特點,以及如何安裝Java Development Kit(JDK)以開始Java編程。通過詳細步驟指導(dǎo),幫助讀者下載、安裝JDK,并配置環(huán)境變量。最后,驗證安裝成功后,讀者可以開始學習Java編程的基本語法。推薦了相關(guān)閱讀鏈接以進一步擴展知識。

    2024年02月07日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包