1. 程式人生 > >Struts2控制器以及struts.xml與web.xml的配置(1)

Struts2控制器以及struts.xml與web.xml的配置(1)

  • MVC設計模式

MVC設計模式的宗旨是把一個Web應用的輸入、處理和輸出流程按照Model、View、和Controller的方式進行分離,這樣一個應用就被分成3個層:模型層、檢視層、和控制層。

檢視(view):檢視代表使用者互動介面。MVC對於檢視的處理僅限於檢視中資料的採集與處理以及使用者的請求處理,而不包括對檢視中業務流程的處理。

模型(Model):表示業務資料與業務邏輯,它是Web應用的主體,檢視中的業務資料有模型提供。(在MVC設計模式的開發中關鍵的一點是讓一個模型為多個檢視提供業務資料,這樣可以提高程式碼的可重用性與可讀性,也給Web應用後期的維護代理方便)

控制器(Controkker):控制器是檢視與模型之間的紐帶。控制器將檢視接收的資料交給相應的模型去處理,將模型返回的資料交給相應的檢視去顯示。

  • Struts2

Struts2採用攔截器或者攔截棧將實現業務邏輯同Servlet API分離開。Struts2使用攔截器作為處理,以使用者的業務邏輯控制器為目標,建立一個控制器代理。Struts2框架的大致處理流程如下。

(1)客戶端瀏覽器傳送一個請求。

(2)核心控制器FilterDispatcher根據請求決定呼叫合適的Action

(3)WebWork的攔截器鏈自動對請求應用通用功能,如驗證等

(4)回撥Action的execute()方法,該方法根據請求的引數來執行一定的操作。

(5)execute()方法的處理結果資訊將被輸出到瀏覽器中,Struts2支援多種形式的檢視,例如HTML,JSP等。

  • Struts2 目錄以及主要的jar

將Stuts2解壓,可得以下幾個檔案

apps     存放Struts2的示例程式

lib         存放Struts2的核心類庫,以及第三方的外掛類庫

src       存放Struts2框架的全部原始碼

docs   存放Sruts2的相關文件

struts2-core-x.x.x.jar  Struts2的核心庫

xwork-x.x.x.jar  WbeWork的核心課,需要他的支援

ognl-x.x.x  OGNL表示式語言,Struts2支援該EL.

freeemarker-x.x.x.jar   表現層框架,定義了Struts2的視覺化組建的額主題

commons-loging-x.x.x.jar   日誌管理。


  • Struts 2配置檔案

Struts2的核心配置檔案為 struts.xml,該檔案用來配置Struts2應用中的Action。另外,Struts2應用中還有一個配置全域性屬性的struts.properties檔案。

1.struts.xml檔案配置

<!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
    <constant name="struts.i18n.encoding" value="gb2312"/>
    <package name="default" extends="struts-default">
        <action name="showWords" class="action.ShowWords">
            <result name="success">/showWords.jsp</result>
            <result name="input">/inputWords.jsp</result>
        </action>
        <action name="showAll" class="action.showAll">
        <!--type用來指定轉向的資源型別,預設為jsp。例如,如果需要轉向其他的Action
            則需要指明轉向的型別,設定type屬性值為redirect
          -->
        <result type="redirect">showPerson</result>
        </action>
        <action name="showPerson" class="action.ShowPerson">
            <result name="success">/showPerson.jsp</result>
        </action>
    </package>
</struts>

2.struts.properties配置檔案

struts.i18n.reload=true  #自動載入國際化資訊
struts.i18n.encoding=UTF-8
  • 在Form表單中 action的書寫

<s:form action="showPerson">
			<s:textfield name="person.name" label="姓名"/>
			<s:textfield name="person.sex" label="性別"/>
			<s:textfield name="person.age" label="年齡"/>
			<s:textfield name="person.address" label="住址"/>
			<s:submit value="提交"/>
		</s:form>

<form name="myForm" action="showWords.action" method="post">
			請輸入您的姓名:<input name="name" type="text"/><br/>
			<input type="submit" name="mySubmit" value="提交"/>
		</form>

  • Struts2控制器

Sturts2的控制器分為核心控制器FilterDispatcher其主要負責攔截所有的使用者請求。另一個就是業務控制器Action。

  • 核心控制器FilterDispatcher

它包含了struts2框架內部的控制流程和處理機制。FilterDispatcherz作為一個Filter執行,負責攔截所有使用者的請求。

1.Struts2框架結構。

按模組劃分可以分為Servlet Filters、Struts核心模組、攔截器和使用者實現模組。

2.Struts2處理過程。

(1)客戶端提交一個請求(HttpServletRequest)。例如 http://localhost:8080/Demo/login.action。

(2)請求被提交到一系列的過濾器(Filter),按處理的先後順序可以將過濾器分為ActionContextCleanUp、其他過濾器(SiteMesh等)、FilterDispatcher

(3)FilterDispatcher詢問ActionMapper是否需要呼叫某個Action來處理這個請求。如果ActionMapper決定需要呼叫某個Action.則FilterDispatcher把請求的處理交給ActionProxy。

(4)ActionProxy通過Configuration Manager(struts.xml)詢問框架的配置檔案,找到需要呼叫的Action類。

(5)ActionProxy建立一個ActionInvocation例項,同時ActionInvocation通過代理模式呼叫Action。(在呼叫之前,ActionInvocation會根據配置載入Action相關的所有攔截器)。

(6)一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。

  • 業務控制器Action

所謂的業務控制器就是使用者實現Action類的例項。