<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的順序哦
    主站蜘蛛池模板: 足恋玩丝袜脚视频免费网站| 国产一区二区免费视频| 女人18毛片水真多免费看| 亚洲一级大黄大色毛片| 亚洲大片免费观看| 亚洲精品免费在线| 在人线av无码免费高潮喷水| 亚洲国产精品免费在线观看| 亚洲免费福利视频| 亚洲人xxx日本人18| 午夜无遮挡羞羞漫画免费| 亚洲成在人线中文字幕| 91嫩草国产在线观看免费| 亚洲人成色4444在线观看| 国产成人免费网站在线观看| 亚洲日韩在线观看免费视频| 亚洲精品高清视频| 成人免费一级毛片在线播放视频| 亚洲色欲色欱wwW在线| jlzzjlzz亚洲乱熟在线播放| 永久免费av无码网站yy| 亚洲人xxx日本人18| 亚洲福利精品一区二区三区| 在线涩涩免费观看国产精品| 亚洲人成片在线观看| 四虎1515hm免费国产| 精品四虎免费观看国产高清午夜| 亚洲色图黄色小说| 四虎影库久免费视频| 免费成人在线视频观看| 亚洲AV成人噜噜无码网站| www.91亚洲| 久久久久久精品成人免费图片| 亚洲国产成人久久综合| 亚洲人成77777在线播放网站| 免费专区丝袜脚调教视频| 美女羞羞免费视频网站| 亚洲综合自拍成人| 免费大香伊蕉在人线国产| 亚洲免费视频网站| 特黄aa级毛片免费视频播放|