一、首先说明一点:所谓的基于Convention插件的约定优于配置的使用,并不是严格意义上的零配置,struts.xml文件并不能完全舍弃。

获得Convention插件功能,所必需的jar包有:|asm-x.x.jar|asm-commons-x.x.jar|struts2-convention-plugin-x.x.jar|

如果将struts2-config-browser-plugin-x.x.jar放入项目中,则可以通过http://{ip}:{port}/{Application}/config-browser/actionNames.action来查看应用中的映射关系

其中常用的配置信息有

Convention插件的常量
struts.convention.action.disableJarScanning 设置是否从Jar包里搜索Action类。如果开发者喜欢将Acion类打包成JAR,则应将该常量设为true。默认值为true。
struts.convention.action.packages Convention插件以该常量指定包做为根包来搜索Action类
struts.convention.result.path 设置Convention插件定位仕途资源的根路径。默认值为/WEB-INF/content
 struts.convention.result.flatLayout  如果设置为false,则可以将是土页面放置到Action对应的目录下(无须放入WEB-INF/content)
 struts.convention.action.suffix  Convention搜索Action类的类名后缀,默认值为Action
 struts.convention.action.disableScanning  是否禁止通过包扫描Action。默认值是false
 struts.convention.action.mapAllMatches 设置即使没有@Action注解,依然创建Action影射。默认值为false 
 struts.convention.action.checkImplementsAction  设置是否将实现了Action接口的类映射成Action,默认值是false
 struts.convention.default.parent.package  设置Convention映射的Action所在包的默认父包,默认值是convention-default
 struts.convention.action.name.lowercase  设置映射Action时,是否将Action的name属性值转换为所有字母小写,默认值是false
 struts.convention.action.name.separator  设置映射Action时指定Acion的name属性值各单词之间的分隔符,默认值是中划线
 struts.convention.package.locators   Convention插件使用该常量指定的包做为搜索Action的根包。默认值是action,actions,struts,struts2
 struts.convention.package.locators.disable  指定禁止从Action的根包里搜寻Action。默认值是false
 struts.convention.exclude.packages  指定排除在搜索Action之外的包。默认值为org.apache.struts.*,org.apache.struts2.*,
 struts.convention.packae.locators.basePackage  如果指定了该常量,Convention只会从以该常量值开始的包中搜索Action类
 struts.convention.relative.result.types  指定Convention映射Result时默认支持的结果类型,默认值是dispatcher,velocity,freemarker
 struts.convention.redirect.to.slash  设置是否重定向到斜线(/)。例如用户请求/foo,但/foo不存在时,如果设置该常量为true则可重定向到/foo/。默认值是true

二、每个Action的name属性,根据该Action的类名映射,映射Action的name时,遵循如下两步规则。

1.如果该Action类名包含Action后缀,将该Action类名的Action后缀去掉。否则不做任何处理。

2.将Action类名的驼峰写法转成中划线写法,所有字母小写。

例如:LoginAction映射的Action的name属性为login,GetBooks映射的Action的name属性为get-books,AddEmployeeAction映射的Action的name属性为add-employee。

三、Action处理用户请求以后会返回一个字符串做为逻辑视图,该逻辑视图必需映射到实际的物理视图。Convention默认也为作为逻辑视图和物理视图之间的映射提供了约定。

默认情况下,Convention总会到Web应用的WEB-INF/content路径下定位物力资源,定位资源的约定时actionName+resultcode+suffix。当某个逻辑视图找不到对应的物理视图资源时,Convention会自动试图使用actionName+suffix作为物理视图资源。

四、Action处理结束后如果不是进入视图页面,而是进入另外一个Action形成Action链的话,则通过Convention插件只需要遵守如下三个约定即可。

1.第一个Action返回的逻辑视图字符串没有对应的是视图资源

2.第二个Action与第一个Action处于同一个包下

3.第二个Action映射的URL为:firstactionName+resultcode

