Struts2(6)_Struts2 动作类(Action)

本系列博客汇总在这里:Struts2 汇总


一、创建动作类

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

  • 方法一定是 public 公用的。
  • 返回值是字符串用来决定跳转到哪个视图。
  • 不需要参数。
  • 方法名自定义,如果不自定义的话,有个默认的方法名 execute。
package com.wyx.action;

/**
 * action动作类
 */
public class HelloAction 
{
	public String hello()
	{
		System.out.println("魏宇轩");
		return "success";
	}
	/**
	 * 当请求没有绑定方法的时候,默认找execute默认方法
	 * @return
	 */
	public String execute()
	{
		System.out.println("魏宇轩是个好人!");
		return "success";
	}
}

在这里插入图片描述
在这里插入图片描述

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

Action 接口中提供了一些常量:
在这里插入图片描述

package com.wyx.action;

import com.opensymphony.xwork2.Action;

/**
 * action动作类
 */
public class HelloAction1 implements Action
{
	/**
	 * 实现 Action 中的默认方法
	 */
	@Override
	public String execute() throws Exception 
	{
		System.out.println("魏宇轩是个好人!");
		//return "success";
		return NONE;
	}
}

在这里插入图片描述
在这里插入图片描述
3、创建动作类继承父类 com.opensymphony.xwork2.Action(推荐使用)。

package com.wyx.action;

import com.opensymphony.xwork2.ActionSupport;

/**
 * action动作类
 */
public class HelloAction2 extends ActionSupport
{
	public String helloAS()
	{
		return super.SUCCESS;
	}
}

在这里插入图片描述
在这里插入图片描述

二、配置动作类

<!-- 
name:必须指定在一个包中唯一
class:当前action所在的动作类
method:当前action要访问的方法
-->
<action name="as" class="com.wyx.action.HelloAction2" method="helloAS">
	<result name="success">/success.jsp</result>
</action>

三、action 动作类的生命周期

创建与销毁

  • 创建:Action 动作类每次请求的时候都会创建一个实例对象。
  • 销毁:当前 action 动作类的请求响应完后就消失了。

跟 javaweb 中的 HttpServletRequest 的生命周期是一样的,struts2 是多例的,每次请求都会创建实例对象,是线程安全的。

package com.wyx.action;

import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionSupport;

/**
 * action动作类
 */
public class HelloAction3 extends ActionSupport
{
	/**
	 * 默认构造器
	 */
	public HelloAction3() 
	{
		System.out.println("我来了!");
	}
	
	public String helloLife()
	{
		System.out.println("我还活着!");
		return super.SUCCESS;
	}
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、action 动作类的访问

1、通配符

原则:约定优于配置。比如在 action 中每一个方法有一定的规则:都以 User 结尾。

方式一
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
方式二
在这里插入图片描述
在这里插入图片描述
注意:同一个包中不能有多个通配符的 action。
在这里插入图片描述
在这里插入图片描述

2、动态方法调用

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

<!-- 
启用动态方法调用
-->
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>

这是我们的 action 的动作类不需要再指定方法 method 属性了,而是在 url 上指定。

语法:

!方法名[.后缀名]
package com.wyx.action;

import com.opensymphony.xwork2.ActionSupport;

/**
 * action动作类
 */
public class HelloAction extends ActionSupport
{
	public String hello1()
	{
		System.out.println("魏宇轩1");
		return super.SUCCESS;
	}
	public String hello2()
	{
		System.out.println("魏宇轩2");
		return super.SUCCESS;
	}
	public String hello3()
	{
		System.out.println("魏宇轩3");
		return super.SUCCESS;
	}
}

在这里插入图片描述
在这里插入图片描述

五、结果视图的配置

Result:要返回的视图。
在这里插入图片描述
属性:

  • Name: action 动作类要返回的值,如果返回的值匹配上了当前的 name 的值就跳转到相应的页面。
  • Type:跳转方式
    ① dispatcher:请求转发,相当于 javaweb 中的 forward,地址栏不变,在我们不知道 type 的时候默认是 dispatcher。
    在这里插入图片描述
    ② redirect:页面重定向,地址栏变化。
    在这里插入图片描述
    在这里插入图片描述
    ③ chain:请求转发到一个 action 动作类,地址栏不发生变化。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    ④ redirectAction:重定向到一个 action 的动作类,地址栏变化。与 ③ 不同的就是地址栏变化。
    • 以上③是同包内的重定向。
    • 不同包的重定向。
      在这里插入图片描述
      访问后会发现地址栏的命名空间也发生了改变。
      在这里插入图片描述
      ⑤ stream:文件的上传和下载。

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

1、在一个 action 中配置的 result 是局部结果视图,外部的 action 是不能使用这个 result的。
2、包内的全局的结果视图配置对于包内的每一个 action 动作类都有效。
在这里插入图片描述
3、在整个系统中的全局的结果视图,通过继承的方式来实现。
在这里插入图片描述

如有错误,欢迎指正!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值