中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
Java學(xué)習(xí)之Hessian通信基礎(chǔ)
    一、首先先說Hessian是什么?
   Hessian:hessian是一個輕量級的remotingonhttp工具,使用簡單的方法提供了RMI的功能,相比WebService,Hessian更簡單、快捷。采用的是二進(jìn)制RPC協(xié)議,因為采用了二進(jìn)制協(xié)議,所以它很適合于發(fā)送二進(jìn)制數(shù)據(jù),Hessian主要作面向?qū)ο蟮南⑼ㄐ?。Hessian的初衷就是支持動態(tài)類型,格式緊湊,跨語言Hessian是使用自己的序列化機(jī)制實現(xiàn)的編組和反編組,其支持的數(shù)據(jù)類型是有限制的,不支持復(fù)雜的對象,可以穿透防火墻,在這里不得不說一下RMI:RMI是一組用戶開發(fā)分布式應(yīng)用程序的API。他使用的是java序列化機(jī)制實現(xiàn)調(diào)用及返回值的編組于反編組。它使用Java語言接口定義了遠(yuǎn)程對象,它集合了Java序列化和Java遠(yuǎn)程方法協(xié)議(JavaRemote MethodProtocol)。他可以被看做是RPC的Java版本,因為傳統(tǒng)的RPC并不能很好的應(yīng)用于分布式對象系統(tǒng)。而JavaRMI則支持存儲于不同地址空間的程序級對象之間彼此進(jìn)行通信,實現(xiàn)遠(yuǎn)程對象之間的無縫遠(yuǎn)程調(diào)用。他也有它的缺點,他只能通過RMI協(xié)議來進(jìn)行訪問無法通過HTTP協(xié)議訪問,無法穿透防火墻。
   還有一種遠(yuǎn)程調(diào)用方法就是HttpInvoker:他也是將參數(shù)和返回值通過Java的序列化機(jī)制進(jìn)行編組和反編組,它具有RMI的支持所有可序列化對象的優(yōu)點。試使用Http協(xié)議傳輸二進(jìn)制流的,同時又具有Hessian、Burlap(傳輸xml文本)的優(yōu)點。
二、寫一個簡單的hessian通信所需要知道寫哪些內(nèi)容?
Hessian:寫一個Hessian需要注意的問題:
    1、JAVA服務(wù)器端必須具備以下幾點:
       包含Hessian的jar包
       設(shè)計一個接口,用來給客戶端調(diào)用
       實現(xiàn)該接口的動能
       配置web.xml,配置相應(yīng)的servlet
       對象必須實現(xiàn)Serializable接口
       對于復(fù)雜對象可以使用Map的方法傳遞
    2、客戶端必須具備以下幾點:
       java客戶端包含Hessian.jar包
       具有和服務(wù)器端結(jié)構(gòu)一樣的接口和實體類。包括命名空間都最好一樣。利用HessianProxyFactory調(diào)用遠(yuǎn)程接口
三、簡單hessian實例:
1、在服務(wù)端的接口:
public interface IHello {

    StringsayHello();
   
}
2、在服務(wù)端的實現(xiàn)類:
public class IHelloImpl extends HessianServlet implements IHello{

   @Override
    publicString sayHello() {
       // TODOAuto-generated method stub
       return"Hello,I from HessianService";
    }

}
3、在客戶端的類:
public class ClientTest {

    publicstatic String url ="http://127.0.0.1:8080/HessianService/Hello";
    publicstatic void  main(String[] args){
      HessianProxyFactory factory = new HessianProxyFactory();
       try {
          IHelloiHello = (IHello) factory.create(IHello.class, url);
         System.out.println(iHello.sayHello());
       } catch(MalformedURLException e) {
          // TODOAuto-generated catch block
         e.printStackTrace();
       }
    }
}
3、先將服務(wù)器端的類link到客戶端,或者是將服務(wù)器端打包放到客戶端,
4、在web.xml中進(jìn)行配置:
服務(wù)器端: <servlet>
   <servlet-name>Hello</servlet-name>
   <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
   <init-param>
     <param-name>home-class</param-name>
     <param-value>com.kcpt.hessian.service.IHelloImpl</param-value>
   </init-param>
   <init-param>
     <param-name>home-api</param-name>
     <param-value>com.kcpt.hessian.service.IHello</param-value>
   </init-param>
   <load-on-startup>1</load-on-startup>
  </servlet>
 <servlet-mapping>
   <servlet-name>Hello</servlet-name>
   <url-pattern>/Hello</url-pattern>
 </servlet-mapping>

