配置Action
配置Action
实现了Action类后,就可以在struts.xml中配置该Action类了。配置Action就是让Struts2 知道哪个Action处理哪个请求,也就是完成用户请求和Action之间的对用关系,我们可以认为,Action是Struts2的“程序单元”。
一.包和命名空间
Struts2使用包来组织命名空间,因此,将Action定义放在包定义下完成,定义Action通过使用<package/>下的<action/>子元素来完成,而每一个<package/>代表一个包
struts2框架下的核心组件就是Action,拦截器等,Struts2框架使用包来管理Action和拦截器等,每个包就是多个Action,多个拦截器引用的集合。
配置<package>时必须指定name属性,这个属性是引用该包的唯一标识,除此之外,还可以指定一个extends属性,该属性的属性值必须是另一个包的name属性值。指定extends属性表示让该包继承另一个包,子包可以从一个或者多个父包里继承拦截器,action等配置。
除此之外,Struts2还提供了一种所谓的抽象包,抽象包是不能有Action定义的,为了显示指定该包是抽象包,可以给包使用abstract="true"属性。
在struts.xml中,<package/>是用来定义一个包的,每个<package/>元素定义了一个包配置。定义此元素时可以指定如下属性:
- name:必须属性,该属性指定了该包的名字,该名字是该包被其他包引用时的Key。
- extends:可选属性,该属性指定该包继承其他包,继承其他包,可以继承其他包中的Action定义,拦截器定义等。
- namespace:该属性时一个可选属性,该属性定义了该包的命名空间。
- abstract:可选属性,指定一个包是否是抽象包,抽象包中是不能包含Action定义的,
因为Struts2的配置文件是从上到下来处理的,所以父包是在子包定义前面定义的。struts的默认包是struts-default。
每定义一个package时,都可以定义一个namespace属性,指定该包对应的命名空间,Struts2 之所以提供命名空间是因为处理同一个应用中同名的Action,Struts2以命名空间来管理Action,同一个命名空间中不能有同名的Action,不同的命名空间中是可以有同名的Action的,Struts2 是不支持为单独的Action设立命名空间的,而是为包指定命名空间来管理Action的,如果没有给包定义namespace命名空间,则Action是处于默认的包空间下。
<struts>
<!--开发者模式-->
<constant name="struts.devMode" value="true"/> <!--配置名为lee的包,该包默认继承struts-default包,没有指定命名空间,将使用默认的命名空间-->
<package name="lee" extends="struts-default">
<!--配置一个名为login的Action-->
<action name="login" class="org.aa.action.LoginAction">
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
</package> <!-- -->
<package name="get" extends="struts-default" namespace="/book">
<!--配置一个名为getBook的Action-->
<action name="getBook" class="org.aaa.action.GetBookAction">
<result name="login">/login.jsp</result>
<result name="success">/success.jsp</result>
</action>
</package> </struts>
如上所示,定义了两个包,一个包没有声明命名空间,一个有命名空间,没有指定命名空间的包是使用默认的命名空间,当某个包指定了命名空间后该包下的所有Action的访问路径是命名空间 +Action名。
默认命名空间的Action可以处理任何命名空间的Action请求,也就是说,如果URL为/bar/bar.action的请求,但是/bar下是没有bar.action 的Action,则默认空间下的bar.action也可以处理请求,命名空间下的Action只会处理包含根命名的Action请求。
命名空间只有一个级别,如果请求的URL是/book/search/get.action,系统将会在/book/search的命名空间找名为get的Action,有该Action处理用户的请求,如果没有名为get的Action的话,也不会到/book下找,而是直接进入默认的命名空间下找。
二.Action的默认配置
定义Action时,要指定该Action的name属性,该name属性不仅是Action的名字,也是指定了该Action所处理的请求的URL。
除此之外,通常还需要为action元素指定一个class属性,其中class属性是指定了Action的实现类。
class属性不是必须的,如果不为action指定class属性,则默认使用系统的ActionSupport类。
Action只是一个逻辑控制器,并不对用户生成任何的响应,因此,配置action时应该配置逻辑视图和物理视图资源的对应关系,配置逻辑视图和物理视图之间的映射关系是通过<result>元素来完成 的。
三.指定method属性及使用通配符
一个Action类可以定义成多个逻辑Action,在配置<action...../>元素时,可以为它指定method属性,则可以让它调用指定的方法,而不是在execute方法来处理用户的请求,如下,Action的名字为getBook,实现类为GetBookAction,处理用户请求的方法时login。
<action name="getBook" class="org.aaa.action.GetBookAction" method="login">
.........
</action>
通过这种方法可以将一个Action类定义为多个Action,既Action类的每个处理方法就是一个Action,前提是这些方法具有相似的方法签名:方法形参列表为空,方法返回值为String,如下:
<action name="getBook" class="org.aaa.action.GetBookAction" method="get">
..........
</action>
<action name="login" class="org.aaa.action.GetBookAction" method="login">
..........
</action>
如上,定义了两个Action,名字不同,处理类是相同的,但处理逻辑不同,处理逻辑是通过method来指定的。
当我们配置Action时,实际上可认为需要配置三个属性:name指定Action处理怎样的请求,该属性是不可省略的,class属性是指定该Action的处理类,该属性被省略,默认使用ActionSupport作为处理类,method属性指定使用哪个方法处理请求,如果省略,则默认使用execute方法处理请求。
四.配置默认的Action
配置默认的action可以使用name=“*”的Action外,Struts 2还支持配置默认的Action。
配置默认的Action是使用<default-action-ref...../>元素来完成的,如下
<package name="lee" extends="struts-default">
<!--配置默认的Action-->
<default-action-ref name="simplviewResultAction"/> <action name="simplviewResultAction" class="org.aa.action.simplviewResultAction">
<result..../>
</action>
</package>
配置默认的action使用default-action-ref元素,配置该元素时,需要指定一个name属性,该属性指向一个有效的Action,该Action将称为该容器中某认的Action,将默认的Action配置在某认的命名空间里就可以让该Action处理所有的用户请求,因为默认命名空间的Action可以处理任何命名空间的请求。
配置Action的更多相关文章
- 在Struts2中配置Action
在Struts2中配置Action <package>: 1.定义Action使用<package>标签下的<action>标签完成,一个<package&g ...
- Struts2配置详解_配置Action
Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实现 ...
- 【Android Developers Training】 6. 配置Action Bar
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- Struts2 配置Action详解
Struts2的核心功能是action,对于开发人员来说,使用Struts2主要就是编写action,action类通常都要实现com.opensymphony.xwork2.Action接口,并实 ...
- Struts 2 配置Action详解_java - JAVA
文章来源:嗨学网 敏而好学论坛www.piaodoo.com 欢迎大家相互学习 实现了Action处理类之后,就可以在struts.xml中配置该Action,从而让Struts 2框架知道哪个Act ...
- struts2学习笔记之十四:使用注解配置Action(不是和spring集成使用)
Struts2支持使用注解配置Action,减少配置文件的配置 Struts2如果要支持注解配置Action,需要插件的支持,导入插件struts2-convention-plugin-2.1.8.1 ...
- Struts2-学习笔记系列(5)-配置action
配置包命名空间 实现了action就需要在struts中配置action.首先配置包属性: 需要注意的是:在框架进行包匹配的时候,按文档的从上到下的顺序进行匹配 <!--下面配置名为book ...
- 【Struts2学习笔记(2)】Action默认值和配置Action于result各种转发类型
一.Action缺省配置值 <span style="font-size:18px;"><package name="itcast" name ...
- Intent的属性及Intent-filter配置——Action、Category属性与intent-filter属性
Intent的Action.Category属性都是一个普通的字符串,其中Action代表该Intent所要完成的一个抽象“动作”,而Category则用于为Action增加额外的附加列别的信息.通常 ...
随机推荐
- 157-PHP strrchr函数输出最后一次出现字母p的位置到字符串结尾的所有字符串
<?php $str='PHP is a very good programming language!'; //定义一个字符串 echo strrchr($str,'o'); //输出最后一次 ...
- 使用kali中的Metasploit通过windows7的永恒之蓝漏洞攻击并控制win7系统(9.27 第十三天)
1.开启postgresql数据库 2.msfconsole 进入MSF中 3.search 17-010 搜索cve17-010相关的exp auxiliary/scanner/smb/smb_ms ...
- jquery实现搜索框从中间向两边扩展(左右放大)
显示效果: 隐藏效果: 前端核心代码如下: <div class="search-icon col-md-2 col-sm-2 col-xs-4 col-md-offset-5 col ...
- 知乎live - 三年从前端小工到架构
王利华 刚毕业 在高德 携程 淘宝 0-3年如何发展 1 技能和能力的区别 css js 抽象 切勿好高骛远 要重视基础 2 人和人的差距是什么 注意个人品牌 提高 ...
- oracle提交commit后回退恢复
-------------------------------------------------------begin---------------------------------------- ...
- 修改虚拟机ip
在命令行里输入:more /etc/sysconfig/network-scripts/ifcfg-eth0 (注意more后要空一格,还有eth0,最后是数字零). 然后再输入:ifconfig ...
- 专题复习--背包问题+例题(HDU 2602 、POJ 2063、 POJ 1787、 UVA 674 、UVA 147)
*注 虽然没什么人看我的博客但我还是要认认真真写给自己看 背包问题应用场景给定 n 种物品和一个背包.物品 i 的重量是 w i ,其价值为 v i ,背包的容量为C.应该如何选择装入背包中的物品,使 ...
- C/C++学习笔记_gdb调试
1.前提条件:可执行文件包含调试信息 gcc -g 2.gdb 文件名 ---启动gdb调试 3.查看代码的命令 当前文件: list 行号(函数名) 指定文件: list 文件名:行号(函数名)4. ...
- 2019.1的IDEA的Pulgins无法使用解决
第一步 第二步
- 2020/2/12 PHP编程学习
感冒终于差不多好了.. 学了一天的tp框架商城开发,到此,一个小商城算是开发完了,写一个简单小总结吧233 首先说的编程方面,其实并没有质的提升orz,怎么可能几天就有大突破233 不过收获还是有的, ...