尚學堂Struts學習文檔

前言

假 如 你 的 人 生 有 理 想,那 麼 就 一 定 要 去 追,不 管 你 現 在 的 理 想 在 別 人 看 來是 多 麼 的 可 笑 , 你 也 不 用 在 乎 , 人 生 蹉 跎 幾 十 年 , 如 果 年 輕 的 時 候 計 較 得 失 前 怕 狼 就 後 怕 虎 而 不 去 追 逐, 等 到 了 40, 50 歲 的 時 候 , 你 唯 一 能 做 的 就 是 感 嘆 歲 月 的 消 逝 和 無 情…

實驗軟件下載

1. 下載struts2.1.6 http://struts.apache.org/download.cgi#struts217
(選擇下載full distribution)

2. 下載myeclipse,http://www.myeclipseide.com

3. 下載tomcat,http://tomcat.apache.org

4. 下載xwork,http://www.opensymphony.com/xwork (要注意的是下載與struts2.1.6的對應版本,即2.1.2)

安裝與設置

1. 解壓struts2.1.6,假設解壓後位於d:\struts2目錄

2. 安裝MyEclipse,任何版本都可以

3. 假設你已經安裝好jdk和tomcat了,如d:\tomcat

HelloWorld

1. 建立項目

a) 打開eclipse

b) 新建項目

c) 選擇myeclipse-java enterprise projects-web project

d) 項目名稱:struts2_0100_introduction

e) 選擇java ee 5.0

2. 設定server

a) window – preferences – myeclipse – servers – tomcat – 6.x

b) 選擇tomcat home directory

c) 選擇enable

d) finish

3. 設定jdk環境

a) window – preferences – java – installed jres

b) 如果沒有對應的JDK(不是JRE),選擇add

c) 選擇standard VM -> next

d) 選擇JDK對應的Directory

e) 將剛剛設定的JDK設爲默認

4. 建立第一個struts2.1的程序

a) 找到struts目錄下對應的apps目錄

b) 解壓struts2-blank-2.1.6.war

c) Copy對應的lib的jar文件,需要除junit和spring-test之外的所有文件,其中commons-io的jar包會在文件上傳和下載時需要,其他爲必須

d) Copy對應的struts.xml到src目錄,在package explorer視圖進行操作

e) 註釋掉struts.xml的多餘內容

f) 建立HelloStruts2_1.jsp文件

g) *修改jsp文件的默認編碼屬性window-preferences-web-jspfiles-設爲Chinese,National Standard

h) 在struts.xml中照原配置進行對應的配置

i) 修改對應的web.xml,建立struts2的filter(參考struts自帶的項目)

5. 運行項目

a) 可以首先部署到tomcat上項目

b) 也可以項目右鍵debug as – myeclipse server app,選擇剛剛建立好的server

6. 其他

a) 學習建立struts的dev-mode,好處在於我們修改了配置文件的時候能夠自動熱替換

b) 建立jar文件對應的源碼D:/share/tools/struts-2.1.6/src/core/src/main/java,以及xwork對應的源碼,以及對應的javadoc location,(更好的方式是建立自己的user-library)

c) 瀏覽struts的目錄

d) 認識eclipse jee的項目部署目錄,認識如何修改webapp的context-root,項目copy改名後可能會出現的問題

e) package explorer – 建立jar的源文件和目標關聯,navigator – 觀察所有的內容

f) 認識Action的後綴名,在struts2默認中,帶不帶action都可以

常見問題:

1. struts.xml不自動提示

a) window – preferences – 搜索 catalog – add

b) 選擇key type爲URI

c) key: http://struts.apache.org/dtds/struts-2.0.dtd

d) location: 對應的dtd文件,位於struts-core包中,解壓開,指定相應位置,如:D:\share\0750_Struts2.1.6\soft\struts-2.1.6\lib\struts2-core-2.1.6\struts-2.0.dtd

2. 導入示例項目

a) 注意JDK的版本,應該是JDK6,否則會出class version的問題

b) 如果總是項目出問題,可以重建項目,單獨拷文件

c) 還有一種情況是項目右鍵,properties – java – compiler 選擇6.0

d) 另外,在tomcat配置中也要使用jdk6

3. devMode設爲true就會出問題空指針問題

a) tomcat路徑帶了空格

4. 在使用ActionContext.getContext().get(“request”)取不到對象,爲null值

a) web.xml不要使用2.0的filter,用新的

5. 在action的試驗中,遇到一個奇怪的bug

a) 用default-action-ref指定一個action

b) 用*_*映射

c) 在地址欄中訪問一個不存在的action,如adfsdfsfs

d) 結果居然會映射到*_*上

e) 如果換成*__*就沒問題了

f) 靠,只能認爲是bug

g) 下次用*-*,不用*_*

學習方法說明

1. 先閱讀老師的代碼

2. 再建立自己的項目進行動手學習

Action

1. 實現一個Action的最常用方式:從ActionSupport繼承

2. DMI動態方法調用 !

3. 通配符配置 * {1} {2} …

a) *_*

4. 接收參數的方法(一般用屬性或者DomainModel來接收)

5. 簡單參數驗證addFieldError

a) 一般不使用Struts2的UI標籤

6. 訪問Web元素

a) Map類型

i. IoC

ii. 依賴Struts2

b) 原始類型

i. IoC

ii. 依賴Struts2

7. 包含文件配置

8. 默認action處理

Result

1. 常用四種類型:

a) dispatcher(默認)

b) redirect

c) chain

d) redirectAction

2. 全局結果集

a) global-results | extends

3. 動態結果(瞭解)

