struts2的动作类的创建和配置详解(核心)

一、创建动作类

1.使用普通方式javaBean作为Action动作类,不需要继承任何父类,也不需要实现接口。

(1)方法一定是public公用的

(2)返回值一定是字符串,用来决定跳转到哪个视图

(3)不需要参数。

(4)方法名自定义,如果不自定义的话,有默认的方法名叫execute

package action;

public class HelloWorld {
    
    public String Hello() {
        return "success";
    }
    
    /*
    * 当请求没有绑定方法的时候自动找execute默认的方法
    * */
    public String execute() {
        System.out.println("我TM要搞IT");
        return "success";
    }
}

2.创建动作类实现接口com.opensymphony.xwork2.Action

Action接口中提供一些常量

package action;

import com.opensymphony.xwork2.Action;

public class HelloWorld02 implements Action {

    /*
    * 实现Action中的默认方法
    * */
    @Override
    public String execute() throws Exception {
        System.out.println("IT分杯羹");
        return "ok";
    }
}

 

3.创建动作类继承父类com.opensymphony.xwork2.ActionSupport(推荐使用)

package action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorld03 extends ActionSupport {

    public String helloAs() {
        return super.SUCCESS;
    }

}

二、配置动作类:

<package name="hello" extends="struts-default" namespace="/person">
    <!--
        name:必须指定在一个包中唯一
        class:当前action所在的动作类
        method:当前action要访问的方法
    -->
    <action name="as" class="action.HelloWorld03" method="helloAs">
        <result name="success">
            /index.jsp
        </result>
    </action>
</package>

三、Action动作类的生命周期

创建:Action动作类每次请求的时候都会创建一个实例对象。

销毁:当前Action动作类的请求响应完之后,就消失了。

跟javaweb中的HttpServletRequest的生命周期是一样的,struts2是多例的,线程安全的。

四、action动作类的访问

1.通配符

原则:约定优于配置

在action中每一个方法有一定的规则,都已User结尾

 

<action name="*" class="action.HelloWorld04" method="{1}helloLife">
    <result name="success">
        /{1}index.jsp
    </result>
</action>

注意:以下这种,在同一个package中,只能有一个这种通配符

<action name="*_*" class="action.HelloWorld04" method="{1}_{2}">
    <result name="success">/{1}{2}.jsp</result>
</action>

五、动态方法调用struts2的动作类

 

       首先开启动态方法调用的开关

package action;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorld04 extends ActionSupport {

    /*
    * 默认构造器
    * */
    public HelloWorld04() {
        System.out.println("开始工作");
    }

    public String helloLife() {
        System.out.println("我正在工作");
        return super.SUCCESS;
    }

}

<struts>
    <!--  启用动态方法  -->
    <constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>
    <package name="hello" extends="struts-default" namespace="/person">
        <action name="hello5" class="action.HelloWorld04" >
            <result name="success" >/index.jsp</result>
        </action>
    </package>
</struts>

这是我们的action的动作类不需要在指定方法的method属性了,而在url上指定语法: “!方法名[.后缀名]”

例: http://localhost:8080/struts2/person/hello5!HelloWorld04.do

六、结果视图的配置

<result name="ok" type="">/index.jsp</result>

result:要返回的视图

name:action动作类要返回的值,如果返回的值匹配上了当前的name的值,就跳转到相应的页面

type:跳转的方式:

           dispatcher:请求转发,相当于javaweb中的forward,特点:地址栏不变,在我们不指定type的时候默认是这个

           redirect:页面重定向,地址栏变化

           chain:请求转发到action动作类,地址栏不发生变化

<package name="hello" extends="struts-default" namespace="/person">
    <action name="hello5" class="action.HelloWorld04" >
        <result name="success" type="chain">hello6.do</result>
    </action>
    
    <action name="hello6" class="action.HelloWorld04" >
        <result name="success" >/index.jsp</result>
    </action>
</package>

            redirectAction:重定向到一个action的动作类,地址栏变化

            同包内的重定向

<package name="hello" extends="struts-default" namespace="/person">
    <action name="hello5" class="action.HelloWorld04" >
        <result name="success" type="redirectAction">hello6.do</result>
    </action>
    
    <action name="hello6" class="action.HelloWorld04" >
        <result name="success" >/index.jsp</result>
    </action>
</package>

 

            不同包内的重定向,result需要通过param来指定namespace和actionname

<package name="hello" extends="struts-default" namespace="/person">
    <action name="hello5" class="action.HelloWorld04" >
        <!-- <result name="success" type="chain">hello6.do</result>-->

        <!-- 指定命名空间-->
        <result name="success" type="chain">
            <param name="namespace">/person2</param>
            <!-- 重定向action的name-->
            <param name="actionName">hello6</param>
            </result>
    </action>

</package>
<package name="hello2-2" extends="struts-default" namespace="/person2">
    <action name="hello6" class="action.HelloWorld04" >
        <result name="success" >/index.jsp</result>
    </action>
</package>

            stream:文件的上传下载

七、局部结果视图和全局的结果视图

       在一个action中配置的result是局部的结果视图,外部的action是不能使用这个result

       包内的全局结果视图配置对于每一个action动作类都有效

<package name="hello2-2" extends="struts-default" namespace="/person2">
    <!--包级别的结果视图-->
    <global-results>
        <result name="error">/error.jsp</result>
    </global-results>

    <action name="hello6" class="action.HelloWorld04" >
        <result name="success" >/index.jsp</result>
    </action>
</package>

            在整个系统中的全局的结果视图(通过继承的方式实现)

 

<!-- 定义一个公用的包,继承struts-default-->
<package name="basePackage" extends="struts-default" abstract="true">
    <global-results>
        <result name="error">/error.jsp</result>
    </global-results>
</package>

<package name="hello2-2" extends="basePackage" namespace="/person2">
    <action name="hello6" class="action.HelloWorld04" >
        <result name="success" >/index.jsp</result>
    </action>
</package>

 

 

 

 

 

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值