- Java EE輕量級解決方案:S2SH
- 邵峰晶編著
- 1513字
- 2018-12-30 08:33:21
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等。
- Web前端開發技術:HTML、CSS、JavaScript(第3版)
- TensorFlow Lite移動端深度學習
- Python程序設計(第3版)
- Django Design Patterns and Best Practices
- Linux環境編程:從應用到內核
- Go并發編程實戰
- Java Web從入門到精通(第3版)
- Java編程從入門到精通
- MongoDB Administrator’s Guide
- FusionCharts Beginner’s Guide:The Official Guide for FusionCharts Suite
- 信息學競賽寶典:基礎算法
- Mastering Linux Kernel Development
- 軟件測試實驗實訓指南
- 小學生Python創意編程(視頻教學版)
- Scratch趣味編程:邏輯思維培養與訓練