有了開發(fā)環(huán)境盅惜,有了運(yùn)行環(huán)境中剩,就可以開始正式進(jìn)入Struts世界了。
- 獲取Struts框架(jar包)
- 寫第一個HelloStruts程序
- 分析Struts程序的執(zhí)行流程
1.獲取Struts框架
使用框架抒寂,其實(shí)就是別人已經(jīng)寫好的封裝好的JAVA程序结啼,我們通過調(diào)用別人寫好的類,來實(shí)現(xiàn)更優(yōu)雅的設(shè)計模式屈芜,從而提高程序開發(fā)效率以及程序編寫的便捷性郊愧。因此,我們首先需要去下載好Struts框架的jar文件井佑。
我們可以通過到Struts2官網(wǎng)進(jìn)行下載属铁,地址如下:http://struts.apache.org
Struts官網(wǎng)提供多個版本可供下載,具體如下表格所示:
Struts版本 | 說明 |
---|---|
Full Distribution | Struts2完整版:包含示例程序躬翁、空應(yīng)用焦蘑、核心庫、源代碼以及文檔 |
Example Applications | Struts2的示例程序 |
Essential Dependencies Only | Struts2核心庫 |
Documentation | struts2核心文檔 |
Sources | Struts2源代碼 |
但鑒于國內(nèi)經(jīng)常無法打開該網(wǎng)站盒发,我這里為大家學(xué)習(xí)方便例嘱,提供了常用的Struts2基礎(chǔ)框架包。下載:Struts2傳送門...
2.第一個HelloStruts程序
一個基本的Struts2程序大概的執(zhí)行流程應(yīng)該如下:
Client --> index.jsp --> web.xml
--> struts.xml
--> HelloStrutsAction.java --> success.jsp
用戶->index.jsp:用戶通過瀏覽器訪問JSP頁面
index.jsp->web.xml:通過JSP頁面中的按鈕發(fā)送action請求
web.xml->struts.xml:請求被攔截器獲取宁舰,并通過struts配置文件實(shí)現(xiàn)路由
struts.xml->HelloStrutsAction:調(diào)用對應(yīng)的Action類
HelloStrutsAction->success.jsp:Action類中實(shí)現(xiàn)業(yè)務(wù)處理拼卵,并組織生成JSP頁面
success.jsp->用戶:返回結(jié)果
如下圖所示:
所以,我們需要編寫5個文件:
0.前置工作
首先我們需要在Eclipse中新建一個Dynamic Web Project蛮艰,并讓工具自動給我們生成web.xml配置文件腋腮。
并在項(xiàng)目的WebContent——WEB-INF——lib文件夾下,引入Struts2框架文件(復(fù)制或拖拽進(jìn)來)印荔,如下圖所示:
1.index.jsp
在WebContent下低葫,創(chuàng)建一個index.jsp的頁面。
主要用于為用戶提供訪問入口仍律,并向web.xml發(fā)送action請求嘿悬。
頁面中包含一個[HelloWorld]的超鏈接鲤孵,用于觸發(fā)action請求演怎。
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>首頁</title>
</head>
<body>
<h1>Welcome To Struts 2!</h1>
<a href="${pageContext.request.contextPath }/helloStruts.action">
Hello World
</a>
</body>
</html>
2.web.xml
為本項(xiàng)目web配置文件秧均,里面配置了一個Struts2的核心過濾器。
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<!-- 配置一個Struts2核心過濾器 -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- 配置該Struts2過濾器的映射 -->
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 頁面列表 -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
</web-app>
3.struts.xml
在項(xiàng)目的Java Resources——src文件夾下新建一個Struts.xml配置文件葡缰,其定義了action的請求路徑,實(shí)現(xiàn)Action類的路由映射拯爽。
<?xml version="1.0" encoding="UTF-8"?>
<!-- 指定Struts2配置文件的DTD信息 -->
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<!-- Struts2配置文件的根元素 -->
<struts>
<!-- Struts2的Action必須放在指定的包空間下定義 -->
<package name="hello" extends="struts-default" namespace="/*">
<!-- 定義 action最蕾,該action對應(yīng)的類為cn.itcast.action.HelloStrutsAction類
-->
<action name="helloStruts" class="cn.itcast.action.HelloStrutsAction">
<!-- 定義處理結(jié)果和視圖資源之間的映射關(guān)系 -->
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
<action>標(biāo)簽:定義請求路徑;
<result>標(biāo)簽:定義處理結(jié)果與視圖資源之間的映射關(guān)系源内;(即:什么情況返回什么頁面)
4.HelloStrutsAction.java
其為具體執(zhí)行業(yè)務(wù)操作的Action類葡粒,java代碼就寫在這里。
在項(xiàng)目的Java Resources——src文件夾下新建一個名為:cn.itcast.action的包膜钓,并在該包下創(chuàng)建一個HelloStrutsAction的Java類嗽交,該類繼承Struts2框架的ActionSupport類,因此需要先引入命名空間com.opensymphony.xwork2.ActionSupport颂斜;
package cn.itcast.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloStrutsAction extends ActionSupport {
public String execute() throws Exception {
return SUCCESS;
}
}
5.success.jsp
在WebContent下夫壁,創(chuàng)建一個success.jsp的頁面,用于把結(jié)果組織成界面沃疮,響應(yīng)返回給用戶盒让。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>成功頁面</title>
</head>
<body>
歡迎學(xué)習(xí)第一個Struts2程序!
</body>
</html>
運(yùn)行項(xiàng)目
選擇項(xiàng)目右鍵——Run As——Run on Server司蔬,若成功跑起來邑茄,則可在瀏覽器中輸入http://localhost:8080/HelloStruts 訪問index.jsp。
補(bǔ)充一點(diǎn):
如果引入原有項(xiàng)目到本地時葱她,有些庫的引入可能與本地的不一致撩扒,例如:原有JRE是7.0,但本機(jī)環(huán)境是JRE8.0吨些。
此時搓谆,需要刪掉原來的JRE7.0,并添加本地的JRE8.0豪墅。
1.刪掉原來的JRE7.0的引用:
右擊該項(xiàng)目 - Build Path - Configure Build Path 泉手, Java Build Path - Libraries 選項(xiàng)下,會發(fā)現(xiàn)有個出錯的JRE System Libraries偶器,將其Remove掉斩萌。
刪除原有JRE7.0引用庫
2.添加本地的JRE8.0的引用:
右擊該項(xiàng)目 - Build Path - Add Library, 選擇JRE System Library屏轰,選擇Workspace defaulr JRE(jdk1.6)(此前JDK已成功安裝并配置好)颊郎, 然后 Finish 。
添加JRE8.0 引用庫
3.總結(jié)出:Struts2的執(zhí)行流程
1.首先客戶端瀏覽器發(fā)送一個請求(HttpServletRequest)霎苗。
2.接著程序會調(diào)用StrutsPrepareAndExecuteFilter姆吭,然后詢問ActionMapper這個請求是否需要調(diào)用某個Action。
3.如果ActionMapper決定需要調(diào)用某個Action唁盏,StrutsPrepareAndExecuteFilter會把請求的處理交給ActionProxy内狸。
4.ActionProxy通過配置管理器(Configuration Manager)從配置文件(struts.xml)中讀取框架的配置信息检眯,從而找到需要調(diào)用的Action類。
5.然后ActionProxy會創(chuàng)建一個ActionInvocation的實(shí)例昆淡。
6.ActionInvocation使用命名模式來調(diào)用Action锰瘸,在調(diào)用Action前,會依次調(diào)用所有配置的攔截器(Intercepter1昂灵、Intercepter2……)避凝。
7.一旦Action執(zhí)行完,返回結(jié)果字符串眨补,ActionInvocation就會負(fù)責(zé)查找結(jié)果字符串對應(yīng)的Result恕曲,然后執(zhí)行這個Result。通常情況下Result會調(diào)用一些模板(JSP等)來呈現(xiàn)頁面渤涌。
8.產(chǎn)生的Result信息返回給ActionInvocation, 此過程中攔截器會被再次執(zhí)行(順序與Action執(zhí)行之前相反)把还。
9.最后產(chǎn)生一個HttpServletResponse的響應(yīng)行為实蓬,通過StrutsPrepareAndExecuteFilter反饋給客戶端。
作者: 肖sir@ZHBIT
2018 年 09月 17日