2025年4月16日 星期三 乙巳(蛇)年 正月十七 设为首页 加入收藏
rss
您当前的位置:首页 > 计算机 > 编程开发 > Java

Struts2 ActionSupport类:业务控制器

时间:03-07来源:作者:点击数:35

Action 是实现 WebWork 核心组件的业务控制器,一般直接继承 ActionSupport 类。在 ActionSupport 类中包含一个 execute() 方法,但是这个方法不包含任何的 Servlet API,同样也不包含任何的 WebWork API,所以这里实现的 Action 与 Struts1 中的大不相同,它更类似于一个普通的 POJO。

语法:

import com.opensymphony.xwork2.ActionSupport;  //继承ActionSupport基类
public class XXX extends ActionSupport{  //省略部分属性逻辑代码
  ……  //action默认的执行方法
    public String execute()throws Exception{
    return SUCCESS;
  }

这是一个继承 ActionSupport 类的 Action 类的语法结构。

示例

本示例应用 Action 实现页面输出"Hello world!"这一经典案例。具体实现如下:创建 Action 文件名为 HelloAction,在其中定义变量和编写 get 和 set 方法,设定执行方法的返回值为 SUCCESS。具体代码如下:

  • import com.opensymphony.xwork2.ActionSupport;
  • public class HelloAction extends ActionSupport{
  • public static final String MES = "Hello world!"; //默认的执行方法
  • public String execute()throws Exception{
  • setMes(MES);
  • return SUCCESS;
  • } //唯一属性,将被赋值和打印
  • private String mes;
  • public String getMes(){
  • return mes;
  • }
  • public void setMes(String mes){
  • this.mes = mes;
  • }
  • }

创建 index.jsp 文件,在其中应用 <s:property> 获取 Action 中的数值,具体代码如下:

  • <body>
  • <s:property value="mes"/>
  • </body>

运行结果如下:Hello World!

典型应用

创建一个 Java Web 项目,应用 Struts2 提供的动态 Action 处理添加用户信息请求及更新用户信息请求。将 Struts2 的支持类型库文件添加到 WEB-INF 目录中的 lib 文件夹中。在 web.xml 文件中注册 Struts2 提供的过滤器,类名为 org.apache.struts2.dispatcher.ng.filter.StrutsPrepare AndExecuteFilter,其配置代码如下:

  • <?xml version="1.0" encoding="UTF-8"?>
  • <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
  • xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  • xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  • http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  • <welcome-file-list>
  • <welcome-file>index.jsp</welcome-file>
  • </welcome-file-list>
  • <!--Struts2过滤器-->
  • <filter>
  • <!--过滤器名称-->
  • <filter-name>struts2</filter-name>
  • <!--过滤器类-->
  • <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilt
  • er</filter-class>
  • </filter>
  • <!--Struts2过滤器映射-->
  • <filter-mapping>
  • <!--过滤器名称-->
  • <filter-name>struts2</filter-name>
  • <!--过滤器映射-->
  • <url-pattern>/*</url-pattern>
  • </filter-mapping>
  • </web-app>

创建名称为 UserAction 的 Action 对象,并在这个 Action 对象中分别编写 add() 方法与 update() 方法,用于处理添加用户信息的请求及更新用户信息的请求,并将请求返回到相应的页面,关键代码如下:

  • package com.lyq.action;
  • import com.opensymphony.xwork2.ActionSupport;/**
  • *用户Action
  • *@author zx
  • */
  • public class UserAction extends ActionSupport{
  • private static final long serialVersionUID = 1L; //提示信息
  • private String info; //添加用户信息
  • public String add()throws Exception{
  • info = "添加用户信息";
  • return"add";
  • } //更新用户信息
  • public String update()throws Exception{
  • info = "更新用户信息";
  • return"update";
  • }
  • public String getInfo(){
  • return info;
  • }
  • public void setInfo(String info){
  • this.info=info;
  • }
  • }

本示例中的 UserAction 类是通过继承 Struts2 提供的 ActionSupport 类实现 Action 对象,此类的 add() 方法用于处理添加用户信息的请求,update() 方法用于处理更新用户的请求。这两个方法对请求处理的方式非常简单,只对 UserAction 类中的 info 变量赋一个值,并返回相应的结果。

说明:本示例主要演示Struts2的动态Action的处理方式,并没有进行实际的用户添加与更新操作。

在 Web 项目的源码文件夹(MyEclipse 中默认为 src 目录)中,创建名称为 struts.xml 的配置文件,在此配置文件中配置 UserAction,关键代码如下:

