Struts2 <action>元素:建立Action对象的映射
Struts2 框架中的 Action 对象是一个控制器的角色,Struts2 框架通过 Action 对象处理 HTTP 请求,其请求地址的映射需要配置在 struts.xml 文件中,它使用 <action> 元素进行配置。
配置文件中的 <action> 元素主要用于建立 Action 对象的映射,通过 <action> 元素可以指定 Action 请求地址及处理后的映射页面,在 <action> 元素中主要包含如表所示的属性信息。
注意:在 <action> 元素中,name 属性是必须配置的,在建立 Action 对象的映射时,必须指定它的 URL 映射地址,否则请求找不到 Action 对象。
调用一个 Action 对象,默认情况下,它执行的是 execute() 方法,在这种多个业务逻辑分支的 Action 对象中,如果需要请求指定的方法,就可以通过 <action> 元素的 method 属性进行配置,将一个请求交给指定的业务逻辑方法进行处理,如:
<action> 元素的 method 属性主要用于对一个 action 请求分发一个指定业务逻辑方法,如将 <action> 元素的 method 属性值设置为 "add",那么这个请求会交给 Action 对象的 add() 方法进行处理,此种配置方法可以减少 Action 对象数目。
注意:在使用 <action> 元素的 method 属性时,其属性值需要与 Action 对象中的方法名一致,Struts2 框架是通过 method 属性值查找与之配置的方法。
在 Struts2 框架的配置文件 struts.xml中,常用的通配符主要有两个,分别为“*”与“\”。
在 Struts2 框架的配置文件 struts.xml 中应用通配符的方法如下:
<action> 元素的 name 属性的值为 "add*",它匹配的是以字符 "add" 开头的字符串,如 "addUser"、"addBook" 都可以匹配。对于通配符所匹配的字符,在 Struts2 框架的配置文件中是可以获取的,它使用表达式 {1}、{2}、{3} 的方式进行获取。
说明:表达式 {N} 是 1~9 之间的数字,它的下标从 1 开始。
创建名为 Struts2_12 的 Java Web 项目,将 Struts2 的相关类包添加到项目的 classpath,并在 web.xml 文件中注册 Struts2 提供的 StrutsPrepareAndExecuteFilter 过滤器,从而搭建 Struts2 的开发环境。
创建图书信息管理的 Action 对象,它的名称为 BookAction,在此 Action 中分别编写添加、删除、更新、查询图书的方法,关键代码如下:
在 BookAction 类中,添加图书信息的方法为 add() 方法,更新图书信息的方法为 update() 方法,删除图书信息的方法为 delete() 方法,查询图书信息的方法为 select() 方法,execute() 方法为默认请求处理方法。
说明:本示例主要演示通过通配符配置 Action,在 BookAction 类中并没有对图书信息进行相关操作,只返回了 SUCCESS 值。
在 Web 项目的源码文件夹(MyEclipse 中默认为 src 目录)中,创建名为 struts.xml 的配置文件,在此文件中通过通配符配置 BookAction 对象,关键代码如下:
<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,在此页面中编写“添加图书”、“修改图书”、“删除图书”与“查询图书”的超级链接,关键代码如下:
注意:index.jsp 页面中的超级链接地址应按照 struts.xml 文件中定义的通配符格式编写,并且下划线之前的字符串是 BookAction 类中存在的方法。否则,将不能找到与之对应的返回结果页面。
单击 index.jsp 页面中的超级链接,将进入相应的 JSP 页面,如单击“查询图书”超级链接,请求地址为 "/select_book",其返回结果为 book_select.jsp 页面。
语法1:
<action name="name" class="url"method="name">
<result>url</result>
</action>
配置文件中的 <action> 元素主要用于建立 Action 对象的映射,通过 <action> 元素可以指定 Action 请求地址及处理后的映射页面,在 <action> 元素中主要包含如表所示的属性信息。
属性 | 说明 |
---|---|
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中,常用的通配符主要有两个,分别为“*”与“\”。
- 通配符“*”:匹配0或多个字符。
- 通配符“\”:是一个转义字符,如需要匹配“/”,则使用“\/”进行匹配。
在 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 页面。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算