ALL is Well!

          敏捷是一條很長(zhǎng)的路,摸索著前進(jìn)著

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            30 隨筆 :: 23 文章 :: 71 評(píng)論 :: 0 Trackbacks
          本文為原創(chuàng),歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明出處BlogJava

          Hessian是一個(gè)輕量級(jí)的remoting onhttp工具,使用簡(jiǎn)單的方法提供了RMI的功能. 相比WebService,Hessian更簡(jiǎn)單、快捷。
          采用的是二進(jìn)制RPC協(xié)議,因?yàn)椴捎玫氖嵌M(jìn)制協(xié)議,所以它很適合于發(fā)送二進(jìn)制數(shù)據(jù)。

          本文將分為以下幾個(gè)內(nèi)容:
          一、一個(gè)簡(jiǎn)單的Hessian調(diào)用例子
          二、Spring+Hessian的例子
          三、使我們的調(diào)用變得通用

          第一部分:一個(gè)簡(jiǎn)單的Hessian調(diào)用例子
          建立web工程HessianService。
          這里為了簡(jiǎn)單起見,我將遠(yuǎn)程接口類、接口實(shí)現(xiàn)類都定義在此web工程下。

          個(gè)人覺得一個(gè)比較好的做法是將web工程分開,此web工程只定義對(duì)外的接口并提供服務(wù),而實(shí)現(xiàn)類新建一個(gè)Java工程存放。
          這樣web工程依賴此Java工程,且客戶端也依賴此Java工程。

          1) 遠(yuǎn)程接口類 ServiceRemote.java

           

          package com.al;

          import java.util.Map;

          @SuppressWarnings(
          "unchecked")
          public interface ServiceRemote  {
              
          public Map callService(Map inputMap) ;
          }


          2) 實(shí)現(xiàn)類 Service.java

          package com.al;

          import java.util.HashMap;
          import java.util.Map;

          @SuppressWarnings(
          "unchecked")
          public class Service implements ServiceRemote {

              
          public Map callService(Map inputMap) {
                  
          if(inputMap == null{
                      inputMap 
          = new HashMap();
                  }

                  
          // do something
                  
          // 
                  inputMap.put("NAME""Hessian");
                  
          return inputMap;
              }

          }


          3) web.xml配置

          <?xml version="1.0" encoding="UTF-8"?>
          <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation
          ="http://java.sun.com/xml/ns/javaee 
           http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
          >
              
          <servlet>
                  
          <servlet-name>hessianService</servlet-name>
                  
          <servlet-class>com.caucho.hessian.server.HessianServlet</servlet-class>
                  
          <init-param>
                      
          <param-name>service-class</param-name>
                      
          <param-value>com.al.Service</param-value>
                  
          </init-param>
              
          </servlet>
              
          <servlet-mapping>
                  
          <servlet-name>hessianService</servlet-name>
                  
          <url-pattern>/hessianService</url-pattern>
              
          </servlet-mapping>
          </web-app>


          經(jīng)過(guò)以上3步,hessian服務(wù)部署算是完成了,在tomcat下發(fā)布。

          4) 調(diào)用方代碼

          package com.ai.client;

          import com.al.ServiceRemote;
          import com.caucho.hessian.client.HessianProxyFactory;

          public class ClientTest {
              
          public static void main(String[] args) throws Exception {
                  String url 
          = "http://localhost:8080/HessianService/hessianService";
                  HessianProxyFactory factory 
          = new HessianProxyFactory();
                  ServiceRemote rmt 
          = (ServiceRemote) factory.create(ServiceRemote.class, url);
                  System.out.println(rmt.callService(
          null));
              }

          }


          執(zhí)行代碼,結(jié)果如下:
          {NAME=Hessian}
          說(shuō)明調(diào)用遠(yuǎn)程代碼成功了。

          二、Spring+Hessian的例子
          1) web工程HessianService 的ServiceRemote 和Service類不變。對(duì)web.xml進(jìn)行修改:

          <?xml version="1.0" encoding="UTF-8"?>
          <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
              xsi:schemaLocation
          ="http://java.sun.com/xml/ns/javaee 
              http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
          >
              
          <context-param>
                  
          <param-name>contextConfigLocation</param-name>
                  
          <param-value>/WEB-INF/dispatcher-servlet.xml</param-value>
              
          </context-param>
              
          <servlet>
                  
          <servlet-name>dispatcher</servlet-name>
                  
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
                  
          <load-on-startup>1</load-on-startup>
              
          </servlet>
              
          <servlet-mapping>
                  
          <servlet-name>dispatcher</servlet-name>
                  
          <url-pattern>/remote/*</url-pattern>
              
          </servlet-mapping>
              
          <welcome-file-list>
                  
          <welcome-file>index.jsp</welcome-file>
              
          </welcome-file-list>
          </web-app>


          這里要注意的是:
          a)dispatcher-servlet.xml這個(gè)文件的命名。servlet配置為dispatcher,則此文件定義規(guī)則為****-servlet.xml.

          b)另外就是Spring和hessian的版本問(wèn)題。
          spring版本是2.5.6,需要在此web工程下引入:spring-2.5.6.jar、spring-webmvc-2.5.6.jar、commons-logging-1.1.1.jar。
          hessian的版本是hessian-3.1.6.jar,hessian的低版本如 hessian-3.0.13和此Spring版本不合。(我試驗(yàn)了是配置不成功的。)

          2) dispatcher-servlet.xml

          <?xml version="1.0" encoding="UTF-8"?>
          <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
          <beans>
              
          <description>hessian server properties</description>
              
          <bean id="serviceImpl" class="com.al.Service" />
              
          <bean name="/service" class="org.springframework.remoting.caucho.HessianServiceExporter">
                  
          <property name="service">
                      
          <ref bean="serviceImpl" />
                  
          </property>
                  
          <property name="serviceInterface">
                      
          <value>com.al.ServiceRemote</value>
                  
          </property>
              
          </bean>
          </beans>


          3) 客戶端代碼可以保持原樣不變,把調(diào)用hessian服務(wù)的url變換一下即可:
          http://localhost:8080/HessianService/remote/service
          http://IP:port/發(fā)布工程名/web.xml中配置的url-pattern/****-servlet.xml bean的ID。

          三、使我們的調(diào)用變得通用 將在下一篇中介紹。

          posted on 2010-10-17 21:11 李 明 閱讀(2824) 評(píng)論(0)  編輯  收藏 所屬分類: J2EESpring
          主站蜘蛛池模板: 北安市| 白玉县| 连江县| 潮安县| 哈尔滨市| 迭部县| 双流县| 威海市| 承德县| 东光县| 平定县| 克拉玛依市| 桐梓县| 亳州市| 承德县| 浏阳市| 昌黎县| 南雄市| 平泉县| 安化县| 新巴尔虎右旗| 从化市| 岗巴县| 淮安市| 千阳县| 丹凤县| 陵川县| 于都县| 夹江县| 甘南县| 镇平县| 合山市| 南岸区| 湘阴县| 铜鼓县| 吴江市| 东城区| 宝兴县| 桐柏县| 博野县| 西乡县|