Struts2總結
接觸Struts2已經接近一個月,與同樣接觸沒有很長時間的Struts相比,也確實感覺到了很多令人耳目一新的感覺。今天有必要對Struts2的學習做一下總結。以前曾經寫過一篇博文《Struts,Struts2和WebWork的比較》,對這三種框架進行了綜合性地敘述和比較。現在是對Struts2的總結。
Struts2的處理流程如下:
1.使用者請求對Web應用執行某個動作後,Web瀏覽器將要求某些資源的請求傳送到Web伺服器。
2.伺服器小程式過濾器排程程式接到請求後,分析請求,然後確定呼叫相應的動作,提供資源。
3.在Action被執行之前,經配置後把一些常見功能(如驗證、工作流或者檔案上傳)作用到請求上的一組攔截器上,可自動作用到該請求上。
4.Action類的一個新例項被建立,然後執行動作方法,用於把資訊儲存到資料庫,或從資料庫獲取資訊。
5.結果顯示輸出——無論輸出的是HTML、影像、PDF還是其他某種格式。
6.然後,請求按照相反順序通過攔截器傳送。返回的請求允許執行其他的處理或者清理操作。
7.最後,容器把輸出傳送到瀏覽器。
Struts2與Struts相比的的特點
1.struts2所用到的技術就是webwork的技術,它所用到的表示式語言是ognl語言,這是種非常強大的物件導航語言。(ognl-2.6.11 .jar)
2: struts2中不使用actionform管理表單,在struts2中用的action,整合了strtus中的action和actionform
3.在struts2中是通過標籤來對錶單和實體bean進行管理的,在struts2中提供了一套標籤非常靈活。
構建Struts2應用的步驟:
1. 將所需Struts2的 jar包拷貝到WEB工程的/WEB-INF/lib目錄下。
2. 配置web.xml檔案,增加Struts2的對映。web.xml檔案配置如下:
<filter-mapping>
<filter-name>characterEncoding</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
– <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>/*</url-pattern>
</filter-mapping>
web.xml中定義了一個struts2的FilterDispathcer(攔截器:Struts2 技術的核心)的filter, FilterDispatcher用來初始化struts2並且處理所有的Web請求。
3. 編寫Action類,DAO,bean類,整合Hibernate,Spring框架。
Struts.xml中的配置如下:
<?xml version=“1.0” encoding=“UTF-8” ?>
<!–設定編碼方式,通常設定為中文編碼–>
<!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.enable.DynamicMethodInvocation” value=“false” />
<constant name=“struts.devMode” value=“false” />
<constant name=“struts.custom.i18n.resources” value=“globalMessages”/>
<!– 上傳檔案大小 –>
<constant name=“struts.multipart.maxSize” value=“5242880” />
<!—避免Team工作時系統資源的爭奪 –>
<include file=“struts-example.xml”/>
<include file=“struts-login.xml”/>
…
<include file=“struts-personal.xml”/>
<package name=“default” extends=“struts-default”>
<interceptors>
<interceptor class=“com.cumt.web.filter.LoginInterceptor” name=“loginInterceptor” />
<interceptor-stack name=“CheckLogin”>
<interceptor-ref name=“defaultStack” />
<interceptor-ref name=“loginInterceptor” />
</interceptor-stack>
</interceptors>
<!– 這裡放全域性的 –>
<global-results>
<result name=“login”>/loginError.jsp</result>
<result name=“error”>/error.jsp</result>
<result name=“index” type=“redirect”>Index.action</result>
<result name=“addLeader” type=“redirect”>/public/addLeader.jsp</result>
<result name=“addDepartment”
…
</global-results>
<action name=“Index” >
<result name=“success”>/main.jsp</result>
<interceptor-ref name=“CheckLogin” />
</action>
</package>
</struts>
Struts-login.xml中的配置如下:
<?xml version=“1.0” encoding=“UTF-8” ?>
<!DOCTYPE struts PUBLIC
“-//Apache Software Foundation//DTD Struts Configuration 2.0//EN”
“http://struts.apache.org/dtds/struts-2.0.dtd”>
<struts>
<package name=“login” namespace=“” extends=“default”>
<action name=“Login*” method=“{1}” class=“LoginAction”>
<result name=“input”>/login.jsp</result>
<result type=“redirectAction”>Index</result>
</action>
</package>
</struts>
4. Struts2的型別轉換,輸入校驗,核心攔截器,國際化,標籤庫以及對Spring,Hibernate,JSF的整合以後有時間還會做一個總結,大家可以參看這樣一本書:
最後給大家推薦本書三揚科技編著,電子工業出版社出版:《開發者突擊:Struts2核心技術與JavaEE框架整合開發實戰》