零配置并不是没有配置,而是通过约定大于配置的方式,大量通过约定来调度页面的跳转而使得配置大大减少。使得Action等配置不必写在Struts.xml中。

convention-plugin的约定

1. 默认所有的结果页面都存储在WEB-INF/content下,你可以通过设置struts.convention.result.path这个属性的值来改变到其他路径。

 <constant name="struts.convention.result.path" value="/WEB-INF/page" />  

2. 默认包路径包含action,actions,struts,struts2的所有包都会被struts作为含有Action类的路径来搜索。

你可以通过设置struts.convention.package.locators属性来修改这个配置。

<constant name="struts.convention.package.locators" value="web,action" />
<!--包路径包含web和action的将被视为Action存在的路径来进行搜索。-->

3.Convention 从找到的package以及其子package中寻找 com.opensymphony.xwork2.Action 的实现以及以Action结尾的类

com.example.actions.MainAction
com.example.actions.products.Display (implements com.opensymphony.xwork2.Action)

4.Convention通过如下规则确定URL的具体资源部分:去掉类名的Action部分。然后将将每个分部的首字母转为小写,用’-’分割

可以自定义分隔符:

<constant name="struts.convention.action.name.separator" value="-" />  

举例:

  • UserAction->user
  • UserDetailAction ->user-detail
  • com.ustb.web.user.detail.UserDetailAction ->/WEB-INF/content/user/detail/user-detail.jsp

通过注解来配置

一个方法被@Action注释后,只是多了一种调用方式,而不是说覆盖了原来的调用方式

public class HelloAction extends ActionSupport {
@Action("action1")
//调用路径:/action1!method1.action
//映射路径: /WEB-INF/content/action1.jsp
public String method1() {
return SUCCESS;
}
//调用路径:/user/action2!method2.action
//映射路径: /WEB-INF/content/user/action2.jsp
@Action("/user/action2")
public String method2() {
return SUCCESS;
}
}

@Actions注释

public class HelloAction extends ActionSupport {
//可以通过两种路径调用注释方法,会映射到对应的文件
@Actions({
@Action("/different/url"), //调用:/different/url!method1.action 映射:/WEB-INF/content/different/url-error.jsp
@Action("/another/url") //调用:/another/url!method1.action 映射:/WEB-INF/content/another/url-error.jsp
})
public String method1() {
return “error”;
}

@Namespace 注释

@Namespace("/other")  //记得加斜杠
public class HelloWorld extends ActionSupport {
// 调用:/other/hello-world!method1.action
public String method1() {
return “error”;
}
@Action("url")
// 调用:/other/url!method2.action
public String method2() {
return “error”;
}
@Action("/different/url")
// 调用:/different/url!method3.action
public String method3() {
return “error”;
}
}

@Result注释

public class HelloWorld extends ActionSupport {
@Action(
value="test01",
results={
@Result(
name="error",
location="/pages/test01/say-hello.jsp",
params={
"param1","${param1}",
"param2","${param2}"
}
)
}
)
public String AgentLogin() throws Exception{ }
}

struts2 convention-plugin实现零配置的更多相关文章

  1. Struts2 Convention Plugin ( struts2 零配置 )

    Struts2 Convention Plugin ( struts2 零配置 ) convention-plugin 可以用来实现 struts2 的零配置.零配置的意思并不是说没有配置,而是通过约 ...

  2. struts2采用convention-plugin实现零配置

    最近开始关注struts2的新特性,从这个版本开始,Struts开始使用convention-plugin代替codebehind-plugin来实现struts的零配置. 配置文件精简了,的确是简便 ...

  3. Convention插件 struts零配置

    http://blog.csdn.net/spyjava/article/details/13631961系列课程使用 注解:http://www.yiibai.com/struts_2/struts ...

  4. 菜鸟学Struts2——零配置(Convention )

    又是周末,继续Struts2的学习,之前学习了,Struts的原理,Actions以及Results,今天对对Struts的Convention Plugin进行学习,如下图: Struts Conv ...

