1. 程式人生 > >Action的三種實現方式,struts.xml配置的詳細解釋及其簡單執行過程(二)

Action的三種實現方式,struts.xml配置的詳細解釋及其簡單執行過程(二)

> 勿以惡小而為之,勿以善小而不為--------------------------劉備 > > 勸諸君,多行善事積福報,莫作惡 上一章簡單介紹了Struts2的'兩個蝴蝶飛,你好' (一),如果沒有看過,[請觀看上一章](https://www.cnblogs.com/yjltx/p/13071327.html) # 一 Action的三種實現方式 上一章開發的HelloAction和HelloAction2,並沒有繼承任何類或者實現任何介面,但是必須有一個execute() 方法,方法返回值是String型別。 這樣的程式碼不容易理解,更並不能使人看得出這個類是幹什麼的,甚至不能區分這個控制器類與普通的Java類有什麼區別,通常開發中不這樣做。 我們開發者在開發Struts2框架的時候,希望自己寫的這個Action類能夠具有易理解性,且已經支援某些功能,如引數接收,檔案上傳等。 ## 一.一 第一種實現方式(普通Java類,裡面只包含execute()方法) ~~~ package com.yjl.web.action; import org.apache.log4j.Logger; /** * @author 兩個蝴蝶飛 * @version 建立時間:2018年8月23日 上午9:41:32 * @description 第一種實現方式,普通java類, * 有一個execute()方法,也可以多寫幾個方法,用action中的標籤method來控制,可以正常訪問。 */ public class Hello1Action { private static Logger logger=Logger.getLogger(Hello1Action.class); public String execute() { logger.info("兩個蝴蝶飛,web層你好"); return "success"; } } ~~~ 不具有開發時要求的規範性,且不支援某些struts2自身提供的功能。 方法名稱只有一個 execute() ## 一.二 第二種實現方式(實現Action介面) ~~~ package com.yjl.web.action; import com.opensymphony.xwork2.Action; /** * @author 兩個蝴蝶飛 * @version 建立時間:2018年8月23日 上午10:54:03 * @description 第二種實現方式,實現Action介面,重寫裡面的execute()方法 * 有一個execute()方法和五個String型別的常量 */ public class Hello2Action implements Action{ @Override public String execute() throws Exception { return Action.SUCCESS; //return Action.ERROR; //return Action.LOGIN; //return Action.NONE; //return Action.INPUT; } } ~~~ 注意,Action介面是xwork2包下的介面。 實現了Action介面,使開發者能夠看出來這是一個Action,具有了一定程度上的開發規範, 但是實現了Action介面,所以必須要重寫execute()方法。 一般自己寫Action,構思好之後上來就直接add(), edit(), delete(). select() 這些業務方法, 每次都要重寫execute()方法,不太方便。 而且這種方式不具有struts2中某些功能,如驗證框架和國際化。 Action中介面中有五個常用的結果字串(好多方法都返回success,error,login,input,none,故將其封裝了一下) . 這些字串雖然是大寫,然而真實的值是全部小寫. ~~~ package com.opensymphony.xwork2; public abstract interface Action { public static final String SUCCESS = "success"; public static final String NONE = "none"; public static final String ERROR = "error"; public static final String INPUT = "input"; public static final String LOGIN = "login"; public abstract String execute() throws Exception; } ~~~ ## 一.三 繼承ActionSupport類(官方推薦) ~~~ package com.yjl.web.action; import com.opensymphony.xwork2.ActionSupport; /** * @author 兩個蝴蝶飛 * @version 建立時間:2018年8月23日 上午11:04:20 * @description 第三種方式,繼承ActionSupport類。 * ActionSupport類實現了Action介面,也有Action中的五個常量. */ public class Hello3Action extends ActionSupport{ public String list() { return "list"; } } ~~~ 繼承了ActionSupport類,不需要重新寫execute()方法,直接寫業務方法即可。 ActionSupport類,已經實現了 Action介面。 其具備Action中的五個常量,並且該類還實現了其他介面, 原始碼: ~~~ public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable{ ... public String execute() throws Exception { //預設返回的是 success 字串 return "success"; } ... } ~~~ 如驗證框架(Validateable,ValidationAware),國際化(LocaleProvider)。 以後開發中,使用 繼承 ActionSupport 類的形式。 # 二 配置檔案 struts.xml中節點的詳細解釋 在src下有一個struts.xml的配置檔案,它配置了開發者自己編寫實現的Action,是struts2框架的核心,不能改變檔名稱。(注意,是struts.xml,並不是struts2.xml,並沒有那個2)。 在struts.xml中,最上面是一個約束,是一個根節點。 ## 二.一 修改常量節點 在struts-core.jar核心包下,有一個包org.apache.struts2包下,有一個default.properties屬性檔案,裡面記錄了很多常用的常量, 其中常見的有: ~~~ struts.i18n.encoding=UTF-8 struts.multipart.maxSize=2097152 struts.action.extension=action,, struts.enable.DynamicMethodInvocation = false struts.devMode = false struts.ui.theme=xhtml struts.ognl.allowStaticMethodAccess=false ~~~ 建議修改後的值為: ~~~ ###國際化操作,編碼格式為UTF-8 struts.i18n.encoding=UTF-8 ###上傳檔案時最大的上傳大小,預設為2M. 根據專案情況具體填寫值,建議後面加兩個00 struts.multipart.maxSize=209715200 ###struts的訪問字尾名, struts1框架預設的是 .do struts.action.extension=action,, ###struts是否可以訪問靜態方法 struts.enable.DynamicMethodInvocation =true ###struts是否是開發者模式 struts.devMode =true ###struts中ui標籤的主題,建議為simple struts.ui.theme=simple ###ognl中是否可以訪問靜態方法,為true struts.ognl.allowStaticMethodAccess=true ~~~ 可以在struts.xml中進行相應的修改,如 ~~~ ~~~ 按照name,value值的形式進行填寫。 也可以在src下新建一個struts.properties,然後將這些值放置進去,struts也會自動struts.propeties中的常量值的。 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200609111329725.png) 也可以在web.xml中,在中,以區域性引數的形式傳遞進去。 ![在這裡插入圖片描述](https://img-blog.csdnimg.cn/20200609111413293.png) 建議使用第一種方式,在struts.xml中用,畢竟這個檔案常常開啟,出錯了也容易發現。 ## 二.二 分模