<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 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    使用Hessian開發(fā)C/S模式的小系統(tǒng)

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

    Hessian其實是一種RMI技術(shù),已經(jīng)被集成在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文件的內(nèi)容如下:
    #在此配置服務(wù)器端信息

    #服務(wù)器地址
    serverName=172.18.17.111

    #服務(wù)器端端口號
    port=8080

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

    客戶端的代碼基本就這么多,主要應(yīng)該關(guān)注的是對用戶的表現(xiàn),至于業(yè)務(wù)邏輯,就讓服務(wù)器端去實現(xiàn)好了。

    再看服務(wù)器端的配置:
    接口跟上面的ILoginService一樣
    在我的程序中,使用了Spring MVC進(jìn)行URL Mapping。
    web.xml內(nèi)容如下:
    <?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(注意,名稱不能更改)內(nèi)容如下:
    <?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就是服務(wù)器端時間處理登錄的對象,它要實現(xiàn)ILoginService接口
    在spring-common.xml中定義了數(shù)據(jù)源和一些基本的類,比如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>
    經(jīng)過上面的配置,就實現(xiàn)了最基礎(chǔ)的Hessian功能了。這個程序很小,但是可以幫助我們熟悉一下Hessian,等于是個入門吧


    評論

    # re: 使用Hessian開發(fā)C/S模式的小系統(tǒng)  回復(fù)  更多評論   

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

    # re: 使用Hessian開發(fā)C/S模式的小系統(tǒng)  回復(fù)  更多評論   

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

    果然開始更新了

    有鉆研就有新發(fā)現(xiàn)

    技術(shù)牛人=zouang

    # re: 使用Hessian開發(fā)C/S模式的小系統(tǒng)  回復(fù)  更多評論   

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

    # re: 使用Hessian開發(fā)C/S模式的小系統(tǒng)  回復(fù)  更多評論   

    2012-04-25 06:44 by
    太謝謝啦,終于明白了 加載spring的順序哦
    主站蜘蛛池模板: 亚洲人成网站在线播放2019| 精品国产亚洲男女在线线电影| 亚洲一区二区三区免费视频| 国产婷婷成人久久Av免费高清| 成av免费大片黄在线观看| 久久精品无码专区免费| GOGOGO免费观看国语| 999zyz**站免费毛片| 免费无码黄网站在线看| 久久久精品免费国产四虎| 久9热免费精品视频在线观看| 黄网站免费在线观看| 69国产精品视频免费| 999国内精品永久免费观看| 91在线视频免费91| 午夜爱爱免费视频| 一本久久综合亚洲鲁鲁五月天| 亚洲国产精品成人AV无码久久综合影院| 亚洲国产精品丝袜在线观看| 夜夜春亚洲嫩草影院| 亚洲AV无码成人精品区蜜桃| 亚洲精品韩国美女在线| 国产亚洲sss在线播放| 亚洲国产综合AV在线观看| jzzijzzij在线观看亚洲熟妇| 日韩在线视频播放免费视频完整版| 九九热久久免费视频| 久久免费福利视频| 韩国免费一级成人毛片| 国产精品酒店视频免费看| 三上悠亚亚洲一区高清| 亚洲黄色在线观看视频| 亚洲日韩一区二区三区| 人妻18毛片a级毛片免费看| 久久狠狠躁免费观看2020| 国产一卡2卡3卡4卡无卡免费视频| 噜噜嘿在线视频免费观看| 亚洲无线码一区二区三区| 亚洲精品国产福利片| 理论亚洲区美一区二区三区| 久久国产乱子伦精品免费强|