1.strust2框架來歷簡介
WebWork是由OpenSymbony組織開發(fā)的,是致力于組件化和代碼重用的J2EE Web框架。(同時也是一個成熟的基于Web的MVC框架)。
MVC:Model是模型 View是視圖 Control是控制器,這是一種框架模式。
值得一提的是:web項目的三層架構(gòu)(和MVC是兩個完全不同的架構(gòu))
1.表示層:struts2框架就是工作在這個地方,是一款于視圖層的MVC三層架構(gòu)的框架。其實我們在移動開發(fā)中,例如Android開發(fā)中,也是在表示層工作,我們同樣可以采用MVC三層架構(gòu)來編程開發(fā)。
2.業(yè)務(wù)邏輯層:service層,處理業(yè)務(wù)邏輯,比如判斷用戶名是否存在,密碼是否正確,權(quán)限是否擁有,賬號是否被凍結(jié),賬號是否異常,用戶積分是否達到操作要求等等,多為一些執(zhí)行某一個操作條件的判斷。
3.數(shù)據(jù)訪問層:也就是常說的dao層,專門用于處理與數(shù)據(jù)庫交互的的一層,如常用的增刪改查等等。jdbc/hibernate技術(shù)就是在這一層使用。
在項目中,這些不同分層的表現(xiàn)形式,其實就是在我們自己建的不同的package中寫上各自分層中所使用的Java類。比如在項目中我們建了三個package,三個package中的java類的作用分別為表示層的代碼,業(yè)務(wù)邏輯層的代碼,數(shù)據(jù)訪問層代碼。
總結(jié):隨著WebWork框架的發(fā)展,衍生出了struts2框架,因此struts2框架是WebWork的升級而不是一個全新的框架,因此穩(wěn)定性,性能等方面都有很好的保證,而且也同時吸收了struts1框架和WebWork兩者的優(yōu)點。所以struts2框架也是一個基于Web的MVC框架。
但是值得注意的是:struts2框架并不是struts1框架的延續(xù)或者升級,兩者的設(shè)計理念完全不同。與其說是從struts1繼承而來,不如說是集struts1和xwork優(yōu)點于一身的一款非常優(yōu)秀的框架。
2.struts2框架引入到web項目中
2.1把struts2相關(guān)的jar包引入到項目中
我們可以在Apache官網(wǎng)下載all包,里面不僅有struts2必須有的jar包,還有示例提供給開發(fā)人員學習。我們將解壓后的all包打開app文件夾,用好壓打開(無需解壓)struts2-blank.war文件,進入WEB-INF/lib,復制該文件下所有jar包到web項目中即可。 
 
 
把其中的jar包直接復制到項目下webcontent中的WEB-INF下的lib中 

2.2配置struts.xml
把struts2的配置文件直接放到src下,名字必須叫做struts.xml(因為運行時配置文件會被框架自動讀取,到了后面用了注解技術(shù)可以大大減少xml文件的編寫工作量)。需要注意到的是:如果struts.xml文件不能自動提升出標簽內(nèi)容,需要把相應的dtd文件配置上去。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts./dtds/struts-2.3.dtd">
<struts>
    <constant name="struts.enable.DynamicMethodInvocation" value="false" />
    <constant name="struts.devMode" value="true" />
    <package name ="default" namespace="/" extends="struts-default">
         <action name="first*" 
            class="com.verney.struts2.action.FirstAction"method="{1}">
            <result name="success">/WEB-INF/jsp/first.jsp</result>
        </action>
    </package>
