<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 32, comments - 153, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    使用Hessian開發C/S模式的小系統

    Posted on 2007-07-28 10:48 Zou Ang 閱讀(3851) 評論(4)  編輯  收藏 所屬分類:
    使用Hessian開發C/S模式的小系統
    之所以叫小系統,主要是因為Hessian不支持Hibernate的延遲加載,所以需要在DAO層使用Hibernate的同學請注意了。

    Hessian其實是一種RMI技術,已經被集成在Spring Framework中了,這樣就很方便了。

    首先看客戶端

    第一步:
    先定義Client與Server交互的接口。
    比如:
    package edu.zsu.zouang.pos.service;

    import edu.zsu.zouang.pos.pojo.User;
    /**
     * Please Contact <a href="mailto:richardeee@gmail.com">Zou Ang</a>
     * 
    @author Zou Ang
     *
     
    */
    public interface ILoginService extends Service{
        
    public User login(String loginName, String password);
        
        
    public boolean logout(String loginName);
    }
    然后定義xml配置文件
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
    <beans>

        
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            
    <property name="location">
                
    <value>config.properties</value>
            
    </property>
        
    </bean>

        
    <bean id="urlMapping"
            class
    ="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
        
    </bean>
        
        
    <bean id="loginClient" class="org.springframework.remoting.caucho.HessianProxyFactoryBean">
            
    <property name="serviceUrl">
                
    <value>http://${serverName}:${port}/${contextPath}/login.do</value>
            
    </property>
            
    <property name="serviceInterface">
                
    <value>edu.zsu.zouang.pos.service.ILoginService</value>
            
    </property>
        
    </bean>
    </beans>
    其中config.properties文件的內容如下:
    #在此配置服務器端信息

    #服務器地址
    serverName=172.18.17.111

    #服務器端端口號
    port=8080

    #服務器端上下文
    contextPath=pos
    這樣,在得到loginClient對象以后,就可以直接使用login(username,pwd)來登錄了。Hessian會自動把請求發送給服務器端。

    客戶端的代碼基本就這么多,主要應該關注的是對用戶的表現,至于業務邏輯,就讓服務器端去實現好了。

    再看服務器端的配置:
    接口跟上面的ILoginService一樣
    在我的程序中,使用了Spring MVC進行URL Mapping。
    web.xml內容如下:
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
        
    <display-name>pos</display-name>
        
    <welcome-file-list>
            
    <welcome-file>index.html</welcome-file>
            
    <welcome-file>index.htm</welcome-file>
            
    <welcome-file>index.jsp</welcome-file>
            
    <welcome-file>default.html</welcome-file>
            
    <welcome-file>default.htm</welcome-file>
            
    <welcome-file>default.jsp</welcome-file>
        
    </welcome-file-list>
        
    <context-param>
        
    <param-name>webAppRootKey</param-name>
        
    <param-value>pos.root</param-value>
      
    </context-param>
        
    <listener>
            
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
        
    </listener>
        
    <context-param>
            
    <param-name>log4jConfigLocation</param-name>
            
    <param-value>WEB-INF/log4j.properties</param-value>
        
    </context-param>
        
    <listener>
            
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
        
    </listener>
        
    <context-param>
            
    <param-name>contextConfigLocation</param-name>
            
    <param-value>
                WEB-INF/springctx-common.xml
                WEB-INF/springctx-login.xml
                WEB-INF/applicationContext.xml
                WEB-INF/DispatcherServlet-servlet.xml
            
    </param-value>
        
    </context-param>
        
    <filter>
            
    <filter-name>hibernateFilter</filter-name>
            
    <filter-class>org.springframework.orm.hibernate3.support.OpenSessionInViewFilter</filter-class>
        
    </filter>

        
    <filter-mapping>
            
    <filter-name>hibernateFilter</filter-name>
            
    <url-pattern>*.do</url-pattern>
        
    </filter-mapping>
        
        
    <servlet>
            
    <servlet-name>DispatcherServlet</servlet-name>
            
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
            
    <load-on-startup>1</load-on-startup>
        
    </servlet>
        
    <servlet-mapping>
            
    <servlet-name>DispatcherServlet</servlet-name>
            
    <url-pattern>*.do</url-pattern>
        
    </servlet-mapping>
        
    <servlet>
          
    <servlet-name>dwr-invoker</servlet-name>
          
    <display-name>DWR Servlet</display-name>
          
    <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>
          
    <init-param>
              
    <param-name>debug</param-name>
              
    <param-value>true</param-value>
          
    </init-param>
      
    </servlet>
      
    <servlet-mapping>
          
    <servlet-name>dwr-invoker</servlet-name>
          
    <url-pattern>/dwr/*</url-pattern>
      
    </servlet-mapping>
    </web-app>
    其中DispatcherServlet-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>
        
    <bean name="/login.do" class="org.springframework.remoting.caucho.HessianServiceExporter">
            
    <property name="service">
                
    <ref bean="loginService" />
            
    </property>
            
    <property name="serviceInterface">
                
    <value>edu.zsu.zouang.pos.service.ILoginService</value>
            
    </property>
        
    </bean><!--
        
        <bean name="/inventory.do" class="org.springframework.remoting.caucho.HessianServiceExporter">
            <property name="service">
                <ref bean="posGoodsService" />
            </property>
            <property name="serviceInterface">
                <value>edu.zsu.zouang.pos.service.IPosGoodsService</value>
            </property>
        </bean>
        
    --></beans>

    在配置文件中的loginService就是服務器端時間處理登錄的對象,它要實現ILoginService接口
    在spring-common.xml中定義了數據源和一些基本的類,比如sessionFactory和transactionManager,dataSource使用了C3P0
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd" >
    <beans>
        
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
            
    <property name="location">
                
    <value>WEB-INF/connection.properties</value>
            
    </property>
        
    </bean>
        
    <bean id="c3p0DataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
            
    <property name="driverClass" value="${jdbc.driverClassName}" />
            
    <property name="jdbcUrl" value="${jdbc.url}" />
            
    <property name="user" value="${jdbc.username}" />
            
    <property name="password" value="${jdbc.password}" />
            
    <property name="minPoolSize" value="${jdbc.minPoolSize}" />
            
    <property name="maxPoolSize" value="${jdbc.maxPoolSize}" />
            
    <property name="maxIdleTime" value="${jdbc.maxIdleTime}" />
            
    <property name="acquireIncrement" value="${jdbc.acquireIncrement}" />
            
    <property name="maxStatements" value="${jdbc.maxStatements}" />
            
    <property name="initialPoolSize" value="${jdbc.initialPoolSize}" />
            
    <property name="idleConnectionTestPeriod" value="${jdbc.idleConnectionTestPeriod}" />
            
    <property name="acquireRetryAttempts" value="${jdbc.acquireRetryAttempts}" />
            
    <property name="breakAfterAcquireFailure" value="${jdbc.breakAfterAcquireFailure}" />
            
    <property name="testConnectionOnCheckout" value="${jdbc.testConnectionOnCheckout}" />
        
    </bean>
        
        
    <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
            
    <property name="mappingResources">
                
    <list>
                    
    <value>edu/zsu/zouang/pos/pojo/Goods.hbm.xml</value>
                    
    <value>edu/zsu/zouang/pos/pojo/GoodsType.hbm.xml</value>
                    
    <value>edu/zsu/zouang/pos/pojo/User.hbm.xml</value>
                    
    <value>edu/zsu/zouang/pos/pojo/Role.hbm.xml</value>
                    
    <value>edu/zsu/zouang/pos/pojo/UserRole.hbm.xml</value>
                
    </list>
            
    </property>
            
    <property name="hibernateProperties">
                
    <props>
                    
    <prop key="hibernate.dialect">${hibernate.dialect}</prop>
                    
    <prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
                
    </props>
            
    </property>
            
    <property name="dataSource" ref="c3p0DataSource"/>
        
    </bean>
        
        
    <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
            
    <property name="sessionFactory"><ref local="sessionFactory"/></property>
        
    </bean>
    </beans>
    在applicationContext.xml中配置了Spring MVC所需要的類
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
    <beans>
        
    <!--Definition of View Resolver -->
        
    <bean id="viewResolver"
            class
    ="org.springframework.web.servlet.view.InternalResourceViewResolver">
            
    <property name="viewClass"
                value
    ="org.springframework.web.servlet.view.JstlView" />
            
    <property name="prefix" value="/WEB-INF/jsp/" />
            
    <property name="suffix" value=".jsp" />
        
    </bean>


        
    <!--Request Mapping -->
        
    <bean id="urlMapping"
            class
    ="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping">
        
    </bean>

    </beans>
    經過上面的配置,就實現了最基礎的Hessian功能了。這個程序很小,但是可以幫助我們熟悉一下Hessian,等于是個入門吧


    評論

    # re: 使用Hessian開發C/S模式的小系統  回復  更多評論   

    2007-07-30 16:07 by CowNew開源團隊
    《J2EE開發全程實錄》中給出了一個在分布式系統中使用Hibernate而免于考慮延遲加載的解決方案,可以參考一下,:)

    # re: 使用Hessian開發C/S模式的小系統  回復  更多評論   

    2007-08-01 23:30 by 橙子
    mmmm,,,,,,

    果然開始更新了

    有鉆研就有新發現

    技術牛人=zouang

    # re: 使用Hessian開發C/S模式的小系統  回復  更多評論   

    2009-03-19 19:22 by manlge
    多簡單的功能讓你整這么復雜,這就是Spring垃圾框架帶來的結果

    # re: 使用Hessian開發C/S模式的小系統  回復  更多評論   

    2012-04-25 06:44 by
    太謝謝啦,終于明白了 加載spring的順序哦
    主站蜘蛛池模板: 精品亚洲国产成AV人片传媒| 日韩精品无码专区免费播放| 亚洲人成网站看在线播放| 久久精品国产精品亚洲人人| 波多野结衣久久高清免费| 亚洲精品在线免费观看| a毛片在线看片免费| 无码AV动漫精品一区二区免费| 亚洲性色精品一区二区在线| 亚洲宅男永久在线| 国产亚洲综合色就色| 亚洲七七久久精品中文国产| 国产精品视频免费一区二区三区| 无码专区永久免费AV网站| 久久午夜羞羞影院免费观看| 你懂的网址免费国产| xvideos永久免费入口| 国产亚洲精品免费| 337p日本欧洲亚洲大胆人人| 国产精品亚洲片在线va| 亚洲一欧洲中文字幕在线| 亚洲色图视频在线观看| 亚洲av无码成人黄网站在线观看| 亚洲精品你懂的在线观看 | 亚洲va在线va天堂va手机| 久久亚洲美女精品国产精品| 亚洲AV日韩AV高潮无码专区| 国产亚洲精AA在线观看SEE| 亚洲线精品一区二区三区影音先锋 | 夜夜嘿视频免费看| 成在人线AV无码免费| 成人午夜视频免费| 日本免费人成视频播放| 国产精品免费_区二区三区观看 | 亚洲日韩一区二区一无码| 中文字幕亚洲男人的天堂网络| 亚洲无mate20pro麻豆| 亚洲综合成人婷婷五月网址| 亚洲乱色伦图片区小说 | 真实乱视频国产免费观看| 国产禁女女网站免费看|