国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

WebWork IoC 特性使用

2019-11-18 16:12:05
字體:
來源:轉載
供稿:網友

 

以前寫的一點總結,雖然webwork將sPRing的ioc部分引入,取消了原有的IOC,但對于2.1X版本以前的項目,還是可以使用一下。

 

WebWork相對于Struts支持部分IoC特性,可以減少各組件間的耦合,配合接口編程可以給系統帶來更大的靈活性。另一方面,也方便了單元測試。

第一種、使用WebWork默認提供的對jsp隱含對象的注入支持,不用進行太多的設置就可以在Action中直接使用request,session,application等對象。

對應接口常用的包括:

ParameterAware  頁表表單中傳遞的參數,經WebWork轉換成Map類型。

SessionAware  session對象接口,經WebWork轉換成Map類型。

ApplicationAware  application對象接口,經WebWork轉換成Map類型。

ServletRequestAware  HttpServletRequest對象接口。

只要在Action中加入相應變量,并實現接口方法,就可以在Action中直接使用,不需要手工生成和管理對象。

不使用IoC時調用JSP對象使用方法:

        ActionContext ctx = ActionContext.getContext();

        HttpServletRequest request = ServletActionContext.getRequest();

        HttpSession session = request.getSession();

這種手工獲取隱含對象的方法必須依賴Web容器,不便于進行單元測試。

使用IoC的方法如下例:

步驟1、Action實現需要訪問的相應對象接口。

AlarmRecordAction.java


public class AlarmRecordAction extends ActionSupport implements SessionAware {

       private Map session = null;//定義session變量

       public void setSession(Map arg0) {

              this.session = arg0;

       }

       public String execute() throws Exception {

              String str = session.get(“testName”);//可以直接使用session,Webwork框架會自行注入實例。

              System.out.println(“JSP Session對象中的變量testName::” + str);

       }

}

步驟2、設置xwork.xml文件。

Xwork.xml

<action name="AlarmRecordAction" class="AlarmRecordAction">

       <result name="error" type="redirect">

              <param name="location">error.jsp</param>

       </result>

       <result name="sUCcess" type="redirect">

              <param name="location">success.jsp</param>

       </result>

       <interceptor-ref name="defaultStack"/>


</action>

在寫JUnit測試用例時,如下:

AlarmRecordActionTest.java

public class AlarmRecordActionTest extends MockObjectTestCase {

AlarmRecordAction action;

protected void setUp() throws Exception {

super.setUp();

action = new AlarmRecordAction();

}

public void testExecute() throws Exception {

action.setSession(new HashMap());

assertEquals("success", action.execute());

}

}

這樣就可以傳入需要的session,完成Action單元測試。

 

第二種、使用components,實現自定義組件的依賴注入。

步驟1、建立需要在其它類中調用的組件類,可以是實現業務的功能類,也可以是POJO,需要提供無參數的構造函數。

AlarmRecord.java

public class AlarmRecord {

private String AlarmRecordID;

private String AlarmRecordType;


public AlarmRecord() {

}

public void setAlarmRecordID(String id) {

this.AlarmReordID = id;

}

public String getAlarmRecordID() {

return this.AlarmRecordID;

}

}

步驟2、建立組件類的Aware接口。

AlarmRecordAware.java

public interface AlarmRecordAware {

    public void setAlarmRecord(AlarmRecord alarm) ;

}

步驟3、Action類實現組件類Aware接口。

AlarmRecordAction.java

public class AlarmRecordAction extends ActionSupport implements AlarmRecordAware {

    ....

private AlarmRecord alarm;//定義組件對象

public void setAlarmRecord(AlarmRecord alarm) {

this.alarm = alarm;

}

       public String execute() throws Exception {


              String str = alarm.getAlarmRecordID();//可以直接使用alarm,不需要自己new,Webwork框架會自行注入實例。

              System.out.println(“alarm id ::” + str);

       }

...

}

步驟4、編輯components.xml文件,注冊組件。

<components>

<component>

    <!—組件存在范圍,可以是request,session,application-->

        <scope>session</scope>

    <!—組件類-->

        <class>AlarmRecord</class>

    <!—組件類的Aware接口-->

<enabler>AlarmRecordAware</enabler>

    </component>

</components>

步驟5、編輯web.xml文件,加入相關特性支持。

<filter>

      <filter-name>container</filter-name>

      <filter-class>com.opensymphony.webwork.lifecycle.RequestLifecycleFilter</filter-class>

    </filter>

 

    <filter-mapping>


      <filter-name>container</filter-name>

      <url-pattern>*.action</url-pattern>

    </filter-mapping>

 

    <listener>

      <listener-class>com.opensymphony.webwork.lifecycle.SessionLifecycleListener</listener-class>

    </listener>

 

    <listener>

   <listener-class>com.opensymphony.webwork.lifecycle.ApplicationLifecycleListener</listener-class>

    </listener>

步驟6、編輯xwork.xml文件,讓Action支持組件注入。

<action name="AlarmRecordAction" class="AlarmRecordAction">

       <result name="error" type="redirect">

              <param name="location">error.jsp</param>

       </result>

       <result name="success" type="redirect">

              <param name="location">success.jsp</param>

       </result>

<interceptor-ref name="component"/>

           <interceptor-ref name="defaultStack"/>


</action>

    這樣就實現了組件注入支持。 JUnit里的使用方法類似前例。

(出處:http://www.survivalescaperooms.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 舟山市| 白城市| 新蔡县| 金川县| 南川市| 铁岭县| 双江| 仙桃市| 永清县| 莱西市| 宁城县| 平邑县| 崇阳县| 乐陵市| 南汇区| 浦东新区| 凤城市| 玉田县| 桃园市| 梓潼县| 景德镇市| 平定县| 龙里县| 芜湖市| 堆龙德庆县| 冀州市| 丽水市| 毕节市| 五大连池市| 宁河县| 丰台区| 志丹县| 保康县| 石阡县| 云阳县| 广德县| 孟连| 嘉鱼县| 砚山县| 盐山县| 沈丘县|