2009-09-22 10:25 相
比WebService,Hessian更簡(jiǎn)單、快捷,。采用的是二進(jìn)制RPC協(xié)議(Binary),,因?yàn)椴捎玫氖嵌M(jìn)制協(xié)議,,所以它很適合于發(fā)送二進(jìn)制
數(shù)據(jù),。Hessian通常通過(guò)Web應(yīng)用來(lái)提供服務(wù),,因此非常類似于WebService,。只是它不使用SOAP協(xié)議,。
Hessian通過(guò)Servlet提供遠(yuǎn)程服務(wù)。需要將匹配某個(gè)模式的請(qǐng)求映射到Hessian服務(wù),。Spring的DispatcherServlet 可以完成該功能,,DispatcherServlet可將匹配模式的請(qǐng)求轉(zhuǎn)發(fā)到Hessian服務(wù)。Hessian的server端提供一個(gè) servlet基類, 用來(lái)處理發(fā)送的請(qǐng)求,而Hessian的這個(gè)遠(yuǎn)程過(guò)程調(diào)用,,完全使用動(dòng)態(tài)代理來(lái)實(shí)現(xiàn)的,,,推薦采用面向接口編程,因此,,Hessian服務(wù)建議通過(guò)接口暴 露,。 Hessian處理過(guò)程示意圖: 客戶端——>序列化寫到輸出流——>遠(yuǎn)程方法(服務(wù)器端)——>序列化寫到輸出流 ——>客戶端讀取輸入流——>輸出結(jié)果 環(huán)境搭建 Hessian的下載和安裝請(qǐng)按如下步驟進(jìn)行: (1)登http://www./hessian/下載Hessian。 (2)把Hessian相應(yīng)的Jar包放到Web應(yīng)用下,,所有的jar文件都應(yīng)該放在WEB-INF/lib下,,該文件也不例外。 兩種方式 純Hessian 這種方式主要是適用于工程中沒(méi)有適用像spring框架的情況下,,好處是配置方便,,但是當(dāng)內(nèi)容多的情況下,配置的內(nèi)容很多,。 下面我就把我在做實(shí)例的一些相關(guān)步驟描述如下: 1:把Hessian相應(yīng)jar包放入至工程中,。 2:由于Hessian是采用面向接口編程的,所以編寫一個(gè)接口,,因?yàn)榭蛻舳藘H僅需要接口,,而無(wú)須真實(shí)的實(shí)現(xiàn)類。 package jzh.demo; public interface IHello { String sayHello(); } 3:編寫一個(gè)類實(shí)現(xiàn)這個(gè)接口,。 package jzh.demo.impl; import jzh.demo.IHello; import com.caucho.hessian.server.HessianServlet; public class Hello extends HessianServlet implements IHello { public String sayHello() { return "Hello world"; } } 4:web.xml的詳細(xì)配置 <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>jzh.demo.imple.Hello</param-value> </init-param> <init-param> <param-name>home-api</param-name> <param-value>jzh.demo.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> 5:客戶端遠(yuǎn)程調(diào)用服務(wù)器端提供的接口,,利用的就是Hessian的HessianProxyFactory,來(lái)實(shí)現(xiàn)遠(yuǎn)程代理,。 1) 把服務(wù)器端的生成的jar包,,放入工程中。 2) 相應(yīng)的片段程序如下: String url = "http://220.114.108.185:8080/Hessian/Hello"; HessianProxyFactory factory = new HessianProxyFactory(); try { IHello hello =(IHello)factory.create(IHello.class,url); System.out.println(hello.sayHello()); } catch (MalformedURLException e) { e.printStackTrace(); } 6:功能完成,。 Hessian與Spring整合 相比上一種方式,,這個(gè)方式就有點(diǎn)麻煩了。Hessian通過(guò)Servlet提供遠(yuǎn)程服務(wù),。需要將匹配某個(gè)模式的請(qǐng)求映射到Hessian服務(wù),。 Spring的DispatcherServlet可以完成該功能,DispatcherServlet可將匹配模式的請(qǐng)求轉(zhuǎn)發(fā)到Hessian服 務(wù),,web.xml只是定義了“請(qǐng)求轉(zhuǎn)發(fā)器”,,該轉(zhuǎn)發(fā)器將匹配/remoting/*的請(qǐng)求截獲,轉(zhuǎn)發(fā)給context的bean處理,。而 HessianServiceExporter提供bean服務(wù),。 所以Hessian與Spring整合主要就是一下兩個(gè)工作: 1:通過(guò)DispatcherServlet來(lái)攔截URL請(qǐng)求。 2:HessianServiceExporter提供bean服務(wù),,Spring使用HessianServiceExporter,,將一個(gè)常規(guī)bean導(dǎo)出成Hessian服務(wù),。 下面我就把我在做實(shí)例的一些相關(guān)步驟描述如下: 1:和上面的一樣。 2:和上面的一樣,。 3:和上面的一樣,。 4:web.xml的詳細(xì)配置 <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> 5:配置remoting-servlet.xml文件 <!-- 定義普通bean實(shí)例--> <bean id="hello" class="jzh.demospring.impl.Hello"/> <!-- 使用HessianServiceExporter 將普通bean導(dǎo)出成Hessian服務(wù)--> <bean name="/HessianRemoting" class="org.springframework.remoting.caucho.HessianServiceExporter"> <!-- 需要導(dǎo)出的目標(biāo)bean--> <property name="service" ref="hello"/> <!-- Hessian服務(wù)的接口--> <property name="serviceInterface" value="jzh.demospring.IHello"/> </bean> 6:客戶端定義一個(gè)remoting-client.xml文件 <bean id="myServiceClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean"> <property name="serviceUrl"> <value>http://220.114.99.62:8080/HessianSpring/remoteing/HessianRemoting</value> </property> <property name="serviceInterface"> <value>jzh.demospring.IHello</value> </property> </bean> 7:客戶端調(diào)用。 try { ApplicationContext context = new ClassPathXmlApplicationContext("remote-client.xml"); IHello hello =(IHello)context.getBean("myServiceClient"); System.out.println(hello.sayHello()); } catch (Exception e) { e.printStackTrace(); } 注意事項(xiàng) 1:?jiǎn)?dòng)tomcat的時(shí)候,,出現(xiàn)如下問(wèn)題:java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet,。,而在工程中是可以找到相應(yīng)的jar文件,,這究 竟是什么問(wèn)題,。 解決方法:可能是在工程的WEB-INF/lib下面沒(méi)有加載相應(yīng)的jar文件 2:org.springframework.remoting.RemoteAccessException: Cannot access Hessian service at [http://61.152.162.173/remote/remoteService]; 解決方法:出現(xiàn)這個(gè)異常一般是因?yàn)榉?wù)端操作出現(xiàn)異常引起的。 (###) |
|
來(lái)自: 9loong > 《網(wǎng)絡(luò)》