zoukankan      html  css  js  c++  java
  • struts2基于Convention插件的约定映射使用

    一、首先说明一点:所谓的基于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的物理视图资源。

  • 相关阅读:
    一个由"2020年1月7日 京东出现的重大 Bug 漏洞"引起的思考...
    Jmeter查看结果树之查看响应的13种方法[详解] [9]
    Jmeter 查看结果树之界面功能介绍 [8]
    soapUI 之 测试文件上传 [6]
    SoapUI 之 webService 接口测试 [5]
    SoapUI 关联之Property Transfer、JSONPath、Xpath [4]
    SoapUI 参数化之Properties、DataSource [3]
    找不到工作?!请确认你投简历的姿势对了么?
    Jmeter 从数据库查询多个字段,依次传给登录接口怎么实现?[7]
    Jmeter 之测试片段、Include Controller、模块控制器应用 [6]
  • 原文地址:https://www.cnblogs.com/yoran-yang/p/5146962.html
Copyright © 2011-2022 走看看