  5. 从struts2.1开始Convention零配置

    从struts2.1开始,struts2不再推荐使用Codebehind作为零配置插件,而是改为使用Convention插件来支持零配置,和Codebehind相比,Convention插件更彻底,该 ...

  6. struts2 Convention插件零配置,使用注解开发

    从struts21开始,struts2不再推荐使用codebehind作为零配置插件,而是改用Convention插件来支持零配置.与以前相比较,Convention插件更彻底. 使用Conventi ...

  7. Struts2 注解零配置方法(convention插件使用)

    最近接触到一个新的项目,是做一个使用S2SH的电子商务商城的二次开发.之前使用过S2SH,在此之前的项目中,Struts2 使用的是XML配置而这个项目是使用注解.在这个项目中,注解还不需要使用Act ...

  8. spring+hibernate+struts2零配置整合

    说句实话,很久都没使用SSH开发项目了,但是出于各种原因,再次记录一下整合方式,纯注解零配置. 一.前期准备工作 gradle配置文件: group 'com.bdqn.lyrk.ssh.study' ...

  9. 13、零配置Struts2开发

    Convention 插件 从 Struts 2.1 开始, Struts 可以使用 Convention 插件来支持零配置: Convention 插件完全抛弃配置信息, 不仅不需要使用 strut ...

  10. struts2使用Convention Plugin在weblogic上以war包部署时,找不到Action的解决办法

    环境: struts 2.3.16.3 + Convention Plugin 2.3.16.3 实现零配置 现象:以文件夹方式部署在weblogic(10.3.3)上时一切正常,换成war包部署,运 ...

随机推荐

  1. ARM920T系统总线时序分析

    一.系统总线时序图 二.分析 第一个时钟周期开始,系统地址总线给出需要访问的存储空间地址. 经过Tacs时间后,片选信号也相应给出,并且锁存当前地址线上地址信息. 再经过Tcso时间后,处理器给出当前 ...

  2. Memento:客户端瘦身

    说是客户端瘦身,其实备忘录模式的本质让调用客户端职责减轻,将客户端的对于实现比如数据恢复之类细节的内容封装在操作类之中.其实面向对象的一重要方面就是划分清楚职责,这样可以减少改到造成的影响,便于扩展. ...

  3. PHP之路——Redis安装

    windows: redis下载链接:https://github.com/ServiceStack/redis-windows 然后编辑redis.windows.conf文件,我看网上有的教程说编 ...

  4. CALayer 为什么选择 cg 开头 而 不选择 UI 开头

    CALayer  的属性  为什么选择 cg 开头  而 不选择 UI 开头 , 也就是说  为啥要选择 比如 .CGColor      等

  5. 【竞品分析】Android音乐播放器的竞品分析

    迄今为止最长的一篇博客,各位看官笑纳~~ 本次分析基于Android平台,选取了几款我体验过的播放器进行比较分析.主要分为两类,一类是大而全的,功能全面,可满足用户管理歌曲.导入导出歌单等多方面需求, ...

  6. BZOJ 2301: [HAOI2011]Problem b 莫比乌斯反演

    2301: [HAOI2011]Problem b Time Limit: 50 Sec  Memory Limit: 256 MBSubmit: 1007  Solved: 415[Submit][ ...

  7. Andoid 学习笔记 AppCompatEditText

    android.support.v7.widget.AppCompatEditText 只有浮动标签 style中添加 <style name="txt_lab" paren ...

  8. android 通过eclipse混淆代码 打包 + proguard 总结

    android应用程序的混淆打包 1 . 在工程文件project.properties中加入下proguard.config=proguard.cfg , 如下所示: target=android- ...

  9. 服务器RAID配置全程与RAID基础知识

    服务器RAID配置全程 一.RAID介绍 RAID是Redundent Array of Inexpensive Disks的缩写,直译为“廉价冗余磁盘阵列”,也简称为“磁盘阵列”.后来RAID中的字 ...

  10. 天津Uber优步司机奖励政策(1月18日~1月24日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...