例如第一个Action类名为FirstAction,并且返回second字符串,则第二个Action的类名为FirstSecondAction,且两个Action在同一个包下,且视图资源中没有first-second.jsp或者first.jsp的物理视图资源。

struts2基于Convention插件的约定映射使用的更多相关文章

  1. Struts2的Convention插件

    Struts2的Convention插件的作用:在Struts2中的/lib/struts2-convention-plugin-x.x.xx.x.jar Convention插件会自动搜索位于act ...

  2. Convention插件与“约定”支持

    主要用于Action映射和Result映射 struts2-convention-plugin-2.3.16.3.jar 会将 |--实现了com.opensymphony.xwork2.Action ...

  3. Struts2 Convention插件的使用(1)

    刚刚查阅官方文档(convention-plugin.html)并学习了Struts2的Convention插件,文章这里只作为一个笔记,建议大家去看官方文档比较清晰和全面. 需要在项目添加这些包 c ...

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

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

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

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

  6. struts2 Convention插件好处及使用

    现在JAVA开发都流行SSH.而很大部分公司也使用了struts2进行开发..因为struts2提供了很多插件和标签方便使用..在之前开发过程中总发现使用了struts2会出现很多相应的配合文件.如果 ...

  7. struts2 convention插件

    1.struts2自2.1以后推荐使用Convention Plugin支持struts零配置支持(引入jar:struts2-convention-plugin-2.x.x.jar)①convent ...

  8. Struts2 Convention插件的使用(4)使用@Action注解返回json数据

    package com.hyy.action; import java.util.HashMap; import java.util.Map; import org.apache.struts2.co ...

  9. Struts2零配置介绍(约定访问)

    从struts2.1开始,struts2 引入了Convention插件来支持零配置,使用约定无需struts.xml或者Annotation配置 需要 如下四个JAR包 插件会自动搜索如下类 act ...

随机推荐

  1. 经典sql总结(1)

    1.表示info 信息,字段为Id和res,如何得到如下结果

  2. POJ 1458 Common Subsequence 最长公共子序列 LCS

    LCS #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> ...

  3. HDU5643-King's Game

    BestCoder上的题,直接贴网站上的题目和题解了.很棒的题. 问题描述为了铭记历史,国王准备在阅兵的间隙玩约瑟夫游戏.它召来了 n(1≤n≤5000) 个士兵,逆时针围成一个圈,依次标号 1,2, ...

  4. poj3177--Redundant Paths(边的双连通)

    有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新建多少条路,使得任何两个牧场之间至少有两条独立的路.两条独立的路是指:没有公共边的路,但可以 ...

  5. A Tour of Go If with a short statement

    Like for, the if statement can start with a short statement to execute before the condition. Variabl ...

  6. grep -P的一个小问题

    用grep时,发现一个怪异的问题. 背景:grep -E表示用扩展的正则表达式.grep -P 表示用perl正则表达式,区别:http://www.cnblogs.com/wangkangluo1/ ...

  7. JS获取浏览器可视区域尺寸

    本文所说的是浏览器窗口的可视区域大小,不是浏览器窗口大小,也非页面尺寸. 在没有声明DOCTYPE的IE中,浏览器显示窗口大小只能以下获取: document.body.offsetWidth doc ...

  8. 史上最全的ASP.NET MVC路由配置,以后RouteConfig再弄不懂神仙都难救你啦~

    继续延续坑爹标题系列.其实只是把apress.pro.asp.net.mvc.4.framework里的CHAPTER 13翻译过来罢了,当做自己总结吧.内容看看就好,排版就不要吐槽了,反正我知道你也 ...

  9. Lua 第一个应用程序 Hello World

    lua 开发环境的搭建 现已windows系统为例,演示一下lua环境的搭建. Lua_v5.1.4 下载地址 http://code.google.com/p/luaforwindows/ 点击&q ...

  10. 使用dispatch_once:创建单列

    无论是爱还是恨,你都需要单例.实际上每个iOS或Mac OS应用都至少会有UIApplication或NSApplication. 什么是单例呢?Wikipedia是如此定义的: 在软件工程中,单例是 ...