學習sturts2無非就是學習各種配置而已。最重要的就是struts.xml配置文件。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"http://struts.apache.org/dtds/struts-2.0.dtd">
<struts>
<include file="login.xml" /><!--將其他的xml文件容納進來-->
<constant name="struts.devMode" value="true" />
<!-- 開發模式,更改配置文件無需重啟服務器。 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- 字符集,頁面傳遞是中文需要使用此配置。解決中文問題。 -->
<constant name="struts.custom.i18n.resources" value="i18n" />
<!-- 國際化 -->
<constant name="struts.i18n.reload" value="false" />
<!--國際化是否生效-->
<constant name="struts.convention.classes.reload" value="false" />
<!-- 配置Convention插件自動重加載映射-->
<constant name="struts.convention.action.packages" value="net.shopxx.action" />
<!--
這個屬性用于約定Action 類的根包(這個包是Java 類的包,而不是Struts.xml中配置的<package>節點)
在一個項目中有這樣一系列的Java 包,那么當指定convention的這個屬性,Struts
框架就會在你訪問特定的URL時會自動的找到所要的請求的實現類。 當你在瀏覽器中輸入:
http://localhost:8080/HelloWorld.action
,Struts會自動的找到并執行com.ZTest.web.action.HelloWorldAction.java類。
當你在瀏覽器中輸入: http://localhost:8080/test/aaa.action
,Struts會自動的找到并執行com.ZTest.web.action.test.aaaAction.java類。
-->
<constant name="struts.serve.static.browserCache" value="false" />
<!--是否struts過濾器中提供的靜態內容應該被瀏覽器緩存在頭部屬性中-->
<constant name="struts.objectFactory" value="spring" />
<!-- com.opensymphony.xwork2.ObjectFactory接口 -->
<constant name="struts.multipart.maxSize" value="-1" />
<!-- multipart請求信息的最大尺寸(文件上傳用) -->
<constant name="struts.ui.theme" value="simple" />
<!-- 默認的UI template主題 -->
<constant name="struts.action.extension" value="action" />
<!--
用URL擴展名來確定是否這個請求是被用作Struts action,其實也就是設置 action的后綴,例如login.do的'do'字
-->
<constant name="struts.convention.result.path" value="/WEB-INF/template/" />
<!--
設置Convention插件定位視圖資源的根路徑。默認值為/WEB-INF/content
這個屬性用于約定Action類執行完畢以后返回資源的結果路徑 當你在瀏覽器中輸入:xxx/HelloWorld.aciton
,Struts會自動的找到并執行com.ZTest.web.action.HelloWorldAction.java類,并放回到WEB-INF/template/HelloWorld.jsp。
-->
<constant name="struts.convention.action.name.separator"
value="_" />
<!--
這個屬性是約定當一個Java 類 有多個單詞組合成的時候,映射的URL地址的時候訪問的格式的分隔符。
如果不指定這個屬性,Struts默認的分隔符是 “-”,例如 HelloWorldAction 則訪問的URL
是Hello-World.action 如果指定這個屬性是上面的格式,則是沒有分隔符,會按照Java 類名直接映射,例如
HelloWorldAction 則訪問的URL 是HelloWorld.action
-->
<constant name="struts.convention.action.name.lowercase"
value="false" />
<!--
是否將Action類轉換成小寫當一個類的類名是多個單詞組合起來的時候,例如 HelloWolrdAction,如果指定了這個屬性,
則訪問的地址必須是: HelloWorld.action ,如果不是指定這個屬性則是: helloworld.action
-->
<constant name="struts.convention.default.parent.package"
value="default" />
<!--
這個屬性指定的是Strtus.xml中配置的 <package>節點的父節點。
-->
<constant name="struts.freemarker.manager.classname" value="net.shopxx.common.FreemarkerManager" />
<!--
屬性指定Struts 2使用的FreeMarker管理器。該屬性的默認值是
org.apache.struts2.views.freemarker.FreemarkerManager,這是Struts
2內建的FreeMarker管理器。
struts.freemarker.wrapper.altMap該屬性只支持true和false兩個屬性值,默認值是true。通常無需修改該屬性值。
-->
<!--訪問http://localhost:8080/工程名/hello_struts(既可以訪問根目錄下得Hello.jsp)-->
<package name="front" extends="struts-default" namespace="/">
<default-action-ref name="errorPage404Action" /><!-- 默認的action -->
<action name="errorPage404Action">
<result type="redirect">/html/error_page_404.html</result>
</action>
<global-results><!-- 全局的result,只使用與此packeage中的所有action -->
<result name="mainpage">/main.jsp</result>
</global-results>
<action name="index" class="com.bjsxt.struts2.front.action.IndexAction1">
<!--
配置了class程序會訪問自己的action中的execute方法返回String,如return success
-->
<result name="success">/ActionIntroduction.jsp</result>
</action>
</package>
<package name="user" extends="struts-default" namespace="/user">
<action name="userAdd" class="com.bjsxt.struts2.user.action.UserAction"
method="add"><!--加入了method="add"所以會訪問UserAction中的add方法(這種方法不建議使用,忘了吧?。?/span>-->
<result>/user_add_success.jsp</result>
<!--
頁面調用<a href="<%=context
%>/user/userAdd">添加用戶</a>【這樣會訪問】namespace="/user",action名稱為name="userAdd"的action中add方法
-->
</action>
<action name="user" class="com.bjsxt.struts2.user.action.UserAction">
<!--
建議使用的方法在這里,這樣配置需要使用的調用發放是(動態調用DMI)
-->
<result>/user_add_success.jsp</result>
<!--
頁面調用<a href="<%=context
%>/user/user!add">添加用戶</a>【這樣會訪問】namespace="/user",action名稱為name="user"的action中add方法
-->
<!--用于一個action中多個方法對應返回同一個頁面,返回不同頁面需要配置多個result-->
</action>
</package>
<package name="actions" extends="struts-default" namespace="/actions">
<action name="Student*" class="com.bjsxt.struts2.action.StudentAction"
method="{1}">
<result>/Student{1}_success.jsp</result>
<!--
通配符的使用;jsp中有兩個訪問連接 <a href="<%=context
%>/actions/Studentadd">添加學生</a> <a href="<%=context
%>/actions/Studentdelete">刪除學生</a>
*和{1}就是填充add和delete后所訪問action中的方法與jsp 【action中一定會有兩個方法一個add一個delete】
-->
<!--用于一個action中多個方法,返回不同頁面。只需配置一個帶有通配符的result【約定優于配置】-->
</action>
<action name="*_*" class="com.bjsxt.struts2.action.{1}Action"
method="{2}"><!--第一個*對應{1};第二個*對應{2}-->
<result>/{1}_{2}_success.jsp</result>
<!-- {0}_success.jsp -->
</action>
<!--用于多個action中多個方法,返回不同頁面。只需配置一個帶有通配符的result【約定優于配置】-->
</package>
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index"></default-action-ref>
<!--默認的action配置-->
<action name="index">
<result>/default.jsp</result>
</action>
</package>
</struts>
如果使用struts2的convertion plugin約束,可以完全不用配置action