執(zhí)行成功:輸出Hello,I from HessianService,這是簡單的hessian實現(xiàn)方式,看起來比較簡單
四、hessian與spring結(jié)合.
在實際應(yīng)用中,我們不只是簡單的只使用hessian來進(jìn)行通信的,如果方法多得話,還不如直接寫在客戶端來調(diào)用,然而:當(dāng)hessian與spring結(jié)合后,大大減少了這些操作,將dao層的操作全部放在hessian服務(wù)端,將業(yè)務(wù)邏輯全部放在hessian客戶端,這樣的話我們的hessian客戶端和服務(wù)端完全分離,因此我們的業(yè)務(wù)邏輯和dao層就真正的達(dá)到了分離,就可以放在不同的服務(wù)器上,當(dāng)然hessian的通信的作用不僅僅只有這些。
接口和實現(xiàn)和上邊的一樣:只是在web.xml中配置比較麻煩:
例子:
1、服務(wù)器端:增加remoting-servlet.xml配置文件:用來配置bean,并將bean導(dǎo)出為hessian服務(wù):
<?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:tx = "http://www.springframework.org/schema/tx"
      xsi:schemaLocation = "http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsd
          http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.0.xsd
          http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.0.xsd">    
          
  <!-- 定義普通的bean實例-->
  <bean id="Hello"class="com.kcpt.hessian.service.IHelloImpl"/>
   <!--  使用HessianServiceExporter將普通bean導(dǎo)出成Hessian服務(wù)-->
   <bean name="/remoting"class="org.springframework.remoting.caucho.HessianServiceExporter">
   <!-- 需要導(dǎo)出的目標(biāo)bean-->
    <property name="service"ref="Hello"/>
      <!-- Hessian服務(wù)的接口-->
    <property name="serviceInterface"value="com.kcpt.hessian.service.IHello"/>
   </bean>
  </beans>
2、web.xml文件的配置:
首先是監(jiān)聽器:spring的監(jiān)聽器
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class><!--添加監(jiān)聽器 -->
</listener>
<!-- 指定spring的配置文件在哪里,在這個配置文件中導(dǎo)出了Hessian服務(wù)-->
<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/remoting-servlet.xml</param-value> 
</context-param>
<!--Hessian通過Servlet提供遠(yuǎn)程服務(wù),需要將某個匹配的模式映射到hessian服務(wù)中,spring的dispatcherServlet能完成此功能,DispatcherServlet可將匹配模式的請求轉(zhuǎn)發(fā)到Hessian服務(wù),web.xml只是定義了“請求轉(zhuǎn)發(fā)器”,該轉(zhuǎn)發(fā)器將匹配/remoting/*的請求截獲,轉(zhuǎn)發(fā)給context的bean處理。而HessianServiceExporter提供bean服務(wù)。-->
<servlet>
  <servlet-name>remoting</servlet-name>
 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          <load-on-startup>1</load-on-startup>
   </servlet>
<servlet-mapping>
<servlet-name>remoting</servlet-name>
<url-pattern>/remoting/*</url-pattern>
</servlet-mapping>
3、在客戶端:
同樣要加spring監(jiān)聽器和context-param指定bean的文件
聲明bean的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:tx = "http://www.springframework.org/schema/tx"
      xsi:schemaLocation = "http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans-2.0.xsd
          http://www.springframework.org/schema/aophttp://www.springframework.org/schema/aop/spring-aop-2.0.xsd
          http://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx-2.0.xsd">    
<bean id="myServiceClient"class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
<propertyname="serviceUrl">           //hessian的地址和名稱請求轉(zhuǎn)發(fā)的名稱
<value>http://127.0.0.1:8080/HessianService/remoting</value>
</property>                          
<propertyname="serviceInterface">  //hessian所要調(diào)用的接口
<value>com.kcpt.hessian.service.IHello</value>
</property>
</bean>
</beans>
4、客戶端的程序中要寫:
ApplicationContext context = newClassPathXmlApplicationContext("com/kcpt/hessian/client/remoting-client.xml"); //這里只是你聲明的bean的xml文件所在的路徑
       IHello b =(IHello) context.getBean("myServiceClient");
來獲取到ihello這個接口,從而就能夠調(diào)用這個接口里的方法進(jìn)行操作


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Hessian入門(與Spring集成)
spring和hessian整合
二、spring mvc模擬用戶增刪改查以及登錄和上傳文件的相關(guān)流程
Spring HTTP Invoker例子
SpringMVC學(xué)習(xí)系列(2) 之 經(jīng)典的HelloWorld實現(xiàn)
Spring 注解學(xué)習(xí)手札
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服