官术网_书友最值得收藏!

2.2 基于Struts2的加法器

在本書第1章中,使用了自定義的MVC框架來實現加法器,現在通過實現一個基于Struts2的加法器,進一步了解Struts2的處理流程。

在Struts2框架下開發加法器的具體步驟如下。

01 配置Struts2應用環境。

02 創建add.jsp頁面,接收用戶輸入數據。

03 創建業務邏輯類Calculator,實現數據的算術運算。

04 創建AddAction類,實現execute()方法。

05 在struts.xml中配置AddAction。

06 創建add_result.jsp頁面,顯示計算結果。

2.2.1 配置應用環境

為了讓Web應用支持Struts2的功能,必須將Struts2框架的核心類庫增加到Web應用中。Struts2的5個核心jar文件分別是:

        commons-logging-1.0.4.jar
        freemarker-2.3.8.jar
        ognl-2.6.11.jar
        struts2-core-2.0.14.jar
        xwork-2.0.7.jar

注意 本書中Struts2的版本為2.0.14,Struts2的下載及安裝參見實踐1。

將Struts2框架的核心jar文件復制到Web應用的lib路徑下,如圖2-2所示。

圖2-2 Web應用中增加Struts2支持

在Web應用中加入Struts2的核心類庫后,還需要修改web.xml配置文件,在web.xml文件中配置Struts2的核心控制器FilterDispatcher。配置文件代碼如下。

【描述2.D.1】web.xml

<filter>
    <!-- 配置Struts2框架的核心Filter -->
    <filter-name>struts2</filter-name>
    <!-- 配置Struts2核心Filter的實現類 -->
    <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <!-- 匹配所有請求 -->
    <url-pattern>/*</url-pattern>
</filter-mapping>

上述代碼中配置了Struts2的核心過濾器,指明過濾器類是FilterDispatcher,過濾器URL模式是匹配所有請求。如此,該Web應用就具備了Struts2框架的功能支持。

2.2.2 創建輸入視圖

下述代碼用于實現任務描述2.D.1,在WebContent目錄中創建加法器的輸入頁面add.jsp,用于接收兩個數值。

【描述2.D.1】add.jsp

<%@ page contentType="text/html; charset=GBK"%>
<html>
<head>
<title>Struts2計算器</title>
</head>
<body bgcolor="#ffffc0">
<h1>Struts2計算器</h1>
<form id="calcForm" method="post" action="add.action">
<table>
    <tbody>
        <tr>
            <td>第一個數</td>
            <td><input type="text" name="num1" /></td>
        </tr>
        <tr>
            <td>第二個數</td>
            <td><input type="text" name="num2" /></td>
        </tr>
        <tr>
            <td><input type="submit" value="加" /></td>
        </tr>
    </tbody>
</table>
</form>
</body>
</html>

上述代碼中的表單與任務描述1.D.1中的add.jsp沒有任何區別,表單依然提交給“add.action”進行處理。

2.2.3 實現業務邏輯類

下述代碼用于實現任務描述2.D.1,在com.haiersoft.ch02.biz包中創建加法器的業務邏輯類Calculator,實現加減乘除運算。

【描述2.D.1】Calculator.java

public class Calculator {
    /**
    * 實現算術加法
    */
    public double add(double a, double b) {
        return a + b;
    }
    /**
    * 實現算術減法
    */
    public double subtract(double a, double b) {
        return a - b;
    }
    /**
    * 實現算術乘法
    */
    public double multiply(double a, double b) {
        return a * b;
    }
    /**
    * 實現算術除法
    */
    public double divide(double a, double b) {
        // 注意:此處未判斷除數不能為零,即b!=0,頁面輸入的第二個數不可為0,否則報錯
        return a / b;
    }
}

上述代碼與任務描述1.D.1中的Calculator.java無任何區別。

2.2.4 創建業務控制器

下述代碼用于實現任務描述2.D.1,在com.haiersoft.ch02.action包中創建用于實現加法器的業務控制器AddAction。

【描述2.D.1】AddAction.java

