国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

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

開通VIP
webservice之hessian

一年前我做的項目中遇到了要給其他的幾個系統(tǒng)提供接口實現(xiàn)遠程調(diào)用,數(shù)據(jù)是二進制數(shù)據(jù)。那么用哪個好呢?

 

xfire?cxf?hessain?

 

XFire是codeHaus組織提供的一個開源框架,它構(gòu)建了POJOSOA之間的橋梁,主要特性就是支持將POJO通過非常簡

 

單的方式發(fā)布成Web服務(wù),這種處理方式不僅充分發(fā)揮了POJO的作用,簡化了Java應(yīng)用轉(zhuǎn)化為Web服務(wù)的步驟和過程,

 

也直接降低了SOA的實現(xiàn)難度,為企業(yè)轉(zhuǎn)向SOA架構(gòu)提供了一種簡單可行的方式。

 

CXF 繼承了 Celtix 和 XFire 兩大開源項目的精華,提供了對 JAX-WS 全面的支持,并且提供了多種 Binding 、

 

DataBinding、Transport 以及各種 Format 的支持,并且可以根據(jù)實際項目的需要,采用代碼優(yōu)先(Code First)或

 

者 WSDL 優(yōu)先(WSDL First)來輕松地實現(xiàn) Web Services 的發(fā)布和使用。Apache CXF已經(jīng)是一個正式的Apache

 

頂級項目。

 

Hessian是一個使用二進制Web服務(wù)協(xié)議的框架,它的好處在于免除了一大堆附加的API包,方便,簡單,快速等特點。

 

例如XML的處理之類的jar包,這也就是為什么說它是一個輕量級的Web服務(wù)實現(xiàn)框架的原因,這個原因還在于手機上的應(yīng)

 

用程序可以通過Hessian提供的API很方便的訪問Hessian的Web服務(wù)。

 

我的項目中需要傳輸二進制數(shù)據(jù),所以我選擇了hessian。

 

個人總結(jié)了下hessian的使用:

 

兩種方式:1、接口的實現(xiàn)類繼承HessianServlet,web.xml中將接口的實現(xiàn)類做成servlet。

               2、接口的實現(xiàn)類無需繼承HessianServlet,web.xml文件中直接引入HessianServlet,傳入init-param指明傳入的接口及實現(xiàn)類即可。

 

方法1是繼承hessianservlet在程序里寫死誰為服務(wù)接口和實現(xiàn)類,比較呆板,降低了可重用性不夠靈活。

方法2是配置文件中指明哪個為接口哪個是需要傳入的實現(xiàn)類,比較靈活。

 

具體的例子如下:

 

客戶端的接口:

Java代碼  
  1. package com.future.client;  
  2.   
  3. public interface BasicAPI {  
  4.   
  5.     public String hello();  
  6. }  

 

客戶端調(diào)用服務(wù)端: 

 

Java代碼  
  1. package com.future.client;  
  2.   
  3. import java.net.MalformedURLException;  
  4.   
  5. import com.caucho.hessian.client.HessianProxyFactory;  
  6.   
  7. public class TestHessian  {  
  8.   
  9.     public static void main(String[] args) {  
  10.         String url = "http://localhost:8080/HessianRemotingOnHttp2/xu";  
  11.         HessianProxyFactory factory = new HessianProxyFactory();  
  12.         try {  
  13.             BasicAPI basic = (BasicAPI) factory.create(BasicAPI.class,url);  
  14.             System.out.println("hello()"+basic.hello());  
  15.         } catch (MalformedURLException e) {  
  16.             // TODO Auto-generated catch block  
  17.             e.printStackTrace();  
  18.         }  
  19.     }  
  20.   
  21. }  

 

服務(wù)端接口:

 

Java代碼  
  1. package com.future.server;  
  2.   
  3. public interface BasicAPI {  
  4.   
  5.     public String hello();  
  6. }  

 

服務(wù)端的實現(xiàn)類: 

