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(過濾器)
伺服器啟動的時候就會載入web.xml檔案,執行init()方法<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>
常用常量的修改
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的操作