  • <!DOCTYPE struts PUBLIC
  • "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
  • "http://struts.apache.org/dtds/struts-2.1.dtd">
  • <struts>
  • <!--声明包-->
  • <package name="myPackage"extends="struts-default">
  • <!--定义action-->
  • <action name="userAction"class="com.lyq.action.UserAction">
  • <!--添加成功的映射页面-->
  • <result name="add">user_add.jsp</result>
  • <!--更新成功的映射页面-->
  • <result name="update">user_update.jsp</result>
  • </action>
  • </package>
  • </struts>

UserAction 类的 URL 映射地址为 "userAction",这个 Action 对象定义在 myPackage 包中,它的返回结果映射有两个,分别为 "add" 与 "update",其中返回结果 "add" 对应的是添加用户信息成功的页面 user_add.jsp,返回结果 "update" 对应的更新用户信息成功的页面 user_update.jsp。

创建名称为 user_add.jsp 的 JSP 页面,它是成功添加用户信息的返回页面,关键代码如下:

  • <body>
  • <font color="red">
  • <s:property value="info"/>
  • </font>
  • </body>

在 user_add.jsp 页面中,本示例通过 Struts2 标签输出 UserAction 中的信息,也就是 UserAction 中为 add() 方法对 info 属性所赋的值。

创建名称为 user_update.jsp 的 JSP 页面,它是成功更新用户信息的返回页面,关键代码如下:

  • <body>
  • <font color="red">
  • <s:property value="info"/>
  • </font>
  • </body>

在 user_update.jsp 页面中,示例中通过 Struts2 标签输出 UserAction 中的信息,也就是 UserAction 中为 update() 方法对 info 属性所赋的值。

创建程序中的首页 index.jsp,在此页面中添加两个超级链接,通过 Struts2 提供的动态 Action 功能,将这两个超级链接请求分别指向 UserAction 类的添加用户信息的请求与更新用户的请求,关键代码如下:

  • <body>
  • <a href="userAction!add">添加用户</a>
  • <br>
  • <a href="userAction!update">更新用户</a>
  • </body>

注意:在使用 Struts2 的动态 Action 时,其 Action 请求的 URL 地址中使用“!”号分隔 Action 请求与请求字符串,而请求字符串的名称需要与 Action 类中的方法名称相对应,否则将出现 java.lang.NoSuchMethodException 异常。

运行本示例,将进入 index.jsp 页面,在页面中,显示“添加用户”与“更新用户”超级链接。

单击“添加用户”超级链接后,请求交给 UserAction 的 add() 方法进行处理,此时可以看到浏览器地址栏中的地址变为 "http://localhost:8080/Struts2_03/userAction!add"。

由于使用了 Struts2 提供的动态 Action,所以当请求 "/userAction!add" 时,请求会交给 UserAction 类的 add() 方法进行处理,同样,当单击 index.jsp 页面中的“更新用户”超级链接后,请求将由 UserAction 类的 update() 方法进行处理。

技巧:从上面的示例可以看出,Action 请求的处理方式并非一定要通过 execute() 方法进行处理,使用动态 Action 的处理方式更加方便,所以,在实际的项目开发中,可以将同模块的一些请求封装在一个 Action 对象中,从而使用 Struts2 提供的动态 Action 对不同请求进行处理。

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门