Struts2框架概述
Struts2-day01
一、 框架概述
什麽是框架,為什麽使用框架,框架優點
框架(framework)是一個基本概念上的結構,用於去解決或者處理復雜的問題
框架,即framework。其實就是某種應用的半成品,就是一組組件,供你選用完成你自己的系統。簡單說就是使用別人搭好的舞臺,你來做表演。
框架是在特定的領域內解決問題。
優點
重用代碼大大增加,軟件生產效率和質量也得到了提高
使用框架開發,它提供統一的標準,大大降低了我們的後期維護。
學習框架重點:了解框架做了什麽,我們要在這個基礎上在做什麽事情。
二、 java開發中常用框架
SSH (SSM SSI)
SSH struts2 spring hibernate
SSM(SSI) springmvc spring mybatis(ibatis)
SSH 它是企業開發中比較主流的一套架構。
SSH框架在開發中所處的位置:
三、 Struts2框架介紹
什麽是struts2框架,學習struts2框架的核心。
Struts2是一個基於MVC設計模式的Web應用框架,它本質上相當於一個servlet,在MVC設計模式中,Struts2作為控制器(Controller)來建立模型與視圖的數據交互
Struts2=struts1+webwork
問題:struts2是一個mvc框架,它的mvc是什麽?
javaweb開發中的mvc,是在jsp的model2模式中提過
Model------javabean
View--------jsp
Controller----servlet
核心點:
1.攔截器 interceptor
2.Action
3.ognl與valueStack
在現在開發中與struts2比較類似的框架有哪些?
Struts1 webwork springmvc jsf
Struts2框架流程
四、 今天內容介紹與重點
今天內容:
一個簡單的登錄案例
在這個案例中,我們要使用
重點:
1.struts2框架如何完成原來由servlet完成的工作。
2.Struts2框架如何完成請求參數的封裝處理
3.Struts2框架如何完成頁面跳轉。
五、 簡單登錄案例原型
需要三個jsp頁面 login.jsp success.jsp failer.jsp
還需要一個servlet LoginServlet 主要完成的是業務邏輯操作。
login.jsp
LoginServlet
六、 Struts2框架來完成登錄操作
1. 問題:為什麽使用struts2框架?
Struts2框架它是一個在web中應用的mvc框架。
我們使用strtus2框架來完成web開發有什麽優勢?
2. 問題:怎樣使用strtuts2框架
首先要上網下載它的jar包。
步驟:
1.導入相關的jar文件
2.需要在web.xml文件中配置一個Filter(只有配置了它才可以使用struts2框架)
3.struts.xml配置
4.創建Action來完成邏輯操作
3. 快速入門
我們使用的是struts2 2.3.24版本
我們使用strtus2框架不是直接將它的lib包下的所有的jar文件copy到項目中,而是使用其中的一部分。
我們可以參考它的示例代碼:
1.導入13個jar包
2.需要在web.xml文件中配置StrutsPrepareAndExecuteFilter
3.創建一個struts.xml文件,它的位置是可以放置在src下。
3.1. 代碼實現
jsp頁面
Action
struts.xml文件配置
3.2. 流程分析
4. 使用struts2完成簡單登錄操作
1.login.jsp頁面不變動
2.創建一個LoginAction來完成邏輯操作
3.在struts.xml文件中完成配置操作
問題1:在LoginAction中如何得到username與password
可以直接在Action類中提供成員屬性,並為其提供get/set方法。
就可以得到請求參數
問題2:如果實現路徑跳轉?
1.我們可以給action中的方法添加一個String返回值
2.在struts.xml配置文件中,在其對應的action配置上通過<result>來確定跳轉的路徑。
七、 Struts2框架執行流程
1. Struts2源碼導入
對於struts2框架它的源代碼我們主要使用三部分
- struts2核心部分源代碼 org.apache.struts2xx
src\core\src\main\java
- struts2的xwork核心部分源代碼
src\xwork-core\src\main\java\com\opensymphony\xwork2
- struts2的插件的源代碼
src\plugins
2. 關於struts.xml配置文件中提示問題
第一步
在eclipse的window下首選面中查找xml catalog
第二步
Location:配置本地的dtd文件路徑
key type:選擇URI
Key: http://struts.apache.org/dtds/struts-2.3.dtd
註意版本要對應,如果你可以上網,那麽會自動緩存dtd,具有提示功能。
3. 執行流程介紹
1.當通過瀏覽器發送一個請求
2.會被StrutsPrepareAndExecuteFilter攔截
3.會調用strtus2框架默認的攔截器(interceptor)完成部分功能
4.在執行Action中操作
5.根據Action中方法的執行結果來選擇來跳轉頁面Resutl視圖
一般管StrutsPrepareAndExecuteFilter 叫做前端控制器(核心控制器),只有配置了這個filter我們的strtus2框架才能使用。
Strtus2的默認攔截器(interceptor)它們是在struts-default.xml文件中配置
註意:這上xml文件是在strtus-core.jar包中。
默認的攔截器是在defaultStack中定義的。
八、 Struts2配置詳解
1. Struts2配置文件加載順序
第一個加載的是default.properties文件
位置:strtus2-core.jar包 org.apache.struts2包下
作用:主要是聲明了struts2框架的常量
第二個加載的是一批配置文件
Strtus-default.xml
位置:struts2-corl.jar
作用:聲明了interceptor result bean
Strtus-plugin.xml
位置:在strtus2的插件包中
作用:主要用於插件的配置聲明
Strtus.xml
位置:在我們自己的工程中
作用:用於我們自己工程使用strtus2框架的配置
第三個加載的是自定義的strtus.properties
位置:都是在自己工程的src下
作用:定制常量
第四自定義配置提供
第五加載的是web.xml配置文件
主要是加載strtus2框架在web.xml文件中的相關配置.
第六 bean相關配置
重點掌握:
1.Default.properties
2.Struts-default.xml
3.Struts-plugin.xml
4.Strtus.xml
5.web.xml
2. struts.xml文件配置介紹
2.1. package配置
1.name屬性 作用:定義一個包的名稱,它必須唯一。
2.namespace屬性 作用:主要是與action標簽的name屬性聯合使用來確定一個action 的訪問路徑
3.extends屬性 作用:指定繼承自哪個包。一般值是strtus-default
strtus-default包是在strtus-default.xml文件中聲明的。
4.abstruct屬性 它代表當前包是一個抽象的,主要是用於被繼承
2.2. action配置
1.name屬性 作用:主要是與package的namespace聯合使用來確定一個action的訪問路 徑
2.class屬性 作用:用於指示當前的action類
3.method屬性 作用:用於指示當前的action類中的哪個方法執行
2.3. result配置
它主要是用於指示結果視圖
1.name屬性 作用是與action類的method方法的返回值進行匹配,來確定跳轉路徑
2.type屬性 作用是用於指定跳轉方式
2.4. 擴展
關於action配置中的class與method的默認值以及result中的name與type 默認值問題
原因:strtus-default.xml文件中配置
它的作用就是當一個請求來時,如果查找不到指定的class及對應的method就會執行
ActionSupport類中的execute方法。
在這個類的execute方法中默認返回的是”success”
也就是說,result的name屬性默認值是success,默認的跳轉方式是請求轉發 dispatcher
3. 常量配置
default.properties文件中定義了struts2框架常用常量 .
問題:我們怎樣可以定義常量
1.可以在src下創建一個strtus.properties配置文件
2.可以在web.xml文件中配置
3.可以直接在strtus.xml文件中定義常量 (推薦)
註意:後加載的配置文件中的常量會將先加載的常量覆蓋
九、 Struts2的Action詳解
Struts2中的action,主要是完成業務邏輯操作。Action替代在servlet中完成的作用。
Action的學習主要有兩點
如何創建一個struts2的action
如果訪問一個struts2的action
1. Action類創建方式(三種)
創建一個pojo類
Pojo(plani Ordinary java object)簡單的java對象
Pojo類就是沒有實現任何接口沒有繼承任何類
優點:無耦合
缺點:所有的功能都要自己完成
創建一個類實現一個Action接口
com.opensymphony.xwork2.Action
在Action接口中定義了五個常量,一個execute方法
五個常量:它們是默認的五個結果視圖<result name=””>:
ERROR : 錯誤視圖
INPUT: 它是struts2框架中interceptor中發現問題後會訪問的一個視圖
LOGIN:它是一個登錄視圖,可以在權限操作中使用
NONE:它代表的是null,什麽都不做(也不會做跳轉操作)
SUCCESS:這是一個成功視圖
優點:耦合度低
缺點:還是需要自己來完成功能
創建一個類繼承ActionSupport類
com.opensymphony.xwork2.ActionSupport
ActionSupport類也實現了Action接口。
我們在開發中一般會使用這種方案:
優點:具有豐富的功能,例如 表單校驗 錯誤信息設置 國際化
缺點:耦合度高
1. action的訪問方式
1.直接通過<action>標簽來配置,通過method來指定訪問的方法,如果method沒有,默認訪問的是execute方法。
2.簡化的action訪問方式,可以使用*通配符來訪問。
這種方式的缺點:不建議使用過多的*號,它帶來程序閱讀障礙,不便於理解
使用*來簡化操作方案,它對名稱規範必須進行一個統一。
2. 擴展--動態方法調用
這是strtus2提供的動態方法調用。
註意:對於strtus2的動態方法調用,要想使用我們必須配置一個常量來開啟動態方法調用
這代表動態方法調用沒有開啟
個人不建議使用動態方法調用
十、 Struts2框架封裝數據
主要解決的問題:是在action中如果獲取請求參數
主要有兩種方式:
1.屬性驅動
a.直接在action類中提供與請求參數匹配屬性,提供get/set方法
b.在action類中創始一個javaBean,對其提供get/set ,在請求時頁面上要進行修改, 例如 user.username user.password ,要使用ognl表達式
以上兩種方式的優缺點:
第一種比較簡單,在實際操作我們需要將action的屬性在賦值給模型(javaBean) 去操作
第二種:不需要在直接將值給javaBean過程,因為直接將數據封裝到了javaBean 中。它要求在頁面上必須使用ognl表達式,就存在頁面不通用問題。
2.模型驅動
步驟:
1.讓Action類要實現一個指定接口ModelDriven
2.實例化模型對象(就是要new出來javaBean)
3.重寫getModel方法將實例化的模型返回。
對於模型驅動它與屬性驅動對比,在實際開發中使用比較多,模型驅動缺點,它只能對 一個模型數據進行封裝。
十一、 總結
今天主要內容是圍繞著簡單的登錄案例來講解:
1.關於strtus2框架的環境搭建
2.關於strtus2框架配置
3.關於strtus2框架請求參數封裝
4.關於strtus2框架的路徑跳轉
關於action訪問的配置
<package name=”” namespace=”” extends=””>
<action name=”” class=”” method=””>
<result name=”” type=””>路徑</result>
</action>
</package>
關於路徑跳轉問題:
是通過<result>來配置跳轉的路徑.
它的name屬性是與action中的方法的返回值進行對比的。
它的type屬性可以取哪些值?
默認值是dispatcher 它代表的是請求轉發。針對於jsp頁面
redirect 它代表的是重定向 針對於jsp頁面
chain 它類似於請示轉發,只不過它是針對於action跳轉.
redirectAction 它類似於重定向 針對於action
關於路徑跳轉的配置
可以直接在<package>下創建全局的result
Struts2框架概述