1. 程式人生 > >struts2初學的相關配置(struts.xml和web.xml)

struts2初學的相關配置(struts.xml和web.xml)

Struts2框架

概述:1、Struts2框架應用於Java EE三層結構中的WEB層(檢視層);

            2、Struts2框架在Struts1和webwork基礎上發展的全新框架;

            3、WEB層中的其他框架(Spring MVC);

開發流程

        1、匯入相關的jar包,可以從解壓縮資料夾的apps目錄下的例子中lib目錄下複製過來;

        2、建立action,和訪問servlet會執行service()方法一樣,訪問action預設都會執行execute()方法;

        3、配置action類的訪問路徑

                (1)建立struts2核心配置檔案(名稱和位置都需固定:名稱struts.xml;位置:/src目錄下);

                (2)引入約束,同樣可以從例子裡找到,約束名稱struts-2.3.dtd;

                (3)配置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>
	<!--constant 是對常量的配置
		name和value分別是常量名和值
	 -->
	
	<package name="hellodemo" extends="struts-default" namespace="/">
	<!--package相當於程式碼包,區分不同的action,必須先寫package標籤才能配置action標籤 
		name 屬性:該屬性值與功能本身沒有關係,多個package名稱不能相同
		extends屬性:屬性值是固定的struts-default,有該屬性之後,package中的action才能具有action的功能
		namespace屬性:該屬性值和action標籤中的name值,共同構成了action的訪問路徑
	-->
		<action name="hello" class="cn.itcast.action.HelloAction" >
		<!--action 配置訪問路徑
			name屬性:package標籤中的namespace和該name屬性值,共同構成了action的訪問路徑
			class屬性:該屬性值為該action的全路徑
			method屬性:如在action裡面預設執行execute()方法,但是在action裡還寫了其他的方法,
					為了執行多個方法,使用method屬性進行配置	
		  -->
			<result name="ok" type="">/hello.jsp</result>
			<!-- result 根據action方法的返回值,配置到不同的路徑裡面
				name屬性:是action方法的返回值,型別必須一致
				type屬性:配置採用何種方法到路徑中(做轉發還是重定向),預設值為轉發
				標籤中間填的是相對於該apps根的路徑值
			-->	
		</action>
	</package>
	
<!-- 	<!-- 11111以下的是多個方法使用多個action標籤來進行不同method方法的配置 程式碼重複比較多 -->
	<package name="methoddemo" extends="struts-default" namespace="/">
		<action name="addAction" class="cn.itcast.method.BookAction" method="add"></action>
		<action name="updateAction" class="cn.itcast.method.BookAction" method="update"></action>
	</package> -->
	
	<!-- 22222以下使用萬用字元的方法實現訪問不同method的操作 -->
	<package name="methoddemo" extends="struts-default" namespace="/">
		<!-- name屬性值中寫*星號
			(1)執行action裡面的add方法,訪問book_add,使用book_*匹配到,相當於method的值變成add
			(2)執行action裡面的update方法,訪問book_update,使用book_*匹配到,相當於method的值變成update
			上面的兩個路徑,使用book_*  都可以匹配到,為了將*號值取出,method屬性值做{1}
		 -->
		<action name="book_*" class="cn.itcast.method.BookAction" method="{1}"></action>	
	</package>
	
	<!-- 33333使用動態訪問實現訪問不同method的操作 -->
<!--	首先開啟一個DynamicMethodInvocation常量,然後再寫。。。。一般不用
			 
	<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
	
	<package name="methoddemo" extends="struts-default" namespace="/">
		<a。。。。。。。。。。。。。。。。。。。></a>
	</package> -->
	
	<!--  <include file="cn/itcast/*.xml"></include>  -->
	<!-- 將相關的配置檔案引入到核心配置檔案中,分模組開發是可以使用 -->

</struts>

        4、配置web.xml檔案中的filter(過濾器)

    <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>
伺服器啟動的時候就會載入web.xml檔案,執行init()方法

常用常量的修改

        struts.i18n.encoding=utf-8(最常用的)

        注意:1、表單提交資料到action裡,在action可以獲得表單提取資料;

                  2、表單提交資料有中文,會產生亂碼的問題,post提交直接設編碼,get提交做編碼轉換;

                  3、如是在action中提取的表單是通過post方式提交的,中文亂碼問題struts會直接幫助解決;

分模組開發:

          開發組中每個人單獨開發寫的配置檔案,可不用寫著核心配置檔案struts.xml中,可以單獨寫配置檔案,之後在struts.xml檔案中使用<include>標籤引入即可;

三種action編寫方式

            (1)建立普通的類,不繼承任何父類,不實現任何介面;

            (2)建立類,實現Action介面(implements Action);

            (3)建立類,繼承ActionSupport類(extends ActionSupport)(該類本身也實現了Action介面)。

訪問action中的方法method()三種方式(詳細可見struts.xml的程式碼)

            (1)多個方法使用多個action標籤來進行不同method方法的配置 程式碼重複比較多;

            (2)使用萬用字元的方法實現訪問不同method的操作;

            (3)使用動態訪問實現訪問不同method的操作