struts2.2 Annotation 注解配置Action

来源:互联网 发布:产品标题怎么优化 编辑:程序博客网 时间:2024/05/17 06:09

之前发过一篇struts2.1的Annotation 注解配置
http://blog.sina.cn/dpool/blog/s/blog_57769b7b0100thlh.html?vt=4
这次再发一下struts2.2的
从struts2.1开始,struts2不再推荐使用Codebehind作为零配置插件,而是改为使用Convention插件来支持零配置,和Codebehind相比,Convention插件更彻底,该插件完全抛弃配置信息,不仅不需要是使用struts.xml文件进行配置,甚至不需要使用Annotation进行配置,而是由struts2根据约定自动配置。
将[struts2-convention-plugin-2.2.3.jar]导入lib
struts.xml如下配置(Com.ustb.test.*/com.ustb.leo.*都将被视为含有Action的包路径而被搜索。)
----------------------------------
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE struts PUBLIC
'-//Apache Software Foundation//DTD Struts Configuration 2.0//EN'
'http://struts.apache.org/dtds/struts-2.0.dtd'>
<struts>
<constant name='struts.convention.package.locators' value='test,leo' />
<constant name='struts.convention.classes.reload' value='true' />
&lt;package name='default' namespace='/' extends='struts-default'>
</package>
</struts>
----------------------------------
package leo.test;
import org.apache.struts2.convention.annotation.Namespace;
import org.apache.struts2.convention.annotation.ParentPackage;
import org.apache.struts2.convention.annotation.Result;
import org.apache.struts2.convention.annotation.Results;
import com.opensymphony.xwork2.ActionSupport;
@Namespace('/')
@ParentPackage('default')
@Results({ @Result(name = 'tagSelect', location = '/JSP/TagSelect.jsp'),
@Result(name = 'sshTest', location = '/JSP/SSHTestResult.jsp'),
})
public class MenuAction extends ActionSupport {
private static final long serialVersionUID = 6164665898354735604L;
public String execute() throws Exception {
return SUCCESS;
}
public String sshTest() throws Exception {
return 'sshTest';
}
}
--------------------------------------------------------------------------------------------------
Strtus2 Convention Plugin 配置规则
1.官方介绍的地址:
http://struts.apache.org/2.1.6/docs/convention-plugin.html
2.struts.xml文件配置
只挑选几个重要的常量说明:
(1) <constant name='struts.locale' value='zh_CN'/>
<constant name='struts.i18n.encoding' value='UTF-8'/>
struts2.1.6 现在只需要一个struts.xml文件就可以了。以前配struts.locale=zh_CN,struts.i18n.encoding=UTF-8,应用起动时会报一个警告,说没有配置locale,必须要在struts.properties里面配置才不会报错,现在这个问题已经解决了,所有配置都可以在xml文件中指定了。
(2) <constant name='struts.action.extension' value='action,do,,'/>
扩展名可以指定为空。这样地址栏比较好看。但也会有个问题,就是一些其他servlet映射,如cxf,我们会映射地址为/services/*,现在这个地址也变成struts2控制范围的地址了,如果按默认的配置会报找不到action的错误。解决办法是修改mapper类。这在以后文章中会提到。
(3) <constant name='struts.enable.DynamicMethodInvocation' value='true'/>
<constant name='struts.enable.SlashesInActionNames' value='true'/>
开启动态方法。要实现零配置,就是需要动态方法调用。开启action名称可以有 “/”,一个请求地址有多个“/”,struts2就不会再使用类路径扫描的命名空间,只会使用配置的名称。所以既想action名称里使用“/”,又想用struts2默认搜索的命名空间,只能自己修改一下convention插件的实现类了。
(4) <constant name='struts.ui.theme' value='simple'/>
不用dojo的及struts2复杂标签样式的就把主题设置为simple,这样可以不加载多余的模板。
(5) <constant name='struts.devMode' value='true'/>
<constant name='struts.i18n.reload' value='true'/>
<constant name='struts.configuration.xml.reload' value='true'/>
<constant name='struts.convention.classes.reload' value='true' />
开启开发者模式,在平时开发时修改action的annotation配置可以不重启,但是修改struts.xml文件还是要重启。修改类的具体内容,debug模式下可以不重启,或是使用javarebel,这个不在讨论范围。
(6) <constant name='struts.convention.result.path' value='/WEB-INF/pages/'/>
指定结果页面路径。 convention插件会自动在此路径中寻找文件。放到WEB-INF的目的的保护文件资源,只能通过程序内部跳转才能访问,我们的权限拦截器或其他权限处理只要加到action上就可以了。
(7) <constant name='struts.convention.action.suffix' value='Action'/>
<constant name='struts.convention.action.name.lowercase' value='true'/>
<constant name='struts.convention.action.name.separator' value='_'/>
一个action名字的获取。比如为HelloWorldAction。按照配置,actionName为hello_world。
(8)<constant name='struts.convention.action.disableScanning' value='false'/>
是否不扫描类。一定要设为false,否则convention插件不起作用,零配置也没有意义。
(9)<constant name='struts.convention.default.parent.package' value='default'/>
设置默认的父包,一般我们都设置一个default包继承自struts-default。大部分类再继承default。如果有特殊的类需要特殊的包,只能在action中再指定父包了。
(10) <constant name='struts.convention.package.locators' value='action'/>

<constant name='struts.con

……………………………………看上面链接看原文

0 0
原创粉丝点击