1. 程式人生 > >spring mvc 實現遠端服務呼叫的幾種方式

spring mvc 實現遠端服務呼叫的幾種方式

org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter 實現遠端服務呼叫

(1)httpinvoker方式 伺服器客戶端都是spring時推薦這種方式

服務端 必須要實現 bean實體類  service介面類  serviceImpl服務實現類

客戶端只需拷貝 bean 實體類  service介面類(注意 ,客戶端 bean,service類要和服務端bean,service類包路徑相同,比如都是

com.hlzt.csm.model.DataPlatFormCountBean,不然會報找不到類,而且 bean要序列化  public class DataPlatFormCount implements Serializable; 如果服務端有 序列化的private static final long serialVersionUID = 1L號,客戶端也必須有,如果服務端沒有此id,客戶端也不要有此id,不然會出錯。service類的包路徑也要相同,最好服務端寫好後直接把實體類和service服務介面類打包,拷貝到客戶端,以免造成兩端不同。

伺服器端要在spring-mvc配置檔案 spring-mvc-servlet.xml中加入以下(注意是在spring-mvc的配置檔案中,不是spring的配置檔案)

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans     
        http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context-3.0.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
   
    <!-- 啟用spring mvc 註解 -->
    <mvc:annotation-driven />
   <!-- 設定使用註解的類掃描的包 -->
    <context:component-scan base-package="com.hlzt.csm" />
    
   
    
     <!--不被spring mvc過濾器 DispatcherServlet,前提檔案不能放在WEB-INF下,引用必須使用jstl的c標籤-->
      <mvc:default-servlet-handler/>
  
  <!--指定自定義  <mvc:default-servlet-handler default-servlet-name="StaticServlet"/> -->
    
     <!-- 指定靜態檔案的路徑對映  可以訪問 WEB-INF下 訪問直接src=static1/js/1.js-->
  <!-- <mvc:resources mapping="/static1/**" location="/WEB-INF/static/"/>  -->
     
     <!-- 對轉向頁面的路徑解析。prefix:字首, suffix:字尾 -->
<!--     <bean
        class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix">
            <value>/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean> -->
    
<!-- 下面是需要加入的-->
<!-- 下面是需要加入的 ,id要和SimpleUrlHandlerMapping中的 prop的key相同,name要和rop key對應的value相同,否則會導致找不到請求的地址-->
    <bean id="csmDataCountService"  name="/CsmDataCountSer.shtm" class="org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter">
        <property name="service" ref="csmDataCountSerImpl"></property>
        <property name="serviceInterface" value="com.hlzt.csm.service.CsmDataCountSer">
        </property>
    </bean>
    <!-- 遠端服務的URL ,key值表示客戶端請求的地址-->
    <bean
        class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
         <property name="mappings">
            <props>
                  <prop key="/CsmDataCountSer.shtm">csmDataCountService</prop>
            </props>
        </property>
    </bean>


</beans>

服務端 web.xml的配置


客戶端配置

客戶端 spring的xml檔案配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context"
	xmlns:p="http://www.springframework.org/schema/p"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
		http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd"
		default-lazy-init="true">

 <bean id="csmDataCountSer"  name="csmDataCountSer" class="org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean">  
     <property name="serviceUrl">  
           <value>http://localhost:80/chat/CsmDataCountSer.shtm</value>  
       </property>  
       <property name="serviceInterface">  
            <value>com.hlzt.csm.service.CsmDataCountSer</value>  
        </property>  
   </bean>
   
</beans>

注意的是 id="csmDataCountSer" 本人測試結果是 此例項不能在java中通過 rource 或Autowired自動注入,而要通過手工載入方式獲得

ApplicationContext context =new ClassPathXmlApplicationContext("/spring/spring-remote.xml");
CsmDataCountSer csmDataCountSer=(CsmDataCountSer)context.getBean("csmDataCountSer");

(2)spring RMI方式

首先看下例項程式目錄結構:

Spring中釋出RMI服務(ZLv_RMIServerWithSpring):

(1) 定義介面MessageProvider及介面中供呼叫的方法(MessageProvider.java):

?
1 2 3 4 5 package org.thera.rmi.service; public interface MessageProvider { public String queryForMessage(String name); }

(2) 實現MessageProvider介面(MessageProviderImpl.java):

?
1 2 3 4 5 6 7 8 9 10 package org.thera.rmi.service; public class MessageProviderImpl implements MessageProvider { @Override public String queryForMessage(String name) { return "Hello, " + name; } }

做好了上述準備,下面我們就可以通過Spring中整合RMI,方便的釋出RMI服務端

(3) Spring配置檔案作如下配置(context.xml):

?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21

相關推薦

spring mvc 實現遠端服務呼叫方式

org.springframework.remoting.httpinvoker.HttpInvokerServiceExporter 實現遠端服務呼叫 (1)httpinvoker方式 伺服器客戶端都是spring時推薦這種方式 服務端 必須要實現 bean實體類

使用Spring框架實現遠端服務暴露與呼叫

一、前言 Spring框架提供了通過HTTP協議實現遠端呼叫的方式,具體是呼叫方使用HttpInvokerProxyFactoryBean生成一個代理物件,通過代理物件遠端通過http服務呼叫服務提供方法的服務,服務提供方則通過HttpInvokerServiceExporter在服務端暴漏遠

spring mvc獲取絕對路徑的方法

col 文件 結果 ret 項目 tps span ppr etc 1.首先如果是在一個controller方法中,則很簡單,直接用下面語句。 1 @RequestMapping("categoryHome") 2 public ModelAndVie

cxf呼叫服務方式

客戶端匯入的包 方式一 JaxWsDynamicClientFactory clientFactory = JaxWsDynamicClientFactory.newInstance(); Client client = clientFactory.createClien

【JAVA】Spring HTTP Invoker 遠端服務呼叫

遠端服務呼叫在實際的專案中很常用,在多重方式中,HTTP應該算是比較常用的,對客戶端來說也很方便 但是spring http invoker只支援JAVA語言,結構簡單,只依賴與spring框架本身。 首先我們來看服務端(依賴於WEB容器來啟動,tomcat/jetty)

PHP實現定時任務的方式

選項 等待 process 一個 temp 表示 服務器 實現 ref 關於定時任務,之前以前認識了一種最常用的:crontab定時任務。通過linux的定時任務去實現。今天又認識了一下php實現定時方式的其它方式,總結一下。 一 服務器定時任務 服務器定時任務,其實就是u

深入研究Spring-IoC :容器建立的方式

1.前言 本文為對tiny-spring的學習解讀,程式碼參考自tiny-spring。一個手寫的Spring簡易版框架。 前面已經提到了Spring IOC容器的建立大致分為3個步驟。但是這個三個步驟是有一個演進的過程的,Spring容器建立方式前後有6種,從最基本的例項化建立

設計模式之單例模式【內附物件例項化方式實現執行緒安全方式

繼續來複習常用的設計模式-單例模式,順便回憶一下執行緒安全的幾種實現方式。 一、什麼是單例模式 單例模式,簡單常用的一種設計模式,也很好的體現了程式碼控制物件在記憶體數量的一種方式,主要分2種實現方式: ①餓漢式,執行緒安全 ②懶漢式,執行緒不安全(新增鎖機制,可以實現執行緒安全)

Spring MVC異常統一處理的三方式

  Spring 統一異常處理有 3 種方式,分別為: 使用 @ ExceptionHandler 註解 實現 HandlerExceptionResolver 介面 使用 @controlleradvice 註解 HandlerExceptionReso

JS實現非同步程式設計的方式

轉載出處:http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html Javascript非同步程式設計的4種方法 作者:&nbs

Spring MVC 統一異常處理的兩方式

沒有廢話,直接來。 方式一 通過@ControllerAdvice 和 @ExceptionHandler 方法。 @ControllerAdvice 這個註解,可以將對於控制器的全域性配置放到註解了@ControllerAdvice的類上,它結合了 @Component 所以可

iOS 實現圖片圓角的方式

第一種方法:通過設定layer的屬性 最簡單的一種,但是很影響效能,一般在正常的開發中使用很少. UIImageView *imageView = [[UIImageView alloc]initWithFrame:CGRectMake(100, 100, 100, 10

Nginx:實現負載均衡的方式

要理解負載均衡,必須先搞清楚正向代理和反向代理。 注: 正向代理,代理的是使用者。 反向代理,代理的是伺服器 什麼是負載均衡 當一臺伺服器的單位時間內的訪問量越大時,伺服器壓力就越大,大到超過自身承受能力時,伺服器就會崩潰。為了避免伺服器崩潰,讓使用者有更好的體驗

【Nginx】實現負載均衡的方式

要理解負載均衡,必須先搞清楚正向代理和反向代理。 正向代理與反向代理【總結】 注: 正向代理,代理的是使用者。 反向代理,代理的是伺服器 什麼是負載均衡 當一臺伺服器的單位時間內的訪問量越大時,伺服器壓力就越大,大到超過自身承受能力時,伺服器就會崩潰。為了避免伺服器崩潰

Spring 獲取Request,Response物件的方式--未驗證

 第一種、引數 @RequestMapping("/test") @ResponseBody public void saveTest(HttpServletRequest req, HttpServletResponse resp){   } 第二種、註解  @

js實現輪播效果方式

小編推薦:Fundebug專注於JavaScript、微信小程式、微信小遊戲,Node.js和Java實時BUG監控。真的是一個很好用的bug監控費服務,眾多大佬公司都在使用。   輪播呢,也是各種網站上常見的一種展示效果,這裡我來寫一寫實現輪播的一些簡單方法。 //

Python實現Singleton模式的方式

使用python實現設計模式中的單例模式。單例模式是一種比較常用的設計模式,其實現和使用場景判定都是相對容易的。本文將簡要介紹一下python中實現單例模式的幾種常見方式和原理。一方面可以加深對python的理解,另一方面可以更加深入的瞭解該模式,以便實際工作中能更加靈活的使用單例設計模式。 本文將介紹常見的

spring boot初始化資源的方式

轉自:https://www.jb51.net/article/145143.htm 實現 CommandLineRunner 介面,並實現它的 run() 方法,在該方法中編寫初始化邏輯 @Component public class MyCommandLineRun

PHP實現定時任務的方式和詳解

定時執行任務對於一個網站來說,是一個比較重要的任務,比如定時釋出文件,定時清理垃圾資訊等,現在的網站大多數都是採用PHP動態語言開發的,而對於PHP的實現決定了它沒有Java和.Net這種AppServer的概念,而http協議是一個無狀態的協議,PHP只能被使用者觸

Spring boot實現熱部署的兩方式詳解

熱部署是什麼大家都知道在專案開發過程中,常常會改動頁面資料或者修改資料結構,為了顯示改動效果,往往需要重啟應用檢視改變效果,其實就是重新編譯生成了新的 Class 檔案,這個檔案裡記錄著和程式碼等對應的各種資訊,然後 Class 檔案將被虛擬機器的 ClassLoader 載入。而熱部署正是利用了這個特點,它