Struts2框架
Struts由來
Struts最早是作為ApacheJakarta項目的組成部分,項目的創(chuàng)立者希望通過對該項目的研究,改進和提高JavaServer Pages 、Servlet、標簽庫以及面向對象的技術水準。2000 年Craig R. McClanahan 先生貢獻了他編寫的JSP Model 2 架構的Application Framework 原始程序代碼給Apache 基金會,成為Apache Jakarta 計劃Struts Framework 前身。
Struts框架的主要架構設計和開發(fā)者是Craig R.McClanahan。Craig 也是Tomcat 4的主要架構師,以及Java Web Services Developer Pack的主要架構師和實現(xiàn)者。他是Sun(于2010年1月被oracle收購)的JavaServer Faces (JSR-127) 以及J2EE平臺的Web層架構的規(guī)范領導。Craig R. McClanahan 先生是JCP ExpertGroup 成員之一,曾參與JSP 規(guī)格制定與Tomcat 4 之編寫,因此Struts Framework 廣受Java 開發(fā)人員群體所重視。Borland 自2002 年底開始于開發(fā)工具JBuilder 中支持Struts Framework。
開始的代碼基礎從2000年5月開始開發(fā),直到2001年6月,1.0版本發(fā)布。有30 多個開發(fā)者參與進來,并有數(shù)千人參與到討論組中。Struts代碼基礎由一個志愿的Commnitter團隊來管理。到2002年,Struts 小組共有9個志愿Commnitter。
Struts是Apache 基金會Jakarta 項目組的一個Open Source 項目,它采用MVC模式,能夠很好地幫助java 開發(fā)者利用J2EE開發(fā)Web應用。和其他的java架構一樣,Struts 也是面向對象設計,將MVC模式"分離顯示邏輯和業(yè)務邏輯"的能力發(fā)揮得淋漓盡致。Struts 框架的核心是一個彈性的控制層,基于如 Java Servlets,JavaBeans,ResourceBundles與XML等標準技術,以及 Jakarta Commons 的一些類庫。Struts由一組相互協(xié)作的類(組件)、Servlet以及jsp tag lib組成?;趕truts構架的web應用程序基本上符合JSP Model2的設計標準,可以說是一個傳統(tǒng) MVC設計模式的一種變化類型。
Struts這個名字來源于在建筑和舊式飛機中使用的支持金屬架。這個框架之所以叫"Struts",是為了提醒我們記住那些支撐我們房屋,建筑,橋梁,甚至我們踩高蹺時候的基礎支撐。這也是一個解釋Struts在開發(fā)Web應用程序中所扮演的角色的精彩描述。當建立一個物理建筑時,建筑工程師使用支柱為建筑的每一層提供支持。同樣,軟件工程師使用Struts為業(yè)務應用的每一層提供支持。它的目的是為了幫助我們減少在運用MVC設計模型來開發(fā)Web應用的時間。我們仍然需要學習和應用該架構,不過它將可以完成其中一些繁重的工作。如果想混合使用Servlets和JSP的優(yōu)點來建立可擴展的應用,Struts是一個不錯的選擇。
Struts演變
Struts已經分化成了兩個框架:第一個是在傳統(tǒng)的Struts1的基礎上,融合了另外的一個優(yōu)秀的Web框架WebWork的Struts2。Struts 2最初被稱為WebWork 2,它是一個簡潔的、可擴展的框架,可用于創(chuàng)建企業(yè)級Java web應用程序。設計這個框架是為了從構建、部署、到應用程序維護方面來簡化整個開發(fā)周期。Struts 2雖然是在Struts1的基礎上發(fā)展起來的,但是實質上是以WebWork為核心的。Struts2為傳統(tǒng)的Struts1注入了WebWork的先進的設計理念,統(tǒng)一了Struts1和WebWork兩個框架。
Struts1分化出來的另外一個框架是Shale。這個框架遠遠超出了Struts1原有的設計思想,與原有的Struts1關聯(lián)很少,使用了全新的設計思想。Shale更像一個新的框架而不是Struts1的升級。
Struts2是流行和成熟的基于MVC設計模式的Web應用程序框架。 它不僅僅是Struts1 的升級版本,更是一個完全重寫的全新的Struts架構。最初,以WebWork框架和Struts框架為基礎,通過提供增強和改進的Struts框架,進而實現(xiàn)簡化web技術人員開發(fā)工作的目標。不久之后,Webwork框架和Struts社區(qū)聯(lián)合創(chuàng)造了現(xiàn)在流行的Struts2框架。
Struts2是一個基于MVC設計模式的Web應用框架,它本質上相當于一個servlet,在MVC設計模式中,Struts2作為控制器(Controller)來建立模型與視圖的數(shù)據(jù)交互。Struts 2是Struts的下一代產品,是在 struts 1和WebWork的技術基礎上進行了合并的全新的Struts 2框架。其全新的Struts 2的體系結構與Struts 1的體系結構差別巨大。Struts 2以WebWork為核心,采用攔截器的機制來處理用戶的請求,這樣的設計也使得業(yè)務邏輯控制器能夠與ServletAPI完全脫離開,所以Struts 2可以理解為WebWork的更新產品。雖然從Struts 1到Struts 2有著太大的變化,但是相對于WebWork,Struts 2的變化很小。
MVC設計模式
Model1架構
Servlet和JSP是開發(fā)Web應用程序的主要技術。Servlet被認為優(yōu)于CGI。 Servlet技術不會創(chuàng)建進程,而是創(chuàng)建線程來處理請求。 創(chuàng)建線程過程的優(yōu)點是它不分配單獨的內存區(qū)域。 因此,許多后續(xù)請求可以由servlet輕松處理。
Servlet技術中的問題是如果任何設計代碼被修改,Servlet需要重新編譯。 它不提供分離的關注。視圖和業(yè)務邏輯混雜。
JSP克服了Servlet的幾乎所有問題。 它提供更好的分離關注,現(xiàn)在視圖和業(yè)務邏輯可以很容易地分離。 如果修改了JSP頁面,則不需要重新部署應用程序。 JSP提供支持,使用JavaBean,自定義標簽和JSTL開發(fā)Web應用程序,以便我們可以將業(yè)務邏輯與JSP分離開來,這將更容易進行測試和調試。
如上圖所示,有一個顯示model1架構流程的圖片。
瀏覽器發(fā)送JSP頁面的請求
JSP訪問Java Bean并調用業(yè)務邏輯
Java Bean連接到數(shù)據(jù)庫并獲取/保存數(shù)據(jù)
發(fā)送響應到由JSP生成的瀏覽器
Model1架構的優(yōu)勢
輕松快速開發(fā)Web應用程序
Model1的缺點
導航控制是分散的:因為每個頁面都包含確定下一頁的邏輯。 如果其他頁面引用的JSP頁面名稱被更改,我們需要在導致維護問題的所有頁面中進行更改。
耗時:您需要花更多時間在JSP中開發(fā)自定義標簽。 所以我們不需要使用scriptlet標簽。
難以擴展:對于小型應用程序而言更好,但不適用于大型應用程序。
Model2(MVC)架構
Model2基于MVC(模型視圖控制器)設計模式。 MVC設計模式由三個模塊:模型,視圖和控制器組成。
模型——模型主要負責管理應用程序的數(shù)據(jù),它通過響應視圖的請求和控制器的指令來更新自身的數(shù)據(jù)。
視圖——通過控制器的指令觸發(fā)所展現(xiàn)的一種特殊的數(shù)據(jù)格式。它們是基于像JSP、ASP、PHP之類模板系統(tǒng)的腳本,較易與AJAX技術進行整合。
控制器——控制器負責響應用戶輸入并執(zhí)行數(shù)據(jù)模型對象的交互??刂破髟诮邮铡⒋_認輸入后執(zhí)行修改數(shù)據(jù)模型狀態(tài)的業(yè)務操作。
Model2(MVC)架構的優(yōu)勢
導航控制集中:現(xiàn)在只有控制器包含了確定下一頁的邏輯。
易于維護
容易擴展
容易測試
更好的分離問題
Model2(MVC)架構的缺點
我們需要編寫自己的控制器代碼。 如果我們更改控制器代碼,我們需要重新編譯該類并重新部署應用程序。
Model2架構的解決方案:可配置的MVC組件。它使用聲明性方法定義視圖組件,請求映射等。它解決了Model2型架構的問題。 Struts框架提供了可配置的MVC支持。 在struts 2中,我們定義了所有的Action類,并在struts.xml文件中查看了組件。
Struts2體系結構
上圖描述了Struts2 高級系統(tǒng)架構下的模型、視圖及控制器。控制器是通過Struts2 分派servlet過濾器以及攔截器進行實現(xiàn),模型是通過Actions進行實現(xiàn),而視圖則是結果類型和結果的結合。值棧和OGNL提供共同的路線、鏈接以及與其他組件之間的集成。這些是Struts2 MVC模式的體系結構概述,
通過上述圖片的描述,我們可以依照下面幾點解釋在Struts2 中用戶的請求生命周期:
用戶發(fā)送一個資源需求的請求到服務器(例如:頁面)。
核心控制器查看請求后確定適當?shù)膭幼鳌?/p>
使用驗證、文件上傳等配置攔截器功能。
執(zhí)行選擇的動作來完成請求的操作。
另外,如果需要的話,配置的攔截器可做任何后期處理。
最后,由視圖顯示結果并返回給用戶。
Struts2框架十大優(yōu)點
POJO表單和POJO動作 - Struts2的Struts框架去除掉了Struts框架中的Action Forms部分, Struts2可以使用任何POJO接收的形式輸入。同樣現(xiàn)在可以把任何POJO作為一個Action類。
標簽支持 - Struts2 改進了標簽表單,而新的標簽可讓開發(fā)人員減少代碼編寫量
AJAX 支持- Struts2中已確認由Web2.0技術接管,創(chuàng)建了功能非常類似于標準的Struts2 標簽的AJAX標簽
易于整合 - Struts有多種整合方式可使用,現(xiàn)在與其他類型的框架,如Spring、Tiles、SiteMesh之類的,整合更為容易了
模板支持 - 支持使用模板生成視圖。
插件支持 - 可以提高核心Struts2的特性,并使用插件增強功能。大量的插件可供Struts2使用。而使用插件可以增強和擴大Struts2 核心行為。
性能分析 - Struts2的分析,調試和分析應用程序提供了集成。除此之外,Struts還提供了集成的內置調試工具調試。
易于修改標簽 - Struts2的標簽標注,可以調整使用Freemarker的模板。這并不需要JSP或Java知識?;綡TML,XML和CSS知識是足夠修改標簽。
提倡少配置 - Struts2 使用各種設置的默認值促進減少配置,而你不需要再配置什么除非是偏離了Struts2 設定的默認設置。
視圖技術: - Struts2 為多種視圖選項(JSP、Freemarker、Velocity、XSLT等)提供支持。
Struts2的三大缺點
更大的學習曲線 - 要使用MVC與Struts,你必須是習慣使用標準的JSP,Servlet API和大量精心設計的框架。
欠佳的文檔 - Struts有標準的servlet和JSP API的相比,更少的在線資源,許多用戶第一時間發(fā)現(xiàn)網上Apache文檔混亂和管理不善的組織。
較少透明度 - Struts應用程序中,有很多幕后比正常的基于Java的Web應用程序,這使得它很難理解的框架。
Struts2學習建議
學習之前,您應該熟悉以下技術
Java
Servlet, Filters, JSP, 標簽庫
JavaBeans
HTML,CSS,JavaScript 和 HTTP
WEB容器 (比如:Tomcat)
XML
Struts 2 需要Servlet API 2.4或更高,JSP 2.0或更高和Java 5或更高
Struts2在線教程
Struts官網-http://struts.apache.org/index.html
易百教程-http://www.yiibai.com/struts_2/
猿教程-http://www.yuanjiaocheng.net/Struts/first.html
w3cschool-https://www.w3cschool.cn/struts_2/
Struts2官方文檔中文版-https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=30743745
Struts2開發(fā)工具
Eclipse
MyEclipse
Intelli IDEA
Maven
Struts2環(huán)境設置
搭建Struts2 開發(fā)環(huán)境運行一個最小的Struts2 應用程序(HelloWorld),假設你的電腦已經安裝了JDK(5+)、Tomcat以及Eclipse,如果你沒有安裝這些組件那就按照下面列出快捷方式安裝:
步驟1 - 安裝Java開發(fā)工具包(JDK):
你可以在甲骨文網站的Java頁面下載最新版本的SDK:Java SE下載鏈接-http://www.oracle.com/technetwork/java/javase/downloads/index.html。在下載文件中你可以看到安裝JDK的說明,按照說明安裝及配置設置。最后,設置路徑和JAVA_HOME環(huán)境變量到引用的包含Java和Javac的目錄,通常分別是 java_install_dir/bin 和 java_install_dir 。
如果你是在Windows系統(tǒng)下把SDK安裝到C:\jdk1.5.0_20,你需要把以下代碼放到你的C:\autoexec.bat文件里。
set PATH=C:\jdk1.5.0_20in;%PATH%
set JAVA_HOME=C:\jdk1.5.0_20
此外,在Windows NT/2000/XP系統(tǒng)中,你也可以右鍵點擊“我的電腦”,選擇“屬性”→“高級”→“環(huán)境變量”,然后將路徑值更新并按下“確定”按鈕。
在Unix(或Solaris,Linux等)系統(tǒng)中,如果SDK是安裝在C盤的 /usr/local/jdk1.5.0_20 ,你可以把以下代碼放到 .cshrc 文件中。
setenv PATH /usr/local/jdk1.5.0_20/bin:$PATH
setenv JAVA_HOME /usr/local/jdk1.5.0_20
另外,如果你使用的是像Borland JBuilder、Eclipse、IntelliJ IDEA或是Sun ONE Studio之類的集成開發(fā)環(huán)境(IDE),編譯運行一個簡單的程序來確認IDE找尋到了你安裝的Java的位置,否則的話就按照IDE給出的文檔做正確的設置。
步驟2 - 安裝Apache Tomcat:
你可以從這個地址下載Tomcat的最新版本:http://tomcat.apache.org/。一旦你下載了安裝程序,解壓二進制發(fā)布包到一個便捷的位置,例如Windows的 C:\apache-tomcat-6.0.33 ,Linux或Unix的 /usr/local/apache-tomcat-6.0.33 ,并創(chuàng)建CATALINA_HOME環(huán)境變量指向這些位置。
在Windows環(huán)境下,可以通過執(zhí)行以下指令啟動Tomcat,或者你可以直接雙擊 startup.bat 。
%CATALINA_HOME%in\startup.bat
or
C:\apache-tomcat-6.0.33in\startup.bat
在Unix(或Solaris、Linux等)環(huán)境下,可以通過執(zhí)行以下指令啟動Tomcat:
$CATALINA_HOME/bin/startup.sh
or
/usr/local/apache-tomcat-6.0.33/bin/startup.sh
啟動成功后,包含Tomcat的默認web程序就可以通過 http://localhost:8080/ 進行訪問了。如果一切正常,那么會顯示以下結果:
在這里可發(fā)現(xiàn)更多關于配置和運行Tomcat的信息的文檔,同樣也可登陸Tomcat網站進行查找:http://tomcat.apache.org。
在Windows環(huán)境下,可以通過執(zhí)行以下指令停止Tomcat:
%CATALINA_HOME%in\shutdown
or
C:\apache-tomcat-5.5.29in\shutdown
在Unix(或Solaris、Linux等)環(huán)境下,可以通過執(zhí)行以下指令停止Tomcat:
$CATALINA_HOME/bin/shutdown.sh
or
/usr/local/apache-tomcat-5.5.29/bin/shutdown.sh
步驟3 - 安裝Eclipse(IDE)
本系列文章中的所有示例都是使用Eclipse IDE,因此建議你在電腦上安裝最新版本的Eclipse??稍谶@個地址下載安裝最新的Eclipse:http://www.eclipse.org/downloads/。一旦你下載了安裝程序,解壓二進制發(fā)布包到一個便捷的位置,例如Windows的 C:\eclipse ,Linux或Unix的 /usr/local/eclipse ,并設置適當?shù)穆窂阶兞俊?/p>
在Windows環(huán)境下,可以通過執(zhí)行以下指令啟動Eclipse,或者你可以直接雙擊 eclipse.exe 。
%C:\eclipse\eclipse.exe
在Unix(或Solaris、Linux等)環(huán)境下,可以通過執(zhí)行以下指令啟動Eclipse:
$/usr/local/eclipse/eclipse
啟動成功后,如果一切正常,那么會顯示以下結果:
步驟4 - 安裝Struts2 文件庫
如果一切順利,那么現(xiàn)在你可以繼續(xù)安裝你的Struts2 框架,以下是在電腦上下載和安裝Struts2 的簡單步驟:
選擇是否想要在Windows或者Unix上安裝Struts2 ,然后繼續(xù)下一步,下載適用于Windows或者Unix的壓縮文件。
在這個地址下載最新版本的Struts2 二進制文件:http://struts.apache.org/download.cgi。
在編寫本教程時我們下載的是struts-2.0.14-all.zip,當你解壓下載的文件時,它會在 C:\struts-2.2.3 里顯示以下目錄結構:
接下來是在任意位置解壓zip文件,我們是在Windows 7電腦的C:\文件夾里下載并解壓struts-2.2.3-all.zip,這樣我們可以把所有jar文件放在C:\struts-2.2.3\lib里。確保你已正確設置CLASSPATH變量,否則你運行應用程序的時候就會遇到問題。