a) 在action中保存一個屬性,存儲具體的結果location

4. 傳遞參數

a) 客戶端跳轉才需要傳遞

b) ${}表達式(不是EL)

OGNL

1. Object Graph Navigation Language

2. 想初始化domain model,可以自己new,也可以傳參數值,但這時候需要保持參數爲空的構造方法

3. 其他參考ognl.jsp

4. 什麼時候在stack中會有兩個Actionchain

Struts-Tags

1. 通用標籤:

a) property

b) set

i. 默認爲action scope,會將值放入request和ActionContext中

ii. page、request、session、application

c) bean

d) include(對中文文件支持有問題,不建議使用,如需包含,改用jsp包含)

e) param

f) debug

2. 控制標籤

a) if elseif else

b) iterator

i. collections map enumeration iterator array

c) subset

3. UI標籤

a) theme

i. simple xhtml(默認) css_xhtml ajax

4. AJAX標籤

a) 補充

5. $ # %的區別

a) $用於i18n和struts配置文件

b) #取得ActionContext的值

c) %將原本的文本屬性解析爲ognl,對於本來就是ognl的屬性不起作用

i. 參考<s:property 和 <s:include

定義自己的theme

1. css(覆蓋struts2原來的css)

2. 覆蓋單個文件

3. 定義自己的theme

4. 實戰:

a) 把所有主題定義爲simple

b) fielderror特殊處理

c) 自己控制其他標籤的展現

作業

1. 讀doc文檔:struts-tags

2. 設計約定(編碼規定)

a) 原則:簡單就是美

b) 庫名:項目名

c) 表的命名:_Model名

d) 字段:保持和屬性名一致(儘量不要起名和數據庫命名衝突)

e) 用層來劃分包com.bjsxt.bbs.action model(bean) service dto(vo)

f) Action XXXXAction

g) *-*

h) /

i) /admin

j) package “action” adminAction

項目開發順序-以BBS2009的名義

1. 建立界面原型

2. 建立Struts.xml

a) 確定namespace

b) 確定package

c) 確定Action的名稱,空的方法

d) 確定Result

e) 將界面原型頁面進行修改,匹配現有設置

f) 測試

g) 做好規劃!!!!!

3. 建立數據庫(或者實體類)

4. 建立Model層

5. 建立Service層(後面講了Hibernate後再完善)

a) 此時可以使用JUnit進行單元測試了

6. 着手開發

聲明式異常處理

1. 在Actoin中進行異常映射

2. 在package中進行全局異常映射

3. 使用繼承共用異常映射

4. Struts2中異常處理由攔截器實現(觀察struts-default.xml)

a) 實際上Struts2的大多數功能都由攔截器實現

I18N

1. I18N原理

a) ResourceBundle和Locale的概念

b) 資源文件

c) native2ascii

2. Struts的資源文件

a) Action – Package – App級

b) 一般只用APP

i. struts.xml custom.i18n

c) PropertiesEditor插件

i. 解壓

ii. features plugin 覆蓋到myeclipse中的eclipse目錄裏

d) 動態語言切換

i. request_locale=en_US

Struts攔截器以及源碼解析

1. Struts架構圖

a) 見文檔

2. Struts執行過程分析

3. Interceptor攔截器過程模擬

4. 定義自己的攔截器

a) acegi – spring security

5. 使用token攔截器控制重複提交(很少用)

6. 類型轉換

a) 默認轉換

i. 日期處理

b) 寫自己的轉換器:

public class MyPointConverter extends DefaultTypeConverter{

@Override

public Object convertValue(Object value, Class toType) {

if(toType == Point.class) {

Point p = new Point();

String[] strs = (String[])value;

String[] xy = strs[0].split(",");

p.x = Integer.parseInt(xy[0]);

p.y = Integer.parseInt(xy[1]);

return p;

}

if(toType == String.class) {

return value.toString();

}

return super.convertValue(value, toType);

}

}

public class MyPointConverter extends StrutsTypeConverter{

@Override

public Object convertFromString(Map context, String[] values, Class toClass) {

Point p = new Point();

String[] strs = (String[])values;

String[] xy = strs[0].split(",");

p.x = Integer.parseInt(xy[0]);

p.y = Integer.parseInt(xy[1]);

return p;

}

@Override

public String convertToString(Map context, Object o) {

// TODO Auto-generated method stub

return o.toString();

}

}

c) 三種註冊方式:

i. 局部:XXXAction-conversion.properties

1. p(屬性名稱) = converter

ii. 全局:xwork-conversion.properties

1. com.xxx.XXX(類名)= converter

iii. Annotation

d) 如果遇到非常麻煩的映射轉換

i. request.setAttribute();

ii. session

補充視頻中講解的內容

1. Lambda表達式

2. 驗證框架

3. UI標籤

4. 類型轉換中的異常處理

5. 上傳與下載文件

6. Struts2註解

Struts2總結

1. Action

a) namespace(掌握)

b) path(掌握)

c) DMI(掌握)

d) wildcard(掌握)

e) 接收參數(掌握前兩種)

f) 訪問request等(掌握Map IOC方式)

g) 簡單數據驗證(掌握addFieldError和<s:fieldError)

2. Result

a) 結果類型(掌握四種,重點兩種)

b) 全局結果(掌握)

c) 動態結果(瞭解)

3. OGNL表達式(精通)

a) # % $

4. Struts標籤

a) 掌握常用的

5. 聲明式異常處理(瞭解)

6. I18N(瞭解)

7. CRUD的過程(最重要是設計與規劃)(精通)

8. Interceptor的原理(掌握)

9. 類型轉換(掌握默認,瞭解自定義)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章