1. Struts2配置項細節 1.1.導入外部xml文件 在struts.xml文件中使用<include>標簽,file屬性上引入外部的.xml文件。 example.xml配置中又分隔了另外一個action,package一般不同。具體如下: 這樣做的目的是為了拆分struts.xml中過多的 ...
1. Struts2配置項細節
1.1.導入外部xml文件
在struts.xml文件中使用<include>標簽,file屬性上引入外部的.xml文件。
example.xml配置中又分隔了另外一個action,package一般不同。具體如下:
這樣做的目的是為了拆分struts.xml中過多的action及雜亂的package包。
1.2.package包的配置
<?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> <!--package:包,包的作用是進行模塊化管理; name:代表包名(必需寫,且唯一),在整個配置中(包含其它的xml)名字是唯一的; namespace:代表包層級的路徑, 外部訪問路徑:http://ip地址<:埠>/<上下文路徑>/namespace/action的名稱 extends(繼承):它繼承自一個父包,這個父包的名字叫做struts-default abstract:代表當前包是抽象的包(就是用來讓別人繼承的,在struts-default.xml中就有這種包--> <package name="default" namespace="/extra" extends="struts-default"> <action name="index" class="cn.yif.action.UserAction" method="execute"> <result name="success" type="dispatcher"> /success.jsp </result> </action> </package> </struts>
具體訪問請求如下:
註意:
① 同一個包下麵的action名稱是不能重覆的,不同包下的action可以重覆;
② 包的名稱不能夠重覆;
③ 包的命名空間不能夠重覆。
1.3.package包的查找過程
對應到struts.xml配置中,訪問路徑主要是在packageNameSpace和actionName上,如下以:http://localhost/system/abc/hello的訪問為例,這裡會把url分為兩部分,
packageNameSpace:/system/abc,actionName:/hello。
這裡首先會通過packageNameSpace在配置文件中查找對應的<package>標簽,如果沒有找到那麼就讓路徑退一級,即/system進行查找,如果找到,那麼就在該包中查找對應的<action>,不管有沒有找到對應的<action>都不會再次進行查找。
最後找到”/”,這裡也是一個包,表示根包,會在根包中繼續進行查找。
註意:以上流程,如果所有的包中都沒有找到對應<action>,那麼都會在預設的包中<package namespace="">查找;
查詢過程分析,舉例說明如下:
現在我在瀏覽器上的路徑是:/path1/path2/path3/hello
我們需要把這個看做兩個部分:
Package路徑部分: /path1/path2/path3
Action部分:hello
查詢的時候先找路徑:
/path1/path2/path3 沒找到會找 /path1/path2
/path1/path2 沒找到會找 /path1
/path1 沒找到會找到根包 /
註意:路徑部分找不到時才會到上層路徑中找,如果找到了就不會再向上查找了;找到路徑後找Action;Action找到直接使用,找不到會嘗試找預設default包中的預設Action(在default.xml文件中)。
namespace="/":代表一個根包;
namespace="":代表一個預設包;
1.4.Struts2配置文件優先順序
Struts2框架按照如下順序載入struts2配置
default.properties 該文件保存在 struts2-core-2.3.7.jar 中 org.apache.struts2包裡面
我們配置中很多常量都在這裡面
struts-default.xml 該文件保存在 struts2-core-2.3.7.jar
我們學習的階段,可以來這裡查看很多配置的方式
struts-plugin.xml 該文件保存在struts-Xxx-2.3.7.jar 這裡面是一些插件
上面三個配置文件,是Struts2預設的配置文件,我們不能夠對修改它
struts.xml 該文件是web應用預設的struts配置文件
struts.properties 該文件是Struts的預設配置文件(一般不寫在這裡面)
web.xml 該文件是Web應用的配置文件(一般不用)
如果多個文件配置了同一個struts2 常量,則後一個文件中配置的常量值會覆蓋前面文件配置的常量值
上述內容前面三種jar包,不允許修改,後面三種可以自己進行修改。
配置文件的優先順序:都是從上往下優先順序依次遞增,越往下優先順序越高。
1.5.Struts2常量配置
在default.properties中可以找到我們的常量配置。
Struts2.xml文件中常用的常量配置:
<!--開發模式;修改配置文件不需要重啟伺服器--> <!--指的struts.xml,其它的配置文件修改依然還是需要重啟--> <!--自動重新載入配置文件,不一定會絕對成功。--> <!--struts.devMode = true;--> <constant name="struts.devMode" value="true" /> <!--系統使用編碼--> <constant name="struts.i18n.encoding" value="UTF-8" /> <!--上傳文件大小(byte)--> <constant name="struts.multipart.maxSize" value="2097152" /> <!--預設的尾碼名--> <constant name="struts.action.extension" value="action,do,," />
1.6.Struts2預設配置
① <action>中的class預設class是繼承於struts-default包中的<default-class-ref class="com.opensymphony.xwork2.ActionSupport" />,實際中不寫預設使用該配置;
② <action>中的method預設配置是execute;
③ <result>標簽中的name預設配置是success;
④ <result>標簽中的type預設配置是dispather;
<package name="default" namespace="/" extends="struts-default"> <!-- action中哪些配置是預設配置,可以不寫? method是可以不寫的,預設是execute class是可以不寫的,預設的是找的是(這個我們自己是可以改的) <default-class-ref class="com.opensymphony.xwork2.ActionSupport"/>在struts-default 中可以找到 name可以不寫嘛?這個是必需的 result中哪些配置是預設配置,可以不寫? name:可以不寫,預設的是success type:可以不寫,預設的類型是dispatcher(我們也可以改的)--> <action name="const"> <result>/success.jsp</result> </action> </package>