Java學習之路-Hessian學習



  Hessian是基於HTTP的輕量級遠程服務解決方案,Hessian像Rmi一樣,使用二進制消息進行客戶端和服務器端交互。但與其他二進制遠程調用技術(例如Rmi)不同的是,它的二進制消息可以移植其他非Java的語言中。 
  一、創建Hessian程序的4個步驟 
    1、定義一個遠程接口的接口。 
    2、定義一個實現該接口的類。 
    3、在web.xml中定義導出Hessian服務需要的信息。 
    4、編寫客戶端訪問代碼。 
  二、程序的具體實現 
    一、首先我們先創建Web項目,並新建一個實體類,這個類需要實現Serializable接口。

 1 package entity; 
 2 import java.io.Serializable; 
 3 public class Book implements Serializable { 
 4   private String name; 
 5   private double price; 
 6   public String getName() { 
 7     return name; 
 8   } 
 9   public void setName(String name) { 
10     this.name = name; 
11   } 
12   public double getPrice() { 
13     return price; 
14   } 
15   public void setPrice(double price) { 
16     this.price = price; 
17   } 
18 } 

    二、創建一個接口 

1 package service; 
2 import java.util.List; 
3 import entity.Book; 
4 public interface BookService { 
5   List<Book> getList(); 
6 } 

    三、創建一個類實現步驟二中的接口,並且這個類需要繼承HessianServlet類(這里需要Hessian的jar文件可以到這個網站下載http://hessian.caucho.com/#Java

 1 package service.impl; 
 2 import java.util.ArrayList; 
 3 import java.util.List; 
 4 import service.BookService; 
 5 import com.caucho.hessian.server.HessianServlet; 
 6 import entity.Book; 
 7 public class BookServiceImpl extends HessianServlet implements BookService { 
 8     public List<Book> getList() { 
 9         List<Book> list=new ArrayList<Book>(); 
10         Book b1=new Book(); 
11         b1.setName("《信息簡史》"); 
12         b1.setPrice(56); 
13         Book b2=new Book(); 
14         b2.setName("《黑客與畫家》"); 
15         b2.setPrice(48); 
16         list.add(b1); 
17         list.add(b2); 
18         return list; 
19     } 
20 
21 } 

    四、到WEB-INF下的web.xml中配置信息

<servlet> 
    <servlet-name>book</servlet-name> 
    <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class> 
    <init-param> 
        <param-name>home-api</param-name> 
        <param-value>service.BookService</param-value> 
    </init-param> 
    <init-param> 
        <param-name>home-class</param-name> 
        <param-value>service.impl.BookServiceImpl</param-value> 
    </init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>book</servlet-name> 
    <url-pattern>/book</url-pattern> 
</servlet-mapping>                     

 


      配置好之后,部署項目到Tomcat服務器,並啟動服務。

 
    五、編寫客戶訪問代碼 

 1 package test; 
 2 import java.util.List; 
 3 import service.BookService; 
 4 import com.caucho.hessian.client.HessianProxyFactory; 
 5 import entity.Book; 
 6 public class Test { 
 7   public static void main(String[] args) { 
 8     String url="http://127.0.0.1:8080/test/book"; 
 9     HessianProxyFactory factory=new HessianProxyFactory(); 
10     try { 
11       BookService bookService=(BookService) factory.create(BookService.class, url); 
12       List<Book> list = bookService.getList(); 
13       for (Book book : list) { 
14         System.out.println(book.getName()+",定價為:"+book.getPrice()+"元。"); 
15       } 
16     } catch (Exception e) { 
17       e.printStackTrace(); 
18     } 
19   } 
20 } 

 


      運行代碼,控制台顯示結果為 
      ===========控制台============ 

      《信息簡史》,定價為:56.0元。 
      《黑客與畫家》,定價為:48.0元。 

      ============================= 

接下來我們來講一下Spring整合Hessian

Spring整合Hessian

  注意事項:

      Hassian 3.2.0采用了新的Hassian 2協議,而Spring2.5.6 只支持Hassian 1協議,所以spring 2.5.6所能支持的最大版本為Hassian 3.1.6,最好使用spring 2.5.6附帶的版本Hassian 3.1.3,而對Hassian 2的支持,需要 Spring 3.0。

  一、首先我們創建一個接口

1 package service;
2 import java.util.List;
3 import entity.Book;
4 public interface BookService {
5     List<Book> getList();
6 }

  二、編寫一個類,只需實現步驟一中的接口

 1 package service.impl;
 2 import java.util.ArrayList;
 3 import java.util.List;
 4 import service.BookService;
 5 import entity.Book;
 6 public class BookServiceImpl implements BookService {
 7     public List<Book> getList() {
 8         List<Book> list=new ArrayList<Book>(); 
 9         Book b1=new Book(); 
10         b1.setName("《信息簡史》"); 
11         b1.setPrice(56); 
12         Book b2=new Book(); 
13         b2.setName("《黑客與畫家》"); 
14         b2.setPrice(48); 
15         list.add(b1); 
16         list.add(b2); 
17         return list; 
18     }
19 }

  三、我們在WEB-INF下的web.xml中配置SpringMVC需要的信息(spring整合hessian需要用到SpringMVC)

  <context-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <listener>
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
 
  <servlet>
      <servlet-name>springmvc</servlet-name>
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  </servlet>
  <servlet-mapping>
      <servlet-name>springmvc</servlet-name>
      <url-pattern>/</url-pattern>
  </servlet-mapping>

  四、在applicationContext.xml配置bean信息

    <bean id="bookService" class="service.impl.BookServiceImpl"></bean>
    
    <bean id="BookService"
        class="org.springframework.remoting.caucho.HessianServiceExporter"
        p:service-ref="bookService"
        p:serviceInterface="service.BookService"
    />

  五、現在WEB-INF目錄下新建springmvc-servlet.xml文件,並配置一下。(可以把applicationContext.xml拷到目錄下改一下名字)

    <bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/book">BookService</prop>
            </props>
        </property>
    </bean>

 

  六、接下我們應該在客戶端程序applicationContext.xml中配置獲取服務的bean信息(我這里是在同一個applicationContext.xml文件中編寫,但不影響測試功能)

    <bean id="getBookService"
        class="org.springframework.remoting.caucho.HessianProxyFactoryBean"
        p:serviceUrl="http://127.0.0.1:8080/test/book"
        p:serviceInterface="service.BookService"
    />

  七、現在我們編寫一下測試代碼,在運行下面代碼之前需要把項目部署到Tomcat中,並運行Tomcat

 1 package test;
 2 import java.util.List;
 3 import org.springframework.context.ApplicationContext;
 4 import org.springframework.context.support.ClassPathXmlApplicationContext;
 5 import service.BookService;
 6 import entity.Book;
 7 public class Test {
 8     public static void main(String[] args) {
 9         ApplicationContext cxt=new ClassPathXmlApplicationContext("applicationContext.xml");
10         BookService bookService=(BookService) cxt.getBean("getBookService");
11         List<Book> list = bookService.getList();
12         for (Book book : list) {
13             System.out.println(book.getName()+",定價為:"+book.getPrice()+"元。"); 
14         }
15     }
16 
17 }

 

      運行代碼,控制台顯示結果為 
      ===========控制台============ 

      《信息簡史》,定價為:56.0元。 
      《黑客與畫家》,定價為:48.0元。 

      ============================= 

到這里我們已經學習spring和怎么整合hessian了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM