3.2Struts2的搭建和基礎知識

1、structs2框架的搭建(版本是2.3.28)

1.1把Struts相應的jar包拷到工程裏去。

1.2在工程中的web.xml中配上struct的過濾器。

	<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>

1.3把相應的struct.xml的配置文件拷到工程的src目錄下。

1.4創建一個Java類,這個類充當struct中的Action控制器,前提是這個類必須提供一個方法execute()。創建完後得在struct.xml中配置這個類。

package com.action;

/**
 * 類要充當Struts中的Action控制器:原則:必須提供一個方法
 * 
 * 
 * @author ctd
 *
 */
public class FirstAction {
	private String username;

	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String execute() throws Exception {
		System.out.println("FirstActin中的Execute方法被執行了。。。");
		/**
		 * 返回Result
		 */
		this.username = "admin";
		
		return "succ_2";
		//return "succ";
	}
}

<?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.enable.DynamicMethodInvocation" value="false" />
	<constant name="struts.devMode" value="true" />

	<package name="default" namespace="/" extends="struts-default">
		<action name="xx" class="com.action.FirstAction">
			<result name="succ">/succ_01.jsp</result>
			<result name="succ_2" type="freemarker">/succ_02.ftl</result>
		</action>
	</package>
</struts>

1.5最後一步就是創建相應的jsp等頁面或模板。

2:Struts框架的使用初步:
A:Apache下載struts.2.1.8.rar包。
B:解壓空工程,進入apps目錄。
C:將struts2的基本jar包拷到工程的lib目錄中。
D:配置web.xml,加載struts2的過濾器
E:加載struts的配置文件struts.xml到src目錄。
F:開發Struts中的Action類。並且類中必須有execute方法。 
exeucte是用於執行用戶請求(Request)和響應用戶(Response)的操作。
          用於接收GET與POST的請求。
G:將Action類配置到struts.xml中。
  <package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index" />
<action name="helloAction" class="com.action.HelloAction">
<result name="succ">/succ_result.jsp</result>
</action>
   </package>
H:頁面訪問Action,執行exceute方法,根據execute方法的返回值到Action到result中
進行名稱的匹配,從而請求轉發或者重定向到頁面。
3:Struts框架的流程
A:瀏覽器發送請求:/Struts2_Project_1/fistAction
B:Struts總過濾器接收接求,然後將請求的路徑與struts.xml中的action name進行匹配。
C:如果匹配,將開始執行攔截器鏈,請求中的數據將一個一個通過過濾鏈中的每一個攔截器。
D:開始執行Action中的execute方法。
F:execute方法返回result響應類型。(請求轉發,重定向頁面)
4:struts.xml的配置。
1:bean,定義類。
2:constant:struts中的常量定義。
default.properties定義了struts2中所有的常量。struts並不會去讀取。
struts.i18n.encoding=UTF-8//設置請求的編碼
struts.enable.DynamicMethodInvocation = true//是否支持動態方法的調用
struts.configuration.xml.reload = true//是否支持XML的自動加載
struts.devMode = false//開發模式
struts.ui.theme=xhtml//UI模板的設置
struts.ognl.allowStaticMethodAccess=false//是否允許在ONGL表達式中調用靜態方法
struts.action.extension=action,,//STruts請求的擴展名。
系統可以覆蓋常量。struts讀取常量的順序:後面的會覆蓋前面的配置。
A:struts-default.xml:不需要配置
B:struts.xml
<constant name="struts.i18n.encoding" value="GBK" />
C:struts.properties(這個文件需手工建立,也是放在src目錄下,一般用於WebWork工程)
struts.i18n.encoding=UTF-8
D:web.xml
<filter>
<filter-name>struts2</filter-name>
<filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
</filter-class>
<init-param>
<param-name>struts.i18n.encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
include部分:
struts中多模塊的設置,模塊化文件。
<include file="xxxx.xml"/>
公用的Action放在struts.xml中,模板的配置放到模板的配置文件中。

package
name="default"包名,隨便取,不能重複。
namespace="/" 命名空間。
extends="struts-default"包之間的繼承。就可以父包配置的選項
                默認所有的package都繼承struts-default.xml
abstract="true|false"是否抽象包。抽象包中不能定義action。

Package底下的配置:
<action 
name="" action的名稱
class="" action的類路徑
method="" 執行action中哪一個方法的名稱。
<action name="firstAction" class="com.action.FirstAction" method="delete"></action>
訪問firstAction時,執行不是FirstAction中的execute方法,而是FirstActionon類中的Delete方法。
如果沒有配置method,就是訪問execute方法。
<result name="succ" type="dispatcher">
<param name=""></param>
</result>
name:result的名稱
type:result的類型,
chain: 請求轉發到Action
dispatcher: 請求轉發到JSP面
redirect: 重定向到JSP頁面
redirectAction:重定向到Action
stream: 流方式,用於下載
param:
result-type對應的類中成員變量的名稱。
Action
private String username;
//成員變量必鬚生成SET/GET方法。
<param name=""></param> //Action中成員變量的值。

<result name="firstPage" type="redirectAction">
<param name="namespace">/space_test1</param>
<param name="actionName">test1Action</param>
</result>
interceptors:
配置攔截器和攔截器棧。
default-interceptor-ref:
配置默認棧。
當配置文件中配置了一個棧時,所以的action要使用棧的話,必須在action中加入調用
棧的代碼。
<action = >
<interceptor-ref name=""></interceptor-ref>
</action>
比較麻煩,可以配置默認的棧,這樣在package底下所有的action都用使用這個默認棧。
default-action-ref:
配置默認的action。
當鏈接到一個命名空間時,沒有指定action的路徑,那麼就會執行默認的action。
http://localhost:8080/Struts2_Project_1/test1/
<package name="test" namespace="/test1" extends="struts-default">
<default-action-ref name="index" />
<action name="index">
<result>/main.jsp</result>
</action>

<action name="testNameSpace"
class="com.action.TestNameSpaceAction">
</action>
</package>

//***********************
global-results與results的區別:
global-result:是Package下面所有的action都可以調用global中定義的result.
result:是action中私用的。
其它的package想要調用另一個package中定義的global-result時,直接將包做
繼承關係即可。

4、Struts2和Servlet的不同

線程模式:
  Servlet是單例模式並且必須是線程安全的.
  Struts2 Action對象爲每一個請求產生一個實例,因此沒有線程安全問題。

表達式語言:
  ◆Servlet整合了JSTL,因此使用JSTL EL。這種EL有基本對象圖遍歷,但是對集合和索引屬性的支持很弱。
  ◆Struts2可以使用JSTL,但是也支持一個更強大和靈活的表達式語言--"Object Graph Notation Language" (OGNL).
  綁定值到頁面(view):
  ◆ Servlet使用標準JSP機制把對象綁定到頁面中來訪問。
  ◆Struts 2 使用 "ValueStack"技術,使taglib能夠訪問值而不需要把你的頁面(view)和對象綁定起來。ValueStack策略允許通過一系列名稱相同但類型不同的屬性重用頁

          面(view)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章