1.申明:
首先说明一下convention插件,它是Struts 2中进行注解的时候必须导入的包,提供的是注解功能,同时在Struts2的官方文档中说了,它还提供了实现开发零配置的功能,可以使开发者专注于编码,不用一边编写java一边编写xml。
当Struts 2启动的时候,convention插件会进行一次Action的查找,然后按照指定的规则,生成namespaces和Action 的名字,当用户访问的时候,只需要根据对应的规则进行访问,就能访问到指定的Action了。
2.生成规则
在此说明一下convention插件对Action的查找规则和URL的生成规则,Convention 插件默认扫描继承了action类的子类和文件名以Action结尾的java文件,默认找的包是struts, struts2, action 或 action的包。例如:
com.boke.cms.action;
com.boke.cms.action.manage;
com.boke.struts.company.details.ShowCompanyDetailsAction
生成namespaces
找到对应的类后,Convention 插件会根据包名生成namespaces地址
com.example.actions.MainAction -> /
com.example.actions.products.Display -> /products
com.example.struts.company.details.ShowCompanyDetailsAction -> /company/details
生成最终访问地址
然后根据类名,去除Action后缀,然后取其余部分小写,若有大小写混合,以 - 进行连接生成最终访问地址
com.example.actions.MainAction -> /main
com.example.actions.products.Display -> /products/display
com.example.struts.company.details.ShowCompanyDetailsAction -> /company/details/show-company-details
返回值
对于返回值,Convention 插件会根据Action的名字+分隔符+返回值.jsp 的结果去指定目录下查找对应的结果文件。
转载地址: http://www.cnblogs.com/Seanit/p/4620743.html
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<!-- 指定由spring负责action对象的创建 -->
<constant name="struts.objectFactory" value="spring" />
<!-- 指定默认编码集 ,作用于HttpServletRequest的setCharacterEncoding()和freemarker,vilocity的输出 -->
<constant name="struts.i18n.encoding" value="UTF-8" />
<!-- 当struts配置文件修改时是否自动加载 -->
<constant name="struts.configuration.xmlreload" value="true" />
<!-- 开发模式下打印详细的错误信息,默认为false -->
<constant name="struts.devMode" value="true" />
<!-- 标准的UI主题,默认的UI主题为xhtml,可以为simple,xhtml或ajax -->
<constant name="struts.ui.theme" value="xhtml" />
<!-- 让struts2支持动态方法调用 -->
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<!-- 结果result页面存放位置 -->
<constant name="struts.convention.result.path" value="/WEB-INF/content/" />
<!-- 默认扫描以Action结尾的类 -->
<constant name="struts.convention.action.suffix" value="Action" />
<!-- 指定的包会被进行扫描 -->
<constant name="struts.convention.package.locators" value="action,actions,struts,struts2" />
<!--用于生成action名字时的分隔符,比如DemoCustAction会被映射成为demo_cust,同时用于形成返回文件,
比如访问DemoAction,return的值为input,插件会去指定目录下查找demo_input.jsp文件 -->
<constant name="struts.convention.action.name.separator" value="_" />
<!-- Action类文件重新自动加载 -->
<constant name="struts.convention.classes.reload" value="false" />
<package name="convention-default" extends="struts-default">
</package>
</struts>