最近在編寫Struts教程的時候,把Struts1.1到1.2的個版本變化總結了一下,希望能夠從整體上把握它的變遷脈絡,在開發和維護的時候也可以參考參考。
Struts1.1的修改
新特征
引入新的配置DTD
Struts 1.0 的配置DTD 已經不贊成使用,引入了新的struts-config_1_1.dtd。在Struts 1.1 中,已有的Struts 配置文件可以使用這兩個版本的DTD載入。
新的Commons 包依賴性
在Struts中使用了多個Apache Jarkarta commons的組件,而Commons組件并不僅僅可以用來構建Struts應用。在Struts1.1中,所使用的Commons組件已經重構來外部依賴于Jarkarta Commons項目,而不是1.0中的內部版本。
下面的Commons包包括了對相應的Struts 1.0 中的類的替代:
-
BeanUtils [org.apache.commons.beanutils]:
- org.apache.struts.utils.BeanUtils
- org.apache.struts.utils.ConvertUtils
- org.apache.struts.utils.PropertyUtils.
-
Collections [org.apache.commons.collections]
- org.apache.struts.util.ArrayStack
- org.apache.struts.util.FastArrayList
- org.apache.struts.util.FastHashMap
- org.apache.struts.util.FastTreeMap.
-
Digester [org.apache.commons.digester]
- org.apache.struts.digester.*.
下面這幾個包現在仍然被Struts框架的各種組件使用:
-
FileUpload [org.apache.commons.fileupload]
-
Logging [org.apache.commons.logging]
-
Validator [org.apache.commons.validator]
XML解析器
另外,Struts 1.1 需要符合JAXP/1.1 (而不是JAXP/1.0) API的XML解析器,比如JAXP/1.1 參考實現和Xerces 1.3.1+。
源代碼
如果需要從源代碼開始構建Struts,請使用Ant 1.4 以上版本。
集成Struts Validator
一個新的Commons Validator組件被集成到Struts 1.1中,包含在新的Validator包中。
Tiles
引入了一個新的JSP模板組裝機制Tiles,通過標簽庫提供集成。
Nested
Nested taglib 綁定到了Struts1.1中,增強了現有Struts標簽的功能。
新的示例應用
Struts1.1發布包中包括了針對Validator 和Tiles的新的示例。
新的可選組件
CVS源代碼庫中新增了一個目錄contrib,包含了很有用的,但是沒有集成到標準代碼基中的擴展。
- Scaffold – 一個對Commons Scaffold 工具包擴展,旨在提供可重用的構建Web應用的類
- Struts-EL – 可選的Struts-EL taglib 使得在Struts 中使用JSTL更加容易。(需要Servlet 2.3 +容器支持)
Action 包的增加
基本的控制器框架 [org.apache.struts.action]新增了一下特征:
- ActionServlet 現在提供了對模塊化應用的支持,并且新增了多個擴展點。
- 新增了一個ActionMessages 類,支持ActionErrors功能的一個超集,可以用于通用的消息收集傳遞,不僅僅針對errors。
Upload 包
文件上傳類[org.apache.struts.upload]新增了一下特征:
- CommonsMultipartRequestHandler:這個新類使用Jakarta Commons FileUpload 包實現了文件上傳。這也是Struts的默認文件上傳實現。
Util 包
工具(utility)類 [org.apache.struts.util]新增了以下特征:
- LocalStrings: 修正了與可替換參數相關的消息,以便它不會添加一個外來的無關的字符。
- LabelValueBean: 一個新類,定義了一個名值對的集合,可以用在<html:options> 和<html:optionsCollection>標簽,或者其它地方。
- MessageResources: 轉移包含在特定消息字符串中的單引號。
- computeParameters: 允許事務令牌是唯一的參數。
- RequestUtils: 在構建一個查詢字符串時,修改來編碼一個&號。
Bean Taglib
struts-bean 標簽庫[org.apache.struts.taglib.bean]中新增了以下特征:
- <bean:write>:加入了format, locale 和 bundle 屬性以支持根據用戶當前場所進行格式化的功能,格式化來自屬性或者來自字符串資源的字符串。
- <bean:cookie>, <bean:header>, 或<bean:parameter>:糾正了在標簽使用"multiple"屬性時,所產生的腳本變量類型。
- <bean:message>:加入了name, property, 和scope 屬性,以便消息資源key 可以動態地從一個bean 或者bean 屬性獲得。
HTML Taglib
struts-html [org.apache.struts.taglib.html]加入了如下新特征:
- <html:link>: 添加了'action' 屬性
- <html:options>: 如果'property' 屬性制定的屬性(property)返回null,現在標簽將拋出一個錯誤消息指名實際問題而不是造成NPE。
- <html:option> 和 <html:options>:添加了'style' 和'styleClass' 屬性。
- <html:optionsCollection>:新標簽。提供了一個更清晰的方式來從集合組裝HTML options。
- <bean:message>:添加了'name', 'property' 和'scope' 屬性,以便消息資源key 可以動態地從bean獲得。
- <html:messages>:新標簽??梢酝ㄟ^新的ActionMessages 類中的一個消息集合進行迭代。
- ActionForm:現在,此標簽在它初始化ActionForm Bean的時候會調用reset() 方法。它也要求被標簽所實例化的bean 是ActionForm 的一個子類。
- <html:image>:添加了'align' attribute。
- <html:img>:添加了mouse 事件屬性('onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmousemove', 'onmouseout')。
- SubmitTag, SelectTag, LinkTag.java, CheckboxTag, ButtonTag, ImageTag, RadioTag, 和TextArea 標簽: 添加了indexed 屬性。
Logic Taglib
struts-logic 標簽庫[org.apache.struts.taglib.logic]加入了如下新特征:
- <logic:empty> 和<logic:notEmpty>:新標簽。類似于<logic:present> 和<logic:notPresent>,但對空字符串的處理不同。
Template Taglib
無變化,但無贊成使用。推薦使用Tiles.
運性層面的改變
加入了Config Package
- ControllerConfig:添加了inputForward 屬性以指示ActionMapping.input是一個forward 而不是URI。
- ControllerConfig:添加了forwardPattern 和inputPattern 到help 應用面模塊的管理頁面目錄
- 添加了一個新的包以提供更多的靈活性來支持控制器配置和多模塊應用的支持。
Action 包
基本框架(org.apache.struts.action)進行了如下修改或者修正:
- Action 類中的所有常數:不贊成使用。提取到新的Globals類中。
- ActionMapping:如果模塊的ControllerConfig bean [org.apache.struts.config.ControllerConfig]的inputForward 設置為true,input 屬性將引用一個ActionForward 而不是模塊相對的路徑。
- ActionServlet:添加了convertNull 參數以在組裝Form時仿真Struts 1.0 行為。如果設置為true,數值numeric Java wrapper 類類型 (如java.lang.Integer) 將默認為null (而不是0)。
- ActionServlet:添加了"config/$foo" 參數,不贊成使用包中的其他參數。
- ActionForms 和相關類:為了保存資源,現在在響應toString請求的時候使用一個StringBuffer。
- LookupDispatchAction:添加的新的標準Action,以幫助在國際化的按鈕之間進行選擇。
- ActionForm 類:修改來使用ActionServletWrapper 而不是暴露ActionServlet。
- ActionServletWrapper 類:添加的新類,用于ActionForm,以防止ActionServlet 的公開字符串屬性被通過查詢字符串改寫。
- Action.MAPPING_KEY的 request 屬性: 如果沒有指定form bean,無條件地將選擇的mapping 傳遞為請求屬性("org.apache.struts.action.mapping.instance")。
- ActionServlet:避免了在初始化Servlet失敗的時候導致的NullPointerException。
- ActionForm 類:現在是真正的serializable,因為兩個非serializable 的實例變量(servlet 和multipartRequestHandler) 已經成為transient。但是,如果你的確需要序列化和解序列化這個實例,你要自己負責重設這兩個屬性。
- ActionMessages 和ActionErrors:The initial order a property/key is added in is now retained.
- processActionForward(): 不贊成,推薦使用processForwardConfig
Upload包
文件上傳 (package org.apache.struts.upload) [ Upload 應用的一部分]作了如下修改和修正:
- CommonsMultipartRequestHandler:基于Jakarta Commons FileUpload 包的文件上傳的新實現。這個新實現如今是默認實現。
- BufferedMultipartInputStream:解決了丟失字節的問題。
- ArrayIndexOutOfBoundsException:解決了已知的錯誤。
- Multipart requests:Better reporting for premature closing of input streams while reading multipart requests.
- 新行字符(New line characters):解決了上傳和新換行字符時導致的文件損壞問題。
Utility包
utilities (package org.apache.struts.util)發生如下修改和修正:
- RequestUtils:添加了對ControllerConfig 的forwardPattern, pagePattern, 和inputForward 屬性的支持。
- GenericDataSource:不贊成。修改為作為[org.apache.commons.dbpc.BasicDataSource]的一個薄的Wrapper。建議直接使用BasicDataSource 或其它兼容組件。
- RequestUtils 類:修改為使用ActionServletWrapper而不是暴露 ActionServlet。
- 為getActionErrors 和 getActionMessages 方法添加了錯誤消息。
- getActionErrors 和 getActionMessages:添加了根據基于傳入的消息關鍵字從Request范圍獲取的對象來產生正確的相應對象的方法。
- ActionErrors 或 ActionMessages:創建一個這種對象的邏輯被移到了RequestUtils中的一個工具方法。.
- JspException 消息:現在在RequestUtils中生成。
- ConvertUtils.convertCharacter():現在將檢測空字符串并返回默認值。
Bean Taglib包
struts-bean c標簽庫 [org.apache.struts.taglib.bean]發生了如下修改和修正:
- <html:errors>:當指定了屬性標簽時,如果指定的屬性沒有發生錯誤,則不會輸出錯誤。而前面的錯誤將總是會被輸出。未來的增強版本將包括額外的屬性來關閉header 或 footer。
- 將helper 方法從"private"改為 "protected" 。
HTML Taglib 包
struts-html 標簽庫(package org.apache.struts.taglib.html)發生了如下修改和修正:
- FormTag:修正為,當指定了action mapping的名稱時,要排除查詢字符串。
- ImgTag:如果只有一個參數,能正確地URLEncode 查詢字符串參數。
- MultiboxTag.doAfterBody()::修正為返回SKIP_BODY 而不是SKIP_PAGE。
- Errortag:不贊成使用defaultLocale方法。
Documentation 示例應用
Struts Documentation 應用(對應Struts 網站的內容)發生了如下修改:
- 重新組織了資源到單獨的頁面中。
- 在Tag Developers Guide中,添加了更詳細的文件上傳要求。
- 在Building View Components,澄清了額外的i18n 支持可以由瀏覽器提供,并且超出了框架的范圍。
- 在Building Controller Components一節,文檔 'validating' init-param,添加了各種參數的默認值,澄清了某些web.xml 設置不是Struts特定的。
- Tag library 文檔:移到User's Guide下。
MailReader 示例應用
Struts MailReader Example Application 發生如下修改和修正:
- 添加了應用資源的 Russian 和Japanese 翻譯,并且設置JSP的字符集為"UTF-8"以便其可以顯示English 或Japanese。
- 在Struts配置文件中交換了Edit mappings的"attribute" 屬性的"name" 。
- 刪除了對"tour"文檔中的保存的數據庫數據的引用,因為這個功能已經被刪除。
Exercise Taglib 示例應用
Struts Exercise Taglib Example Application 發生了如下修改和修正:
- 添加了針對使用了"action"屬性的<html:link> 的test case 。
- 添加了針對基于保存在page上下文中的集合使用<html:options> 和 <html:optionsCollection>的<html:select> 的test case。
不同之處
這里列出1.0到1.1中新增的類和已經不贊成使用的類:
1.0中不贊成使用,1.1中已經刪除的類。
- 刪除:org.apache.struts.utils.BeanUtils, org.apache.struts.utils.ConvertUtils, and org.apache.struts.utils.PropertyUtils – 替換為org.apache.commons.beanutils
- 刪除:org.apache.struts.util.ArrayStack, org.apache.struts.util.FastArrayList, org.apache.struts.util.FastHashMap, org.apache.struts.util.FastTreeMap – 替換為org.apache.commons.collections
- 刪除: org.apache.struts.digester.* - 替換為org.apache.commons.digester
- 刪除:struts-config.dtd – 替換為struts-config_1_1.dtd.
- 刪除:omnibus "struts" taglib 和其相應的TLD – 替換為bean, logic, 和html taglib。
- 刪除:"form" taglib 和其相應的TLD – 替換為html taglib.
Struts 1.1新增的包
- config
- taglib.nested
- taglib.nested.bean
- taglib.nested.html
- taglib.nested.logic
- validator
Struts 1.1新增的類
action
- ActionMessage
- ActionMessages
- DynaActionForm
- DynaActionFormClass
- ExceptionHandler
- RequestProcessor
actions
- LookupDispatchAction
taglib.html
- FrameTag
- JavascriptValidatorTag
- MessagesTag
- OptionsCollectionTag
taglib.logic
- EmptTag
- MessagesNotPresentTag
- MessagesPresentTag
- NotEmptyTag
upload
- CommonsMultipartRequestHandler
util
- LabelValueBean
Struts 1.1中新增的類成員
action.Action
- ACTION_SERVLET_KEY
- APPLICATION_KEY
- MESSAGE_KEY
- PLUG_INS_KEY
- REQUEST_PROCESSOR_KEY
- execute
- getResources(javax.servlet.http.HttpServletRequest)
- saveMessages
action.ActionServlet
- configDigester
- convertHack
- log
- processor
- getInternal
- destroyApplications
- destroyConfigDigester
- getApplicationConfig
- getRequestProcessor
- initApplicationConfig
- initApplicationDataSources
- initApplicationPlugIns
- initApplicationMessageResources
- initConfigDigester
- methods created for backward-compatiblity only
- defaultControllerConfig
- defaultFormBeansConfig
- defaultForwardsConfig
- defaultMappingsConfig
- defaultMessageResourcesConfig
taglib.html.BaseHandlerTag
- indexed
- setIndexed
- getIndexed
Struts 1.0 到Struts 1.1不贊成的類
action
- ActionException
- ActionFormBeans
- ActionForwards
- ActionMappings
Struts 1.0 不贊成的類成員
action.Action
- FORM_BEANS_KEY
- FORWARDS_KEY
- MAPPINGS_KEY
- getResources()
- perform
ActionServlet
- findDataSource
- findFormBean
- findForward
- findMapping
- initDataSources
- methods created for backward-compatiblity only
- defaultControllerConfig
- defaultFormBeansConfig
- defaultForwardsConfig
- defaultMappingsConfig
- defaultMessageResourcesConfig
posted on 2006-05-15 17:04
badboy 閱讀(232)
評論(0) 編輯 收藏 所屬分類:
Framework