struts2+Srping+HSF,MVC模式

以下是我進入公司一週來所做的工作的大致流程,算是自己對工作的一個記錄吧~~  /(0^◇^0)/


MVC模式:MVC架構是"Model-View-Controller"的縮寫,MVC應用程序總是由這三個部分組成。Event(事件)導致Controller改變Model或View,或者同時改變兩者。只要Controller改變了Models的數據或者屬性,所有依賴的View都會自動更新。類似的,只要Controller改變了View,View會從潛在的Model中獲取數據來刷新自己。

1、模型(Model) 模型是應用程序的主體部分。模型表示業務數據,或者業務邏輯.

2、視圖(View)  視圖是應用程序中用戶界面相關的部分,是用戶看到並與之交互的界面。

3、控制器(controller) 控制器工作就是根據用戶的輸入,控制用戶界面數據顯示和更新model對象狀態。

MVC 式的出現不僅實現了功能模塊和顯示模塊的分離,同時它還提高了應用系統的可維護性、可擴展性、可移植性和組件的可複用性


HSF旨在爲淘寶應用體用一個分佈式的服務框架,HSF從分佈式應用層以及統一的發佈/調用方式層面爲大家提供支持,從而可以很容易的開發分佈式的應用以及提供給或使用公用功能模塊,二不用考慮分佈式領域中的各種細節技術。


一、MVN的使用
1.在命令行下輸入命令:svn co URL ,作用是把一個project從倉庫中導出
2.進入導入項目的文件夾下
3.運行命令:mvn eclipse:eclipse ,在eclipse中創建上面項目的執行環境
4.在eclipse中file->import->Maven->Existing Maven Projects,導入maven項目
5.tomcat端的配置:在conf文件夾的server.xml中的<host>的最後面添加 <Context path="" docBase="D:/項目目錄/src/main/webapp"/>
6.編譯 mvn war:inplace 導入所需的jar包

二、HSF的使用
1.在host文件中添加
  10.252.71.21  api1.configserver.hz1.koubei.com
  10.252.71.21  api2.configserver.hz1.koubei.com
2.修改src/main/webapp/WEB-INF/web.xml, 在SpringListen前增加
  <listener-class>
          com.taobao.hsf.thirdcontainer.independent.HSFLoaderListener
   </listener-class>
  <listener-class>
             org.springframework.web.context.ContextLoaderListener
    </listener-class>

3.添加HSF的插件包
  在config.properties文件中配置hsf.container.path=/usr/share/hsf(plugins所在的上級目錄)
4.添加HSF的包依賴:在pom.xml中加入
 <dependency>
       <groupId>com.koubei.hsf</groupId>
       <artifactId>hsf.independent</artifactId>
       <version>1.0.0</version>
     </dependency>

    <dependency>
    <groupId>com.koubei</groupId>
    <artifactId>koubei-cc-api</artifactId>
    <version>1.2.0</version>
    </dependency>
5.配置Spring,在src/main/resources/applicationContext.xml中加入
  <beans>
     <import resource="classpath:cc-consumption.hsf.client.context.xml" />
  </beans>
  //注:cc-consumption.hsf.client.context.xml爲koubei-cc-api-1.2.0/META-INF下的文件名

以上是基本的配置使用。

 

若想實現MVC模式,需要在struts.xml文件中進行配置,使action與相應的jsp頁面相關聯,配置方法如下:

<package name="com.koubei.example" namespace="/example" extends="struts-default">
        <action name="HelloWorld" class="com.koubei.example.HelloWorld">
            <result name="success">/example/HelloWorld.jsp</result>
        </action>
 </package>

action即爲對用戶請求的響應,action下可以有多個result,根據java頁面返回的不同的結果跳轉到不同的頁面,其中result中的name屬性即對應java頁面的不同的返回值。


下面是我使用HSF服務時出現的問題及解決方法:

consumptionDetailService(是HSF中的一種服務)出現空指針,出現這個問題是因爲,struts和HSF沒有用Spring進行關聯,解決方法是在struts.xml配置文件中加入
    <constant name="struts.objectFactory" value="spring" />
    <constant name="struts.objectFactory.spring.autoWire" value="name" />

這時又會出現另一個問題,提示信息如下:

Caused by: java.lang.NullPointerException
  at com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance(SpringObjectFactory.java:209)
  at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.verifyResultType

(XmlConfigurationProvider.java:519)
  at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addResultTypes

(XmlConfigurationProvider.java:490)
  at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.addPackage

(XmlConfigurationProvider.java:446)
  at com.opensymphony.xwork2.config.providers.XmlConfigurationProvider.loadPackages

(XmlConfigurationProvider.java:264)
  at org.apache.struts2.config.StrutsXmlConfigurationProvider.loadPackages(StrutsXmlConfigurationProvider.java:111)
  at com.opensymphony.xwork2.config.impl.DefaultConfiguration.reloadContainer(DefaultConfiguration.java:193)
  at com.opensymphony.xwork2.config.ConfigurationManager.getConfiguration(ConfigurationManager.java:55)

  at org.apache.struts2.dispatcher.Dispatcher.init_PreloadConfiguration(Dispatcher.java:374)
  at org.apache.struts2.dispatcher.Dispatcher.init(Dispatcher.java:418)
    ...

這時需要在pom.xml中加入
       <dependency>
            <groupId>org.apache.struts</groupId>
            <artifactId>struts2-spring-plugin</artifactId>
            <version>2.2.1</version>
        </dependency>
其中版本查詢方法在下面的這個鏈接裏查詢:

http://10.13.126.237:8081/nexus/index.html#nexus-search;gav~org.apache.struts~struts2-spring-plugin~~~~kw,versionexpand
到此以上的問題就解決了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章