//设置所执行动作的包的位置 <package (必须)name="包名,其他包要引用必须使用这个名字" (非必须但是通常都要写)extends="当前包继承哪个包,如果继承了某个包就可以使用其中所有配置,通常情况下继承struts-default,struts-default这个包在struts-default.xml文件中定义" (非必须) namespace="命名空间 默认为"/",若定义了命名空间要想访问包里的action,必须加上命名空间namespace 定义的值 " (非必须) abstract="是否为抽象形态(即之后是否有可执行内容,默认为false)" (非必须) strict-method-invocation=" 它被称为严格方法调用 又名SMI
SMI被禁用 - 任何通配符将被替换为默认的RegEx,即:<action name="Person*" method="perform*">将被翻译成allowedMethod = "regex:perform([A-Za-z0-9_$]*)".
启用SMI - 不会发生通配符替换,必须严格定义通过注释或<allowed-method/>标记可以访问哪些方法。也就是说你必须加入这个配置才可以,
最好全局设置:<global-allowed-methods>regex:.*</global-allowed-methods>
(非必须) externalReferenceResolver "用来整合第三方类库,如Spring"> //设置所执行动作所在的路径 <action (必须)name="请求名 对应一个struts2的请求的名字 (或对应一个servletPath去掉/和扩展名),不包含扩展名" (非必须)class="类的路径 默认值为com.opensymphony.xwork2.ActionSupport, 对应的action类的相对文件路径" (非必须)method="方法名 默认值为execute, 对应action类中的方法" (非必须)converter > // result结果,与定义的action类中的方法的返回值对应。 // 是action中的子节点,一个action中可以定义多个result标签 <result (非必须)name="返回值 标识一个result,和action中的方法的返回值对应, 默认值为success" (非必须)type="属性名 标识结果的类型。默认值为dispatcher(转发到结果)" > //result中是一个文件的相对地址,可以是任意文件类型,一般是jsp文件 <param name="type属性对应的各种参数"> 参数/动作名等 </param> </result> </action> </package>
<===★☆★☆★☆★☆★☆★☆★☆ 华 丽 的 分 割 线 ☆★☆★☆★☆★☆★☆★☆★===>通配符的应用范例:
<action name="HelloWorld_create" class="cn.javass.action.action.HelloWorldAction" method="create"> <result name="Welcome">/s2impl/welcome.jsp</result> </action> <action name="*_*" class="cn.javass.action.action.{1}Action" method="{2}"> <result name="Welcome">/s2impl/welcome.jsp</result> </action>这时候,如果访问“/helloworld/HelloWorld_create.action”,Struts2首先会查找是否有精确匹配的<action>元素,这时候无论以上<action>元素以什么顺序出现,Struts2肯定会先找到并使用精确匹配的<action>元素。但是,如果没有精确匹配的<action>元素,则Struts2会找到第一个匹配的使用通配符的<action>元素来使用。
通配符对于那些简单的CRUD的工程或软件原型来说,只要Action的包名、Action的类名、对应的方法名写的有规律的应用,能大大简化配置的工作。但是由此会产生一个系统漏洞, 所以在Struts2 2.5之后的版本 在package中增加了一个strict-method-invocation属性来增加安全性.
<===★☆★☆★☆★☆★☆★☆★☆ 华 丽 的 分 割 线 ☆★☆★☆★☆★☆★☆★☆★===>result 标签中的 name 属性:
NONE 动作方法执行后不转向任何视图.或者在动作方法后 return null;
SUCCESS 自定义动作方法执行结果正确;
ERROR 自定义动作方法执行结果错误;
INPUT 验证,转换失败,转入输入页面;
LOGIN 检测,用户是否登录,未登录转向次视图;
result 标签中的 type 属性:
<result-types>
<result-type name="chain" class="com.opensymphony.xwork2.ActionChainResult"/>
<result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>
<result-type name="freemarker" class="org.apache.struts2.views.freemarker.FreemarkerResult"/>
<result-type name="httpheader" class="org.apache.struts2.dispatcher.HttpHeaderResult"/>
<result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>
<result-type name="redirectAction" class="org.apache.struts2.dispatcher.ServletActionRedirectResult"/>
<result-type name="stream" class="org.apache.struts2.dispatcher.StreamResult"/>
<result-type name="velocity" class="org.apache.struts2.dispatcher.VelocityResult"/>
<result-type name="xslt" class="org.apache.struts2.views.xslt.XSLTResult"/>
<result-type name="plainText" class="org.apache.struts2.dispatcher.PlainTextResult" />
</result-types>chain:用来处理Action链,被跳转的action中仍能获取上个页面的值,如request信息.
dispatcher:用来转向页面,通常处理JSP.
freemaker:处理FreeMarker模板.
httpheader:控制特殊HTTP行为的结果类型.
redirect:重定向到一个URL,被跳转的页面中丢失传递的信息,如request.
redirectAction:重定向到一个Action,跳转的页面中丢失传递的信息.
stream:向浏览器发送InputSream对象,通常用来处理文件下载,还可用于返回AJAX数据.
velocity:处理Velocity模板.
xslt:处理XML/XLST模板.
plainText:显示原始文件内容,例如文件源代码.
重点说一下redirect和redirectAction的区别:(1)使用redirect需要后缀名,使用redirect-action可以不需要后缀名.
(2)type="redirect"的值可以转到其它命名空间下的action,而redirect-action只能转到同一命名空下的action,因此它可以省略.do的后缀直接写action的名称.