struts2学习之---配置Action
来源:互联网 发布:淘宝必买清单怎么报名 编辑:程序博客网 时间:2024/06/04 20:56
实现了Action处理类之后,就可以在struts.xml文件中配置该Action了。
1.包和命名空间
struts2使用包来组织Action,因此,将Action定义放在包定义下完成,定义Action通过使用<package.../>
下的<action.../>
子元素来完成,而每个package元素配置一个包。每个包就是多个Action、多个拦截器、多个拦截器引用的集合。
配置<package.../>
元素时必须指定name属性,这个属性是引用该包的唯一标识,除此之外,还可以指定一个可选的extends属性,extends属性值必须是另一个包的name属性。指定extends属性表示让该包继承另一个包,子包可以从一个或多个父包中继承到拦截器、拦截器栈、action等配置。namespace属性,定义该包的命名空间;abstract属性,指定该包是否为一个抽象包。
struts2的配置文件是从上到下处理的,所以父包应该在子包前面定义。
<struts> <package name="default" extends="struts-default"> <interceptors> </interceptors> <action > <resault></resault> </action> </package> </struts>
struts-default 在struts2-core-2.3.16.3.jar文件中,这里已经定义了struts-default抽象包,该包下包含了大量结果类型定义、拦截器定义、拦截器引用定义等。
struts2提供命名空间,主要是为了处理同一个Web应用中包含同名Action的情形,同一个命名空间里不能有同名的Action,不同的命名空间里可以有同名的Action。
当某个包指定了命名空间后,该包下所有的Action处理的URL应该是命名空间+Action名。
struts2还可以显示指定根命名空间,通过设置某个包的namespace=”/”来指定根命名空间。
默认命名空间里的Action可以处理任何命名空间下的Action请求,但是根命名空间下的Action只处理根命名空间下的Action请求。命名空间只有一个级别。
2.Action的基本配置
定义Action时,至少需要指定该Action的name属性,该name属性既是该Action的名字,也是指定了该Action所处理的请求的URL。还需要class属性指定该Action的实现类,如果没有指定,默认使用系统的ActionSupport类。
Action只是一个逻辑控制器,它并不直接对浏览者生成任何响应。因此,Action处理完用户请求后,Action需要将指定的视图资源呈现给用户。因此,配置Action时应该配置逻辑视图和物理视图资源之间的对应关系。
配置逻辑视图和物理视图之间的映射关系是通过<result.../>
元素来定义的,每个<result.../>
元素定义逻辑视图和物理视图之间的一次映射。
设置允许Action name中出现斜线通过struts.enable.SlashesInActionNames常量指定,该常量的值为true,即允许Action名中使用斜线。
3.使用Action的动态方法调用
对于同一个表单,当用户通过不同的提交按钮来提交同一个表单时,系统需要使用Action的不同方法来处理用户请求,这就需要让同一个Action里包含对个控制处理逻辑。
动态调用 <!--action属性为actionName!methodName的形式,其中actionName指定提交到哪个Action,而methodName指定提交到指定方法--> action="actionName!methodName" jsp <input type="submit" value="注册" onclick="regist();"/> function regist(){ //获取页面的第一个表单 targetForm = document.forms[0]; //动态修改表单的action属性 targetForm.action="login!regist"; }
4.指定method属性及使用通配符
在配置<action.../>
元素时,可以为它指定method属性,则可以让Action调用指定方法,而不是execute()方法来处理用户请求。
<action name="" class="" method=""> </action>
即Action类的每个处理方法都映射成一个逻辑Action,前提是这些方法具有相似的方法签名:方法形参列表为空,方法返回值是String
在配置<action.../>
元素时,允许在指定name属性时使用模式字符串(即用”“代表一个或多个任意字符),接下来就可以在class、method属性及<result.../>
子元素中使用{N}的形式来代表前面第N个星号()所匹配的子串。
<!--该method属性使用了一个表达式{1},该表达式的值就是name属性值 中第一个*的值--> <action name="*Action" class="" method="{1}"> </action>
当<action.../>
元素的name属性使用了*之后,class属性也可以使用{N}表达式。
<action name="*Action" class="com.hyq.{1}Action"> </action>
struts2完全可以在class属性和method属性中同时使用{N}表达式:
<action name="*_*" method="{2}" class="com.hyq.{1}Action"></action>
如果有URL为Book_save.action的请求,因为匹配了*_*
的模式,且第一个*
的值为Book,第二个*
的值为save。
实际上struts2允许指定校验文件时准确到处理方法,即ActionName-methodName-validation.xml,所有对Book_save.action的请求,系统将优先使用BookAction-save-validation.xml校验文件。
struts2还可以在<result.../>
子元素中使用{N}表达式。
<action name="*"> <result>/WEN-INF/content/{1}.jsp</result> </action>
假设有URL为abcAction.action请求,在struts.xml文件中配置了如下三个Action,分别为abcAction、*Action和*
该使用哪个呢?而是在struts.xml文件中先找到哪个Action,就会由哪个Action来处理用户请求。除非请求的URL与Action的name属性绝对相同,否则将按先后顺序来决定由哪个Action来处理用户请求。因此将name=”*”的Action配置放在最后。
5.配置默认Action
<package name="" extends="struts-default"> <default-action-ref name="simpleViewResultAction"/> <action name="simpleViewResultAction" class=""> </action> </package>
将默认Action配置在默认命名空间里就可以让该Action处理所有用户请求,因为默认命名空间的Action可以处理任何命名空间的请求。
6.配置Action的默认处理类
在struts2-core-2.3.16.3.jar压缩包的struts-default.xml文件中有如下配置:
<package name="" extends="struts-default"> <default-class-ref class="com.opensymphony.xwork2.ActionSupport"/> </package>
- struts2学习之---配置Action
- 7.10--SSH学习之Struts2 Action配置
- struts2之Action配置
- Struts2学习之Action
- Struts2配置之配置Action
- 配置Action---struts2学习笔记
- struts2学习笔记 配置action
- Struts2学习之常用配置及action接收参数
- Struts2之Action的配置
- Struts2学习笔记之action
- struts2学习之---实现Action
- struts2中Action配置之通配符配置
- struts2中Action配置之注解配置
- 一步一步学习struts2(3):Action的配置
- struts2学习笔记(3)-------配置Action
- struts2之Action配置的各项默认值
- Java:Struts2之Action基础与配置
- Struts2注解配置之@Action(二)
- React.js中通过ref操作DOM
- html2canvas.js网页截图功能(解决截图不全问题)
- HDU 1267 下沙的沙子有几粒?【dp】
- CSS实现单行、多行文本溢出显示省略号(…)
- linux复制问题,以及设置权限问题
- struts2学习之---配置Action
- 毫秒必争,前端网页性能最佳实践
- 最短路小结(三种算法+各种常见变种)
- 关于转义字符的一些东西
- ffmpeg 截取一段视频命令
- (译)《地平线》的玩家动作系统(2)
- 一、ArcGIS API for JavaScript 之Hello World
- SpringBoot入门(一)之Hello World
- redis请求频繁就出现redis超时