Struts2 3) package和action

//设置所执行动作的包的位置
<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的名称.









  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值