首页 > 编程笔记 > Java笔记

Struts2 <action>元素:建立Action对象的映射

Struts2 框架中的 Action 对象是一个控制器的角色,Struts2 框架通过 Action 对象处理 HTTP 请求,其请求地址的映射需要配置在 struts.xml 文件中,它使用 <action> 元素进行配置。

语法1:

<action name="name" class="url"method="name">
  <result>url</result>
</action>


配置文件中的 <action> 元素主要用于建立 Action 对象的映射,通过 <action> 元素可以指定 Action 请求地址及处理后的映射页面,在 <action> 元素中主要包含如表所示的属性信息。

<bean>元素属性及说明
属性 说明
name 用于配置Action对象被请求的URL映射
class 指定Action对象的类名
method 设置请求Action对象时,调用Action对象的哪一个方法
converter 指定Action对象类型转换器的类

注意:在 <action> 元素中,name 属性是必须配置的,在建立 Action 对象的映射时,必须指定它的 URL 映射地址,否则请求找不到 Action 对象。

示例

在实际的项目开发中,对于每一个模块来说,其业务逻辑都比较复杂,一个 Action 对象包含多个业务逻辑请求的分支,如在用户管理模块中,需要对用户信息进行添加、删除、修改、查询操作,其 Action 对象的代码如下:
import com.opensymphony.xwork2.ActionSupport;/**
*用户信息管理Action
*@author zs
*/
public class UserAction extends ActionSupport{
  private static final long serialVersionUID=1L;  //添加用户信息
  public String save()throws Exception{
    ……
      return SUCCESS;
  }  //修改用户信息
  public String update()throws Exception{
    ……
      return SUCCESS;
  }  //删除用户信息
  public String delete()throws Exception{
    ……
      return SUCCESS;
  }  //查询用户信息
  public String find()throws Exception{
    ……
      return SUCCESS;
  }
}

调用一个 Action 对象,默认情况下,它执行的是 execute() 方法,在这种多个业务逻辑分支的 Action 对象中,如果需要请求指定的方法,就可以通过 <action> 元素的 method 属性进行配置,将一个请求交给指定的业务逻辑方法进行处理,如:
<!--添加用户-->
<action name="userAction" class="com.lyq.action.UserAction" method="save">
  <result>success.jsp</result>
</action>
<!--修改用户-->
<action name="userAction" class="com.lyq.action.UserAction" method="update">
  <result>success.jsp</result>
</action>
<!--删除用户-->
<action name="userAction" class="com.lyq.action.UserAction" method="delete">
  <result>success.jsp</result>
</action>
<!--查询用户-->
<action name="userAction" class="com.lyq.action.UserAction" method="find">
  <result>success.jsp</result>
</action>

<action> 元素的 method 属性主要用于对一个 action 请求分发一个指定业务逻辑方法,如将 <action> 元素的 method 属性值设置为 "add",那么这个请求会交给 Action 对象的 add() 方法进行处理,此种配置方法可以减少 Action 对象数目。

注意:在使用 <action> 元素的 method 属性时,其属性值需要与 Action 对象中的方法名一致,Struts2 框架是通过 method 属性值查找与之配置的方法。

语法2:

在多个 Action 的情况下,通过一定的命名约定,使用通配符配置 Action 对象来达到一种简化配置的效果。

在 Struts2 框架的配置文件 struts.xml中,常用的通配符主要有两个,分别为“*”与“\”。
在 Struts2 框架的配置文件 struts.xml 中应用通配符的方法如下:
<struts>
  <!--定义action-->
  <action name="XXX*" class=XXXq.action.{1}XXXAction">
</struts>

<action> 元素的 name 属性的值为 "add*",它匹配的是以字符 "add" 开头的字符串,如 "addUser"、"addBook" 都可以匹配。对于通配符所匹配的字符,在 Struts2 框架的配置文件中是可以获取的,它使用表达式 {1}、{2}、{3} 的方式进行获取。

说明:表达式 {N} 是 1~9 之间的数字,它的下标从 1 开始。

示例

在图书信息处理 Action 中,分别编写添加、删除、更新、查询图书的方法,针对这 4 种操作,使用通配符配置此 Action,并将请求方法返回到相应的页面。

