【Struts2框架學習】

我是太陽啦啦啦發表於2017-06-11

前言

在網上商城的專案中,使用了SSH框架,在裡面學習了Struts2框架,為什麼我們要用這個Struts2呢?它有什麼意義呢?這篇博文,我們們一起來討論Struts2!      

核心

概念:

Struts2是一個開源框架,方便開發者深入研究瞭解其機制,越來越廣泛的接受和應用。而且它提供一個好的控制器和一套定製的標籤庫Taglib,著力在控制器和檢視上的應用,完美的體現了MVC設計思想。提供集中統一的許可權控制、國際化提示和訊息、輸入校驗和日誌記錄等技術支援。另外,它對其他技術和框架具有良好的融合性。如能與EJB、JDBC和Hibernate等資料庫訪問技術相結合,利用整合技術減少資料庫的工作量。

理解:

struts2其實就是為我們封裝了servlet,簡化了jsp跳轉的複雜操作,並且提供了易於編寫的標籤,可以快速開發view層的程式碼。

為什麼要用:

使用了MVC模式,減少了直接運用MVC模式來開發Web應用的週期。


架構:


實現步驟:

1 jsp出發action

2 struts2攔截請求,呼叫後臺action

3 action返回結果,由不同的jsp展現資料

核心實現:

       Struts2主要是用來控制整個系統流程。它由三個部分組成,核心控制器FilterDispatcher、業務控制器和使用者實現的業務邏輯元件。本系統採用的核心控制器為2.3.15.3版本,該控制器作為一個Filter執行在Web應用中,它負責攔截所有的使用者請求,當使用者請求到達時,該Filter會過濾使用者請求。如果使用者請求以action結尾,該請求將被轉入Struts 2框架處理。Struts 2框架獲得了*.action請求後,將根據*.action請求的前面部分決定呼叫哪個業務邏輯元件,例如,對於login.action請求,Struts 2呼叫名為login的Action來處理該請求。

<!-- 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>/*</url-pattern>
 </filter-mapping>

       攔截器也是本系統中使用的一個Struts2重要元件功能,該元件功能提供一個事件攔截的方法,讓你可以對某些動作進行攔截。例如本系統對所有後臺操作都有一個檢查是否登入的功能,如果沒有登入則對其操作進行攔截。

public class PrivilegeInterceptor extends MethodFilterInterceptor{

	@Override
	protected String doIntercept(ActionInvocation actionInvocation) throws Exception {
		// 獲得Session中存的後臺的使用者:
		AdminUser adminExistUser = (AdminUser) ServletActionContext
				.getRequest().getSession().getAttribute("adminExistUser");
		if(adminExistUser == null){
			// 沒有登入:
			ActionSupport support = (ActionSupport) actionInvocation.getAction();
			support.addActionError("您還沒有登入!請先去登入!");
			return support.LOGIN;
		}else{
			// 已經登入
			return actionInvocation.invoke();
		}
		
	}
}

總結

不斷進步中,專案中經常遇到spring與structs 2相結合,後面的部落格會持續更新,歡迎各位夥伴們!

相關文章