public class AddAction {
    private double num1;
    private double num2;
    public double getNum1() {
        return num1;
    }
    public void setNum1(double num1) {
        this.num1 = num1;
    }
    public double getNum2() {
        return num2;
    }
    public void setNum2(double num2) {
        this.num2 = num2;
    }
    /**
    * 調用業務邏輯方法,實現業務,控制流程轉向
    */
    public String execute() {
    // 新建業務邏輯對象
        Calculator biz = new Calculator();
        // 調用業務邏輯方法,獲得返回值
        double result = biz.add(num1, num2);
        // 將計算結果存入Session中
        ActionContext.getContext().getSession().put("result", result);
        return "cal";
    }
}

上述代碼中定義了兩個屬性num1和num2,并提供相應的getter/setter方法。num1和num2與add.jsp頁面中表單的元素名相對應,如此,當表單提交時,表單中用戶輸入的元素值會通過setter方法設置到相應的屬性中。在execute()方法中,先實例化一個Calculator類的對象,再調用此對象的add()方法進行加法運算。將計算的結果值保存到Session中,代碼如下。

ActionContext.getContext().getSession().put("result", result);

Struts2的Action可以通過ActionContext來訪問Servlet API,有關ActionContext的詳細介紹見后續章節。

2.2.5 配置業務控制器

創建完AddAction類后,需要在struts.xml中對AddAction進行配置。如圖2-3所示,在類文件的根目錄(即src目錄)下創建一個struts.xml文件。

圖2-3 struts.xml位置

下述代碼用于實現任務描述2.D.1,在struts.xml中配置業務控制器。

【描述2.D.1】struts.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <!-- 指定Struts2處于開發階段,可以進行調試 -->
    <constant name="struts.devMode" value="true" />
    <!-- Struts2的Action都必須配置在package里 -->
    <package name="p2" extends="struts-default">
        <!-- 定義一個add的Action,實現類為com.haiersoft.ch02.action.AddAction -->
        <action name="add" class="com.haiersoft.ch02.action.AddAction">
            <!-- 配置execute()方法返回值所對應的頁面 -->
            <result name="cal">/add_result.jsp</result>
        </action>
    </package>
</struts>

上述代碼配置了一個名為add的Action,并指明對應的Action類。在<result>元素中指明返回值為“cal”時對應的跳轉頁面是add_result.jsp。

2.2.6 創建結果視圖

下述代碼用于實現任務描述2.D.1,在WebContent目錄中創建add_result.jsp頁面,顯示計算結果值。

【描述2.D.1】add_result.jsp

<%@ page contentType="text/html; charset=GBK" pageEncoding="GBK"%>
<html>
<head>
<title>計算器</title>
</head>
<body bgcolor="#ffffc0">
<h1>算術計算器</h1>
<table>
    <tbody>
        <tr>
            <td>第一個數</td>
            <td>${param.num1}</td>
        </tr>
        <tr>
            <td>第二個數</td>
            <td>${param.num2}</td>
        </tr>
        <tr>
            <td>結果</td>
            <td>${sessionScope.result}</td>
        </tr>
    </tbody>
</table>
<button onclick="history.go(-1);">返回</button>
</body>
</html>

上述代碼與任務描述1.D.1中的add_result.jsp一樣,用于顯示計算結果,只是結果值是從session中提取的,而非request中。

2.2.7 運行

到目前為止,基于Struts2的加法器已經完成,運行結果如圖2-4所示。

圖2-4 Struts2加法器的運行結果

基于Struts2的加法器在原理上與自定義框架的加法器是一樣的。相比自定義框架的加法器實現,基于Struts2的加法器在代碼上簡化了許多;而且當增加一個Action時,只需在Struts2的配置文件中進行簡單配置即可,無須使用大量代碼進行控制實現。另外Struts2框架還提供了許多功能,例如,異常處理、Struts2標簽庫等,這些功能使Struts2開發更加輕松和完善。

注意 Struts2 除了支持JSP作為視圖資源之外,還可以使用其他視圖技術如FreeMarker、Velocity等。

主站蜘蛛池模板: 无为县| 岳普湖县| 中西区| 科尔| 金门县| 中宁县| 云浮市| 铜陵市| 黎川县| 兰西县| 河西区| 东乌珠穆沁旗| 浦北县| 德昌县| 剑河县| 萍乡市| 连城县| 封丘县| 库车县| 汶川县| 上高县| 泸水县| 永清县| 登封市| 荔浦县| 遵义市| 米泉市| 巴中市| 云南省| 余庆县| 宜阳县| 轮台县| 新疆| 通许县| 江城| 福海县| 绍兴县| 当涂县| 甘谷县| 万源市| 富裕县|