创建名为 Struts2_12 的 Java Web 项目,将 Struts2 的相关类包添加到项目的 classpath,并在 web.xml 文件中注册 Struts2 提供的 StrutsPrepareAndExecuteFilter 过滤器,从而搭建 Struts2 的开发环境。

创建图书信息管理的 Action 对象,它的名称为 BookAction,在此 Action 中分别编写添加、删除、更新、查询图书的方法,关键代码如下:
import com.opensymphony.xwork2.ActionSupport;/**
*图书Action
*@authorZS
*/
public class BookAction extends ActionSupport{
  private static final long serialVersionUID=1L;  //添加图书信息请求
  public String add()throws Exception{//返回SUCCESS
    return SUCCESS;
  }  //更新图书信息请求
  public String update()throws Exception{  //返回SUCCESS
    return SUCCESS;
  }  //删除图书信息请求
  public String delete()throws Exception{  //返回SUCCESS
    return SUCCESS;
  }//查询图书信息请求
  public String select()throws Exception{  //返回SUCCESS
    return SUCCESS;
  }  //默认请求执行方法
  @Override
    public String execute()throws Exception{  //返回SUCCESS
    return SUCCESS;
  }
}

在 BookAction 类中,添加图书信息的方法为 add() 方法,更新图书信息的方法为 update() 方法,删除图书信息的方法为 delete() 方法,查询图书信息的方法为 select() 方法,execute() 方法为默认请求处理方法。

说明:本示例主要演示通过通配符配置 Action,在 BookAction 类中并没有对图书信息进行相关操作,只返回了 SUCCESS 值。

在 Web 项目的源码文件夹(MyEclipse 中默认为 src 目录)中,创建名为 struts.xml 的配置文件,在此文件中通过通配符配置 BookAction 对象,关键代码如下:
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
"http://struts.apache.org/dtds/struts-2.1.dtd">
<struts>
  <!--声明常量-->
  <constant name="struts.devMode" value="true"></constant>
  <package name="myPackage" extends="struts-default" namespace="/">
    <!--定义action(使用通配符进行配置)-->
    <action name="*_*" class="com.lyq.action.BookAction" method="{1}">
      <!--结果映射-->
      <result name="success">{2}_{1}.jsp</result>
    </action>
  </package>
</struts>

<action> 元素的 name 属性的值为“*_*”,它匹配使用下划线分隔的两个字符串,method 属性的值为“{1}”,表达式 {1} 匹配的是 name 属性第一个字符串的值,如请求 "/add_book" 时,将调用 BookAction 类的 add() 方法。

说明:<action> 元素的 method 属性用于设置访问一个 Action 对象所调用的方法。

“*_*”请求的 Action 映射结果只有一个,它的值为 success。在这个返回结果中,本示例通过表达式动态生成返回值,示例将其返回值设置为 "{2}_{1}.jsp",它所生成的动态返回值是“*_*”请求第一个“*”与第二个“*”组合成的 JSP 页面,如请求 "/update_book" 时,调用 BookAction 类的 update() 方法,其处理成功的返回页面为 book_update.jsp,同理,当请求 "/delete_book" 时,其处理成功的返回页面为 book_delete.jsp。

技巧:在多个 Action 对象的情况下,使用通配符配置 Action 对象可以减少大量的配置代码。

创建图书信息管理请求处理成功的返回页面,包括 book_add.jsp 页面、book_update.jsp 页面、book_delete.jsp 页面、book_select.jsp 页面,并在这些页面中输出相应的提示信息。

创建程序的首页 index.jsp,在此页面中编写“添加图书”、“修改图书”、“删除图书”与“查询图书”的超级链接,关键代码如下:
<body>
  <div align="center">
    <h1>图书信息管理</h1>
    <a href="add_book">添加图书</a>
    <a href="update_book">修改图书</a>
    <a href="delete_book">删除图书</a>
    <a href="select_book">查询图书</a>
  </div>
</body>

注意:index.jsp 页面中的超级链接地址应按照 struts.xml 文件中定义的通配符格式编写,并且下划线之前的字符串是 BookAction 类中存在的方法。否则,将不能找到与之对应的返回结果页面。

单击 index.jsp 页面中的超级链接,将进入相应的 JSP 页面,如单击“查询图书”超级链接,请求地址为 "/select_book",其返回结果为 book_select.jsp 页面。

所有教程

优秀文章