Java代碼  
  1. package com.future.server;  
  2.   
  3. import javax.jws.WebService;  
  4.   
  5. import com.caucho.hessian.server.HessianServlet;  
  6. @WebService  
  7. public class BasicService extends HessianServlet implements BasicAPI{  
  8.   
  9.     private String _greeting = "Hello,world";  
  10.     public void setGreeting(String greeting)  
  11.     {  
  12.         _greeting = greeting;  
  13.     }  
  14.       
  15.       
  16.     public String hello() {  
  17.         // TODO Auto-generated method stub  
  18.         return _greeting;  
  19.     }  
  20.   
  21. }  

 

配置文件web.xml 

Java代碼  
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <web-app version="2.5"   
  3.     xmlns="http://java.sun.com/xml/ns/javaee"   
  4.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  5.     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  6.     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
  7.   <servlet>  
  8.     
  9.   <servlet-name>HessianServlet</servlet-name>  
  10.   <servlet-class>com.future.server.BasicService</servlet-class>  
  11.     
  12.   </servlet>  
  13.   <servlet-mapping>  
  14.   <servlet-name>HessianServlet</servlet-name>  
  15.   <url-pattern>/xu</url-pattern>  
  16.   </servlet-mapping>  
  17.     
  18.     
  19.   <welcome-file-list>  
  20.     <welcome-file>index.jsp</welcome-file>  
  21.   </welcome-file-list>  
  22. </web-app>  

 

 以上是我提到的第二種方式。為了方便大家所以我選擇了網(wǎng)上流行的例子,便于大家瀏覽。

 

第二種方式:

 

服務(wù)端接口:

 

Java代碼  
  1. package study.hessian;  
  2.   
  3. public interface IBasic {      
  4.     
  5.     public String hello();      
  6.    
  7.     public Person getPerson();      
  8.      
  9. }    

 

服務(wù)端實現(xiàn)類:

 

 

Java代碼  
  1. package study.hessian;  
  2.    
  3. public class BasicService implements IBasic {      
  4.   private String hello= "Hello, 徐士剛";      
  5.      
  6.   public String hello()      
  7.   {      
  8.     return hello;      
  9.   }      
  10.      
  11.     public Person getPerson() {      
  12.         Person person = new Person();      
  13.         person.setColor("red");      
  14.         person.setLength("176cm");      
  15.         person.setName("徐士剛");      
  16.         return person;      
  17.     }      
  18. }    

 

 服務(wù)端model:

 

Java代碼  
  1. package study.hessian;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class Person {  
  6.   
  7.     private static final long serialVersionUID = 3276641446246664L;  
  8.     private String name;  
  9.     private String length;  
  10.     private String color;  
  11.   
  12.     public String getName() {  
  13.         return name;  
  14.     }  
  15.   
  16.     public void setName(String name) {  
  17.         this.name = name;  
  18.     }  
  19.   
  20.     public String getLength() {  
  21.         return length;  
  22.     }  
  23.   
  24.     public void setLength(String length) {  
  25.         this.length = length;  
  26.     }  
  27.   
  28.     public String getColor() {  
  29.         return color;  
  30.     }  
  31.   
  32.     public void setColor(String color) {  
  33.         this.color = color;  
  34.     }  
  35.   
  36. }  

 客戶端接口如下:

 

Java代碼  
  1. package com.future.client;  
  2.   
  3. public interface IBasic {      
  4.     
  5.     public String hello();      
  6.    
  7.     public Person getPerson();      
  8.      
  9. }    

 客戶端model:

 

Java代碼  
  1. package com.future.client;  
  2.   
  3. import java.io.Serializable;  
  4.   
  5. public class Person implements Serializable{  
  6.   
  7.     private static final long serialVersionUID = 3276641446246664L;  
  8.     private String name;  
  9.     private String length;  
  10.     private String color;  
  11.   
  12.     public String getName() {  
  13.         return name;  
  14.     }  
  15.   
  16.     public void setName(String name) {  
  17.         this.name = name;  
  18.     }  
  19.   
  20.     public String getLength() {  
  21.         return length;  
  22.     }  
  23.   
  24.     public void setLength(String length) {  
  25.         this.length = length;  
  26.     }  
  27.   
  28.     public String getColor() {  
  29.         return color;  
  30.     }  
  31.   
  32.     public void setColor(String color) {  
  33.         this.color = color;  
  34.     }  
  35.   
  36. }  

 

