struts2框架是SSH框架集中的框架之一,是一個基於MVC設計模式的Web應用框架,它本質上至關於一個servlet,在MVC設計模式中,Struts2做爲控制器層(Controller)來創建模型與視圖的數據交互。java
在使用struts2框架的過程當中,須要兩個配置文件,分別爲web.xml和struts.xml,服務器一啓動就加載web.xml的配置,web.xml啓動時,在StrutsPrepareAndExecuteFilter的init()方法中將會讀取類路徑下默認的配置文件struts.xml完成初始化操做;struts2讀取到struts.xml後,以javabean形式存放在內存中,之後struts2對用戶的每次請求處理將使用內存中的數據,而不是每次都讀取struts.xml文件。web
1、訪問流程:apache
(1)客戶端提交請求設計模式
(2)請求被提交到一系列過濾器(先ActionContentCleanUp,而後其餘過濾器,最後FilterDispatcher)服務器
(3)FilterDispatcher諮詢ActionMapper是否須要調用某個Action來處理這個請求,若是ActionMapper決定調用某個Action,FilterDispatcher則把請求的處理交給ActionProxy。app
(4)ActionProxy經過Configuration Manager(struts.xml)詢問框架的配置文件,找到須要調用的Action類。框架
(5)ActionProxy建立一個ActionInvocation實例,同時ActionInvocation經過代理模式調用Action,但在調用以前,ActionInvocation會根據配置加載Action相關的全部Interceptor(攔截器)spa
(6)一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果result設計
2、struts.xml的文件組成3d
1、XML 頭部聲明爲<?xml version="1.0" encoding="UTF-8"?>
2、DTD約束文件<!DOCTYPE struts PUBLIC
"-//Apache Software undation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
DTD文件是一種保證xml文檔格式正確的有效方法,經過比較xml文檔和DTD文件來看文檔是否符合規範,元素和標籤使用是否正確。
3、struts 根標籤
4、devMode 開發模式 <constant name="struts.devMode" value="true" />當value的值爲false的時候,就不是開發模式,修改struts.xml文件以後運行項目須要重啓服務器;當value的值爲true時,爲開發模式,修改struts.xml文件以後運行項目不須要重啓服務器就能運行,而且可進行調試信息輸出。
5、package 包配置
struts2框架使用包來管理Action和攔截器等。每一個包就是多個Action、多個攔截器、多個攔截器引用的集合。每一個package元素定義了一個包配置。經常使用屬性有:
name:必填屬性,指定包名;extends可選屬性,指定該包繼承其餘包;namespace:可選屬性,用來制定該包的命名空間。考慮到同一個Web應用中須要同名的Action,struts2以命名空間的方式來管理Action,同一個命名空間不能有同名的Action。
通常來講,package的使用按照項目的功能模塊來劃分,從而使得項目更有邏輯性。
6、實現action類:struts2中Action是核心內容。struts2中一般直接使用Action來封裝HTTP請求參數,所以,Action類裏應該包含與請求參數對應的屬性,並提供setter,getter方法。action有如下屬性:
name:action的名稱;class:對應的類的路徑;method:調用action中的方法名
action中:——>result 結果,有一下屬性:
name:返回值,返回值能夠是框架提供的常量(SUCCESS,FINAL,LOGIN,INPUT等),也能夠自定義
type:默認不寫爲請求轉發,type=redirect表示「重定向」
result之間的路徑表示要跳轉的路徑。
struts2的優勢:
1、結構更加清晰,地址和類之間的映射都配置在struts.xml中,struts2內部按照MVC設計模式設計,而且做爲web開發中MVC設計模式中的Controller層。
2、在操做Action時,能夠直接使用參數,不須要考慮request和response,struts2也提供了ServletActionContext對象,經過方法ServletActionContext.getRequest()得到當前請求的對象request(response對象)。
3、Action得到頁面bean.屬性拼裝的實體Bean;頁面直接得到Action中的屬性。