基於 Struts 2 開發 Web 應用

火星人 @ 2014-03-12 , reply:0
←手機掃碼閱讀

  
本文主要介紹在 IBM 產品平台上開發基於 Struts 2 的 Web 應用。Struts 2 與傳統的 Struts 1 已經有了本質區別,例如在 Struts 2 中不再需要 ActionForm,任何 Java Bean 都可以用來捕獲 form 表單輸入參數等。本文將首先介紹如何利用 Rational Software Architect 7(RSA 7)以及 WebSphere Application Server 6.1(WAS 6.1)搭建 Struts 2 開發環境,然後通過一個實例介紹如何開發 Struts 2 應用。

引言

作為 Java Web 應用的典型框架,Struts 一直受到 Java 開發者的青睞,Struts 2 作為 Struts 發展的又一個里程碑,以 WebWork 為基礎,提供了更易於使用,功能更強的 MVC 框架。同時它可以幫助開發人員更快速、高效、方便地實現一個 Java Web 應用系統。

對於開發人員來講,不同的項目可能需要不同的開發和運行 Struts 2 的平台,Struts 2 需要以下環境:Servlet API 2.4, JSP API 2.0, Java 5。IBM WebSphere Application Server 6.1(以下簡稱 WAS 6.1) 符合 Sturts 2 對運行環境的所有要求。另外,IBM Rational Software Architect 7(以下簡稱 RSA)提供了設計、開發各種應用的工具,其中包括創建和開發 Web 應用。二者的組合將是開發 Struts 2 的理想平台。





基於 RSA 及 WAS 搭建 Struts 2 開發平台

首先我們使用 RSA 創建一個動態 Web 項目,我們假設 RSA 中已經創建了一個 WAS 6.1 的伺服器:


圖 1. 在 RSA 中創建 WAS 6.1 運行環境

在創建該項目的過程中,需要注意正確設置“目標運行時伺服器”以及“動態 Web 模塊 版本“, 如下圖:


圖 2. 設置動態 Web 項目

其他按默認配置,點擊”完成”。創建完項目后,項目的基本包結構會自動生成,為了使該 Web 項目使用 Struts 2 框架,我們需要做一下配置:

配置 Struts 2 類庫

本示例使用 Struts 2.1.6 版本 , 所使用的類庫可以從 http://apache.etoak.com/struts/library/struts-2.1.6-lib.zip下載,如下圖,拷貝相應 jar 包到 Sample/WebContent/WEB-INF/lib 下。注意,本示例只拷貝了一些基本 jar 包,對於需要使用到 Struts 2 複雜功能的應用,需要另外拷貝相應 jar 包。


圖 3. 設置 Struts 2 依賴的 Jar 包(查看大圖)

配置 web.xml

為了讓所有 web 請求通過 struts 2 框架處理,我們需要在 web.xml 中設置相應的 filter 以及 filter mapping, 對於 struts 2.1.6, 應設置成如下圖高亮部分:


圖 4. 在 web.xml 中設置 filter 和 filter mapping(查看大圖)

對於 Struts 2 早期版本(2.1.3 之前),一般設置 filter 為 FilterDispatcher,具體如下:

<filter>       <filter-name>struts2</filter-name>                       <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>   </filter>   <filter-mapping>       <filter-name>struts2</filter-name>       <url-pattern>/*</url-pattern>   </filter-mapping>   

Stuts 2 的 taglib 已經自動包含在 struts-core.jar, 伺服器會自動找到相應 taglib,所以 web.xml 中不再需要設置 taglib。

配置 Web 容器

當在 WAS 6.1 上運行 struts 2 應用程序時,需要另外設置 web 容器的一個定製屬性:

com.ibm.ws.webcontainer.invokefilterscompatibility=true, 否則,所有 Struts 2 Action 不起作用。該設置可以在 WAS 控制台上設置如下:


圖 5. 設置 Web 容器(查看大圖)

以上步驟完成了開發 struts 2 應用的準備工作,下面我們開發一個示例。





示例開發

該示例包括兩個頁面,第一個是管理員瀏覽所有系統用戶(userList.jsp),第二個是管理員創建一個新用戶(user.jsp)。圖 6 和圖 7 分別是兩個示例的應用截圖。


圖 6 . 瀏覽系統用戶


圖 7. 點擊 “創建”按鈕創建新用戶

點擊“提交”,如果通過校驗,則返回到第一個頁面,如果校驗失敗,仍回到當前頁面,並提示錯誤信息。

下面我們開發該應用的各個組件:

創建 Action

創建基類

通過基類實現 SessionAware, ServletRequestAware, ServletResponseAware 介面,可以使用 IOC 方式初始化 session, request 和 response。這種實現可以方便所有子類訪問 session, request 和 response。

import java.util.Map;  import javax.servlet.http.HttpServletRequest;  import javax.servlet.http.HttpServletResponse;    import org.apache.struts2.interceptor.ServletRequestAware;  import org.apache.struts2.interceptor.ServletResponseAware;  import org.apache.struts2.interceptor.SessionAware;    import com.opensymphony.xwork2.ActionSupport;    public class  BaseAction extends ActionSupport   	implements SessionAware, ServletRequestAware, ServletResponseAware{  	  	private Map sessionMap;  	private HttpServletRequest request;      private HttpServletResponse response;            public void setServletRequest(HttpServletRequest request) {          this.request = request;      }            public void setServletResponse(HttpServletResponse response) {          this.response = response;      }            public void setSession(Map map){      	this.sessionMap=map;      }            public HttpServletRequest getHttpServletRequest(){      	return request;      }            public HttpServletResponse getHttpServletResponse(){      	return response;      }            public Map getSession(){      	return sessionMap;      }  }  			

創建 , 配置 Action

在該示例中,所有 form 表單提交使用一個 Action 類,該類的不同方法將作為不同表單提交的 Action。在該示例中,execute(), createOrEditUser(), submitUser(), deleteUser() 對應於不同表單對應的 action。


圖 8. UserAction 代碼

在 Struts 2 應用中,action 的配置文件應該位於類根路徑下,一個 Struts 2 應用中可以存在多個 action 配置文件,但這些文件需要在 struts.xml 中引用,本例所有 action 在 struts-user.xml 中定義,struts.xml 引用 struts-user.xml。

在 struts-user.xml 中可以看到不同的類方法被配置成不同的 Action, 如果沒有指定方法,那麼 struts 2 框架會默認調用 execute(), 例如:”showUserList”

<!DOCTYPE struts PUBLIC      "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"      "http://struts.apache.org/dtds/struts-2.0.dtd">  <struts>		      <package name="user" extends="struts-default" namespace="/admin">          ……………          <!-- user list -->  		<action name="showUserList" class="sample.action.UserAction">	  			<result>/WEB-INF/page/userList.jsp</result>			  		</action>  		  		<!-- add user -->  		<action name="createOrEditUser"   		    class="sample.action.UserAction"   			method="createOrEditUser">  			<result>/WEB-INF/page/user.jsp</result>  		</action>  		  		<action name="submitUser"   		    class="sample.action.UserAction"   			method="submitUser">	  			<result name="input">/WEB-INF/page/user.jsp</result>  			<result name="userList" type="chain">showUserList</result>  		</action>		  		……………					  	</package>  </struts>  			

在 Struts 2 中,如果一個 Action 需要調用另一個 Action, 可以設置 result 的 type 為 chain, 如前面代碼片段中的 <result name="userList"type="chain">showUserList</result>

開發頁面

在開發 Struts 2 應用時,不可避免會使用大量的 Struts 2 標籤,默認 Struts 2 解釋這些標籤生成 HTML 代碼時會加上一些額外的代碼,例如可能把 <tr><td> 自動加上,如果我們選擇自己靈活控制代碼格式,可以參考本示例在 struts.properties 里設置 struts.ui.theme=simple, struts.properties 同樣位於類根路徑下:





[火星人 via ] 基於 Struts 2 開發 Web 應用已經有327次圍觀

http://www.coctec.com/docs/linux/show-post-68725.html