客戶端調(diào)用服務(wù)端:

 

Java代碼  
  1. package com.future.client;  
  2.   
  3. import java.net.MalformedURLException;  
  4.   
  5. import com.caucho.hessian.client.HessianProxyFactory;  
  6.   
  7. public class TestHessian {  
  8.     public static void main(String[] args) {  
  9.         String url = "http://localhost:8080/HessianRemotingOnHttp3/hello";  
  10.         HessianProxyFactory factory = new HessianProxyFactory();  
  11.         try {  
  12.             IBasic basic = (IBasic) factory.create(IBasic.class,url);  
  13.             System.out.println("hello()"+basic.hello());  
  14.         } catch (MalformedURLException e) {  
  15.             // TODO Auto-generated catch block  
  16.             e.printStackTrace();  
  17.         }  
  18.     }  
  19. }  

 

注意以上url為

String url = ("http://" + request.getServerName() + ":"+ request.getServerPort() +

 

request.getContextPath() + "/hello"); 相信大家肯定知道的。

 

Hessian與Spring整合

Hessian通過Servlet提供遠程服務(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ù)。

所以Hessian與Spring整合主要就是一下兩個工作:
1:通過DispatcherServlet來攔截URL請求。
2:HessianServiceExporter提供bean服務(wù),Spring使用HessianServiceExporter,將一個常規(guī)bean導(dǎo)出成Hessian服務(wù)。

下面我就把我在做實例的一些相關(guān)步驟描述如下:
web.xml的詳細配置

Java代碼  
  1. <servlet>   
  2.            <servlet-name>remoting</servlet-name>   
  3.   <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>   
  4.            <load-on-startup>1</load-on-startup>   
  5.     </servlet>   
  6.     <servlet-mapping>   
  7.            <servlet-name>remoting</servlet-name>   
  8.            <url-pattern>/remoting/*</url-pattern>   
  9. </servlet-mapping>   

 

配置remoting-servlet.xml文件

 

Java代碼  
  1. <!--  定義普通bean實例-->   
  2.     <bean id="hello" class="jzh.demospring.impl.Hello"/>   
  3.     <!--  使用HessianServiceExporter 將普通bean導(dǎo)出成Hessian服務(wù)-->   
  4.     <bean name="/HessianRemoting" class="org.springframework.remoting.caucho.HessianServiceExporter">   
  5.            <!--  需要導(dǎo)出的目標bean-->   
  6.            <property name="service" ref="hello"/>   
  7.            <!--  Hessian服務(wù)的接口-->   
  8.            <property name="serviceInterface" value="jzh.demospring.IHello"/>   
  9. </bean>   

 

 

客戶端定義一個remoting-client.xml文件

Java代碼  
  1. <bean id="myServiceClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean"> <property name="serviceUrl">   
  2. <value>http://localhost:8080/HessianSpring/remoteing/HessianRemoting</value>   
  3. </property>   
  4. <property name="serviceInterface">   
  5. <value>jzh.demospring.IHello</value>   
  6. </property>   
  7. </bean>   

 

 

客戶端調(diào)用。

Java代碼  
  1. try   
  2. {                                                                 
  3. ApplicationContext context = new ClassPathXmlApplicationContext("remote-client.xml");   
  4.   
  5. IHello hello =(IHello)context.getBean("myServiceClient");   
  6.   
  7. System.out.println(hello.sayHello());   
  8. }   
  9. catch (Exception e)   
  10. {   
  11. e.printStackTrace();   
  12. }   

 

以上是本人粗淺的介紹,希望大家多多指正,共同進步,這里謝過了!??!


(###)

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
Spring HTTP Invoker使用介紹
Hessian
Java面試題集
Hessian入門(與Spring集成)
spring和hessian整合
Hessian學(xué)習筆記
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服