struts2的使用
一、Struts2的簡介
Struts2是一個基於MVC設計模式的Web應用框架,它本質上相當於一個servlet,在MVC設計模式中,Struts2作為控制器(Controller)來建立模型與檢視的資料互動,Struts2=struts1+webwork的發展其起來的。
二、Struts2的原理
Struts2的原理圖
struts2的執行流程:
當通過瀏覽器傳送一個請求
會被StrutsPrepareAndExecuteFilter攔截
會呼叫strtus2框架預設的攔截器(interceptor)完成部分功能
在執行Action中操作
根據Action中方法的執行結果來選擇來跳轉頁面Resutl檢視
一般管StrutsPrepareAndExecuteFilter 叫做前端控制器(核心控制器),只有配置了這個filter我們的strtus2框架才能使用。Strtus2的預設攔截器(interceptor)它們是在struts-default.xml檔案中配置,注意:這上xml檔案是在strtus-core.jar包中。預設的攔截器是在defaultStack中定義的。
struts2使用的是filter來進行攔截的,其中將請求轉接到struts2框架中,而springmvc是使用servlet來進行攔截的,其中在web.xml檔案的配置中體現了。
struts2的預設配置檔案struts.xml是在class檔案下的struts.xml檔案的,但是為了自己定義位置可以如下進行設計
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
<init-param>
<param-name>filterConfig</param-name>
<param-value>classpath:struts2/struts.xml</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
攔截的方式的配置:/*
二、Struts2的主要配置檔案
1)Struts2的主要配置檔案
web.xml中的前段控制器的配置StrutsPrepareAndExecuteFilter
Struts2的主要配置檔案,其中struts2有很多主要的配置檔案,其中的作用都是一樣,但是其中載入的順序不同,按照下面的順序來進行執行。
載入順序:default.properties——>Strtus-default.xml/Strtus-plugin.xml/Strtus.xml——>strtus.properties——>自定義配置提供——>web.xml配置檔案——>bean相關配置 |
|
1 |
default.properties: 位置:strtus2-core.jar包 org.apache.struts2包下 作用:主要是宣告瞭struts2框架的常量 |
2 |
Strtus-default.xml 位置:struts2-corl.jar 作用:宣告瞭interceptor result bean |
Strtus-plugin.xml 位置:在strtus2的外掛包中 作用:主要用於外掛的配置宣告 |
|
Strtus.xml 位置:在我們自己的工程中 作用:用於我們自己工程使用strtus2框架的配置 |
|
3 |
strtus.properties 位置:都是在自己工程的src下 作用:定製常量 |
4 | 自定義配置提供 |
5 |
web.xml配置檔案 主要是載入strtus2框架在web.xml檔案中的相關配置. |
6 |
bean相關配置 |
2)Struts2的配置檔案struts.xml
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 宣告常量 -->
<constant name="struts.i18n.encoding" value="UTF-8"></constant>
<!-- 可以幫助我們解決post請求亂碼問題 -->
<!-- <constant name="struts.action.extension" value="action"></constant> -->
<!-- 指定訪問strtsu2框架路徑的副檔名 -->
<constant name="struts.devMode" value="true"></constant>
<!-- 配置這項後,它會提供更加詳細報錯資訊,以及在struts.xml檔案修改後不在需要重啟伺服器 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
<!-- 開啟動態方法呼叫 -->
<package name="default" namespace="/" extends="struts-default">
<global-results>
<result name="" type=""></result>
</global-results>
<action name="struts2" class="cn.itheima.web.action.Struts2Action"></action>
<action name="login" class="cn.itheima.web.action.LoginAction" method="login">
<result name="success" type="redirect">/success.jsp</result>
<result name="failer">/failer.jsp</result>
</action>
<action name="login1" class="cn.itheima.web.action.LoginAction1" method="login">
<result name="success" type="redirect">/success.jsp</result>
<result name="failer">/failer.jsp</result>
</action>
<action name="login2" class="cn.itheima.web.action.LoginAction2" method="login">
<result name="success" type="redirect">/success.jsp</result>
<result name="failer">/failer.jsp</result>
</action>
<action name="test">
<result>/success.jsp</result>
</action>
<action name="bookadd" class="cn.itheima.web.action.BookAction" method="addBook"></action>
<action name="bookupdate" class="cn.itheima.web.action.BookAction" method="updateBook"></action>
<action name="bookdel" class="cn.itheima.web.action.BookAction" method="delBook"></action>
<action name="bookfind" class="cn.itheima.web.action.BookAction" method="findBook"></action>
<!-- 以上操作可以簡化,使用*通配置來操作 -->
<action name="*_*" class="cn.itheima.web.action.{1}Action" method="{2}"></action>
</package>
</struts>
package配置
name屬性 作用:定義一個包的名稱,它必須唯一。 namespace屬性 作用:主要是與action標籤的name屬性聯合使用來確定一個action的訪問路徑 extends屬性 作用:指定繼承自哪個包。一般值是strtus-default,strtus-default包是在strtus-default.xml檔案中宣告的。 abstruct屬性 它代表當前包是一個抽象的,主要是用於被繼承 |
action配置
name屬性 作用:主要是與package的namespace聯合使用來確定一個action的訪問路徑 class屬性 作用:用於指示當前的action類 method屬性 作用:用於指示當前的action類中的哪個方法執行
關於action配置中的class與method的預設值以及result中的name與type 預設值問題 原因:strtus-default.xml檔案中配置<default-class-ref class="com.opensymphony.xwork2.ActionSupport" /> 它的作用就是當一個請求來時,如果查詢不到指定的class及對應的method就會執行ActionSupport類中的execute方法。在這個類的execute方法中預設返回的是”success”,也就是說,result的name屬性預設值是success,預設的跳轉方式是請求轉發dispatcher。 |
result配置:它主要是用於指示結果檢視
name屬性 作用是與action類的method方法的返回值進行匹配,來確定跳轉路徑 type屬性 作用是用於指定跳轉方式 |
3)常量配置
default.properties檔案中定義了struts2框架常用常量 .我們需要自己定義常量的方法:
可以在src下建立一個strtus.properties配置檔案 可以在web.xml檔案中配置 可以直接在strtus.xml檔案中定義常量 (推薦) 注意:後載入的配置檔案中的常量會將先載入的常量覆蓋 |
三、Action的幾種寫法
1)POJO類
2)繼承ActionSupport類(推薦使用)
3)實現Action介面
四、Struts2的請求路徑攔截原理
1)配置檔案中配置
2)註解的方式
五、Struts2的請求引數的獲取
1)獲取javaweb中的引數request response session
ServletActionContext獲取的方法
通過攔截器的方式來獲取
Struts2框架在執行時,請求會被StrutsPrepareAndExecuteFilter攔截,會根據請求去strtus.xml檔案中查詢到匹配的action,在action執行前,會走一些interceptor,預設執行的攔截器是struts-default.xml檔案中定義的。在預設執行的攔截器中有一個servletConfig攔截器。 檢視一下ServletConfigInterceptor原始碼,以下是部分原始碼 ServletRequestAware, 實現這個介面可以獲取HttpServletRequest ServletResponseAware ,實現這個介面可以獲取HttpServletResponse ServletContextAware 實現這個介面可以獲取ServletContext |
Struts2的攔截器
四、Struts2的安全漏洞問題
相關文章
- JAVAEE框架學習——Struts2——Action API 使用Java框架API
- 【struts2】
- struts2總結(三)--官網下載struts2的jar包JAR
- STRUTS2的getClassLoader漏洞利用
- Struts2的資料封裝封裝
- 初識Struts2
- Struts2配置-1
- Struts框架_9 Struts2的驗證框架
- Struts2【與Spring整合】Spring
- Struts2配置後ClassNotFoundExceptionException
- Struts2的檔案上傳下載
- Struts2工作原理(圖解)圖解
- struts2知識點整理
- struts2資料校驗
- 在 IDEA 中配置 Struts2Idea
- Struts2 action前的資料預處理
- struts2的工作原理與檔案結構
- Java之struts2框架學習Java框架
- Struts2和Oracle資料庫互動的小DemoOracle資料庫
- Struts2防止表單重複提交
- Struts2 原始碼分析-----工作原理分析原始碼
- struts2 國際化(本地化)
- Struts2框架快速入門筆記框架筆記
- Debug Struts2 S2-021的一點心得體會
- 在Struts2中寫介面,返回json格式JSON
- (三)struts2進階之實現Action
- Struts2教程之二Action建立方式
- Struts2教程之三Action訪問方式
- Struts2在web.xml中配置為“/*”和“*.action,*.jsp”的差別WebXMLJS
- 007--在Struts2的Action中訪問Servlet API三種形式ServletAPI
- Struts2中Action動態呼叫DMI出現的一個問題
- struts2最近幾個漏洞分析&穩定利用payload
- 05. struts2中為Action屬性注入值
- Struts2入門這一篇就夠了
- Struts2 原始碼分析-----攔截器原始碼解析 --- ParametersInterceptor原始碼
- Struts2學習筆記(一)初識Strut2筆記
- Struts2所有依賴關係(struts-2.5.14.1)
- 在struts2中實現去掉字尾及url重寫