</struts>    
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
constant配置的是一些常量標簽,這樣的常量標簽在默認配置default.properties文件中,可以自行設(shè)置。”struts.enable.DynamicMethodInvocation”表示的是是否允許動態(tài)方法調(diào)用,這里false表示的是禁止;”struts.devMode” value=”true”表示的是開發(fā)者模式。
一個struts.xml文件中可以配置多個package標簽,一個package標簽里面可以配置多個action標簽,一個action標簽里面可以配置多個result。
這里需要注意的是命名空間namespace的問題,namespace屬于package的一個標簽,唯一標識當前這個package。用來對請求action的路徑進行管理。所謂的package包表示的是對請求action路徑的配置。這里“/”表示的是上一級。extends=”struts-default”表示當前這個package繼承了另外一個名字叫做struts-default的package,這個package在struts2的核心jar包中的struts-default.xml文件中定義的,里面定義了很多默認的配置
first*就是將來在瀏覽器中輸入的這個action名字,如果輸入的是first1,則*就表示1,如果輸入的時firstlogin,則表示的就是login。但是如果原本需要配置的多個action沒有非常明顯的規(guī)律,那么久不要用這種方式來配置了。
action標簽用來配置action的名稱和class的來源路徑,每當對該名稱進行請求的時候會先來struts.xml中來進行查找,找到后再到相應的class路徑下的對其方法進行加載,method=”{1}”表示匹配第一個first,傳過來的是方法的名字即可。每一個action被訪問完之后都會有一個字符串類型的返回值,返回值與result的name對應,決定了跳轉(zhuǎn)的路徑。當然兩個不同名字的action可以對應的是同一個java類,此時method標簽的作用就體現(xiàn)出來了:
<action name="test1" class="類A" method="login">
<action name="test2" class="類A" method="register">
- 1
- 2
這樣使用test1和test2兩個不同名字的action就是訪問到同一個類中的兩個方法:login和register方法。但是login方法和register方法必須和execute方法類似的,都是返回的是String類型的字符串。
result標簽表示的是跳轉(zhuǎn)的路徑,如果action類中excute返回的是”success”(這個參數(shù)單詞必須拼對,這些參數(shù)已經(jīng)在框架中的default.properties已經(jīng)定義好),則跳轉(zhuǎn)到/WEB-INF/jsp/first.jsp頁面中去。
請求action路徑的格式是:命名空間+”/”+action的name+”.action”
這些struts.xml配置文件可以在從官網(wǎng)上下載的all包中的struts2-blank.war中可以找到,平時自己可以保存這些常用而又不容易記住的文件,到了需要用到的時候直接拿來用便可。
2.3在web.xml文件中配置struts2框架的過濾器
因為使用框架大多都要在web.xml文件中進行配置,所以我們在新建web項目的時候都要記得把web.xml文件建出來。配置過濾器的作用是:攔截struts2框架中的action.注意如果不配置這個filter,struts2框架就不能夠工作。
<filter>
    <filter-name>struts2</filter-name>
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>*.action</url-pattern>
</filter-mapping>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
2.4框架中action方法的編寫
struts框架中有一種java類叫做action,這種說法就像J2EE項目中有一種java類叫servlet,其實在struts2框架底層還是封裝了servlet的相關(guān)內(nèi)容實現(xiàn)出來的,只不過struts2框架除了servlet的功能以外還擴展了很多其他的功能,同是還大大簡化了以前在servlet中繁瑣的操作。之所以action比servlet功能還要強大的原因是我們在web.xml文件中配置了struts2框架中專門的過濾器,攔截住之后,struts2框架就可以給action添加很多豐富的功能了。
編寫的action類最好都放在一個action包中,其中action類的命名最好用Action結(jié)尾,規(guī)范編寫,便于管理。
框架中action方法的編寫:
- 1)方法繼承ActionSupport類 
- 2)重寫excute方法,類型必須是String類型,名稱必須是excute,必須是無參。 - public class FirstAction extends ActionSupport{ private static final long serialVersionUID = 1L; private String excute() { System.out.println("excute"); return SUCCESS; } }- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
 
同時還有5個String類型的靜態(tài)屬性:
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";
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
新建first.jsp,將項目部署到服務(wù)器上,開啟服務(wù)器,用瀏覽器訪問試試看。 

這樣struts2就算引入成功了。當然這里提到的只是struts2的一些皮毛而已,這個框架的強大之處還沒有體現(xiàn)出來,需要我們慢慢的去學習。其實我們仔細閱讀default.properties屬性文件便可以學到很多框架的知識。一個框架之所以被很多人認可,因為它做了很多開發(fā)過程中繁瑣而又不得不做的事情,高度封裝的前提下是設(shè)計思想的體現(xiàn),我們學習框架正是學習前人優(yōu)秀的設(shè)計思想,這樣就算拿到別的框架去使用的時候也會很容易上手了。

 
                         
                                
 
                                




 
                        