sturst2的原理及环境搭建
一、struts原理
一個請求在Struts2框架中的處理大概分為以下幾個步驟
1 客戶端初始化一個指向Servlet容器(例如Tomcat)的請求
2 這個請求經過一系列的過濾器(Filter)(這些過濾器中有一個叫做ActionContextCleanUp的可選過濾器,這個過濾器對于Struts2和其他框架的集成很有幫助,例如:SiteMesh Plugin)
3 接著FilterDispatcher被調用,FilterDispatcher詢問ActionMapper來決定這個請是否需要調用某個Action
4 如果ActionMapper決定需要調用某個Action,FilterDispatcher把請求的處理交給ActionProxy
5 ActionProxy通過Configuration Manager詢問框架的配置文件,找到需要調用的Action類
6 ActionProxy創建一個ActionInvocation的實例。
7 ActionInvocation實例使用命名模式來調用,在調用Action的過程前后,涉及到相關攔截器(Intercepter)的調用。
8 一旦Action執行完畢,ActionInvocation負責根據struts.xml中的配置找到對應的返回結果。返回結果通常是(但不總是,也可 能是另外的一個Action鏈)一個需要被表示的JSP或者
FreeMarker的模版。在表示的過程中可以使用Struts2 框架中繼承的標簽。在這個過程中需要涉及到ActionMapper
在上述過程中所有的對象(Action,Results,Interceptors,等)都是通過ObjectFactory來創建的。
二、Struts2優缺點:
1.對框架API和ServletAPI的依賴減少,可擴展性提高。
1.Struts2基于MVC架構,框架結構清晰,開發流程一目了然,開發人員可以很好的掌控開發的過程
2.使用OGNL進行參數傳遞,大大簡化了開發人員在獲取這些數據時的代碼量。
3.強大的攔截器,實現的的一Web項目中,就是使用Struts2的攔截器來完成了系統中的權限驗證功能。
4.Struts2的Action都是簡單的POJO,這樣可以方便的對Struts2的Action編寫測試用例,大大方便了Java Web項目的測試
5.易于擴展的插件機制
6.模塊化 Struts2已經把模塊化作為了體系架構中的基本思想,可以通過三種方法來將應用程序模塊化: 將配置信息拆分成多個文件 把自包含的應用模塊創建為插件
創建新的框架特性,即將與特定應用無關的新功能組織成插件,以添加到多個應用中去
7.全局結果與聲明式異常
三、搭建Struts2的開發環境
1、找到所需的jar包:發行包的lib目錄中(不同版本需要的最小jar包是不同的,參見不同版本的文檔。2.1.7)
struts2-core.jar 核心jar包
xwork-2.jar xwork核心jar包
ognl.jar ognl表達式
freemarker.jar FreeMarker模板
commons-logging.jar 日志
commons-fileupload.jar 文件上傳
commons-io.jar 文件上傳依賴的包
2、在應用的WEB-INF/classes目錄下建立一個名稱為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>
</struts>
3、配置核心控制器,就是一個過濾器
<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>
4、如果TOmcat啟動成功,沒有報錯,證明環境搭建成功!
四、開發第一個Struts2案例
1、編寫struts.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1.7//EN"
"http://struts.apache.org/dtds/struts-2.1.7.dtd">
<struts><!--這是Struts2配置文件的根元素-->
<package name="itcast" namespace="/test" extends="struts-default">
<!--
pageckage:方便管理動作元素
name:必須有。包的名稱,配置文件中必須保證唯一。
namespace:該包的名稱空間,一般是以"/"開頭
extends:集成的父包的名稱。struts-default名稱的包是struts2框架已經命名好的一個包。(在struts2-core.jar中有一個struts-default.xml中)
abstract:是否是抽象包。沒有任何action元素的包就是抽象包(java類)
-->
<action name="helloworld" class="cn.itcast.action.HelloWorldAction" method="sayHello">
<!--
action:代表一個請求動作
name:同包中必須唯一。動作的名稱
class:負責處理的JavaBean的類全名
method:JavaBean中的對應處理方法。(動作方法:特點是,public String 方法名(){})
-->
<result name="success">/1.jsp</result>
<!--
result:結果類型
name:動作方法返回的字符串
主體內容:View的具體地址。
-->
</action>
</package>
</struts>
2、根據配置文件,創建需要的javabean和對應的動作方法, 在動作方法中完成你的邏輯調用。
package cn.itcast.action;
public class HelloWorldAction implements Serializable {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public String sayHello(){
message = "helloworld by struts2";
return "success";
}
}
3、編寫View,顯示結果
${message}
4、訪問helloworld動作的方式:http://localhost:8080/struts2day01/test/helloworld 應用名稱/包的名稱空間/動作的名稱
默認情況下:訪問動作名helloworld,可以直接helloworld,或者helloworld.action
http://localhost:8080/struts2day01/test/a/b/c/helloworld
/test/a/b/c:名稱空間
helloworld:動作名稱
搜索順序:名稱空間
/test/a/b/c 沒有helloworld
/test/a/b 沒有helloworld
/test/a 沒有helloworld
/test 有了,調用執行
五、Struts2配置文件的詳解
1、struts.xml配置文件編寫是沒有提示的問題?
方法一:上網即可
方法二:
1、拷貝http://struts.apache.org/dtds/struts-2.1.7.dtd地址
2、Eclipse的window、preferences,搜索XML Catelog
3、點擊add按鈕
Location:dtd文件的路徑
Key Type:URI
Key:http://struts.apache.org/dtds/struts-2.1.7.dtd
2、Struts配置文件中的各種默認值。
action:
class:默認值是com.opensymphony.xwork2.ActionSupport
常量: SUCCESS success
NONE none
ERROR error
INPUT input
LOGIN login
method:默認值是public String execute(){}
實際開發中:自己編寫的動作類一般情況下繼承com.opensymphony.xwork2.ActionSupport
result:
type:轉到目的地的方式。默認值是轉發,名稱是dispatcher
(注:type的取值是定義好的,不是瞎寫的。在struts-default.xml中的package中有定義)
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
dispatcher:普通的轉發到某個頁面
chain:普通的抓發到某個動作名稱
redirect:重定向到一個頁面
redirectAction:重定向到一個動作名稱
plainText:以純文本的形式輸出JSP內容
result元素的寫法:
方式一:
<result type="chain" name="success">a2</result>
方式二:
<result type="chain" name="success">
<param name="actionName">a2</param><!--name對應的chain的處理器中的setActionName()方法-->
</result>
注意:如果要轉向的是在另外一個名稱空間的動作,那么只能使用方式二
<package name="p1" namespace="/namespace1" extends="struts-default">
<action name="a2">
<result type="dispatcher" name="success">/3.jsp</result>
</action>
</package>
<package name="p2" namespace="/namespace2" extends="struts-default">
<action name="a1">
<result type="chain" name="success">
<param name="namespace">/namespace1</param>
<param name="actionName">a2</param>
</result>
</action>
</package>
3、開發中配置文件的更改,在訪問時讓框架自動重新加載:
struts.devMode = false(default.properties)
利用strutx.xml中的constant元素來覆蓋掉default.properties默認行為
<struts>
<constant name="struts.devMode" value="true"></constant>
</struts>
4.瀏覽器訪問后綴設置:
<constant name="struts.action.extension" value="action,,do"></constant>
轉載于:https://www.cnblogs.com/zszitman/p/4510439.html
總結
以上是生活随笔為你收集整理的sturst2的原理及环境搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Nano PC ubuntu13.10
- 下一篇: 【STL源码剖析读书笔记】【第5章】关联