`
collegeyuan
  • 浏览: 31165 次
  • 性别: Icon_minigender_2
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

struts2根据Convention约定开发

 
阅读更多

Struts2引入Convention插件来支持零配置。

     在项目下加入struts2-convention-plugin-2.3.16.3.jar包

     Action的搜索和映射约定如下:

      对于Convention插件而言,它会自动搜索位于action、actions、struts、struts2包下的所有Java类,Convention插件会把如下两种java类当成Action处理。

     1)、所有实现com.opensymphony.xwork2.Action类的java类。

     2)、所有类名以Action结尾的Java类。

     下面的这些类是符合Convention插件的java类:

      org.crazyit.app.actions.LoginAction

      org.crazyit.app.actions.books.getBooks

      org.crazyit.app.action.LoginAction

      org.crazyit.app.struts.auction.bid.BidAction

      org.crazyit.app.struts2.wage.hr.AddEmployeeAction

      Struts2的Convention允许设置如下三个常量:

          1)、struts.convention.exclude.packages:指定不扫描哪些包下的java类。

          2)、struts.convention.package.locators:Convention插件使用该常量指定包作为搜寻Action的根包。

                    对于action.lee.LoginAction类,按照约定原本应该映射到/lee/login;如果将该常量设置为lee,则

                   该Action将会映射到/login

          3)、struts.convention.action.packages:Convention插件以该常量作为根包来搜索action类。

                 Convention除了扫描action、actions、struts、struts2包下的类外,还会扫描该常量指定的一个

                 或包,从中发现action类。

       找到合适的Action类后,Convention插件会按照约定部署这些Action.部署Action时,action、actions、          struts、struts2会被映射成根命名空间,而这些包的子包则被映射成对应的命名空间。如下:

            org.crazyit.app.actions.LoginAction 映射到根命名空间  /

            org.crazyit.app.actions.books.getBooks 映射到/books/命名空间

            org.crazyit.app.action.LoginAction   映射到根命名空间 /

            org.crazyit.app.struts.auction.bid.BidAction  映射到/auction/bid/命名空间

            org.crazyit.app.struts2.wage.hr.AddEmployeeAction 映射到/wage/hr/命名空间

       Action的name属性根据该Action的类名映射,遵循以下规则:

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

              2)、将Action类名的驼峰写法(每个单子的首字母大写,其它字母小写)转换成中划线写法。

              如下:

                   org.crazyit.app.actions.LoginAction 映射到/login.action

                   org.crazyit.app.actions.books.getBooks 映射到/books/get-books.action

                   org.crazyit.app.action.LoginAction 映射到/login.action

                   org.crazyit.app.struts.auction.bid.BidAction 映射到/aution/bid/bid.action

                   org.crazyit.app.struts2.wage.hr.AddEmployeeAction映射到/wage/hr/add-employee.action

       示例程序如下:

             package org.crazyit.app.action.user;

             public class LoginAction extends ActionSupport{

                    private String username;

                    private String password;

                    //省略setter和getter方法

                    public String execute() throws Exception{

                          if(getUsername().equals("admin") && getPassword().equals("password"){

                             return SUCCESS;

                            }

                           return ERROR;

                    }

              }

           该Action被映射到如下URL:/user/login

           定义如下form,将会提交到LoginAction处理。

            <s:form action="user/login“>

                        ...........

            </s:form>

    Result约定:

        Action处理用户请求后返回一个字符串作为逻辑视图,该逻辑视图映射到实际的物理视图才有意义。Convention默认为逻辑视图和物理视图之间提供了约定。

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

        例如:org.crazyit.app.action.user.LoginAction返回success字符串,Convention优先考虑使用WEB-INF/content/user/目录下的login-success.jsp作为视图资源,如果找到不文件,login.jsp也可作为对应的视图资源。

    Action链的约定

    如果希望一个Action处理结束后不是进入另外一个视图界面,而是进入另外一个Action形成Action链,则通过Convention查询,遵循以下三个约定即可:

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

        2)、第二个Action与第一个Action处于同一包下。

        3)、第二个Action映射的URL为:firstactionName+resultcod

    例如,希望org.crazyit.app.action.FirstAction处理结束后进入第二个Action继续处理。下面先看第一个Action的代码:

         程序清单  :FirstAction

         package org.crazyit.app.action;

         public class FirstAction extends ActionSupport{

                public String execute(){

                    System.out.println("进入第一个Action“);

                     addActionMessage("第一个Action的提示信息");
                      return "second";

                 }

          }

         为了让该Action处理用户请求后进入第二个Action,而不是进入视图页面,因此该应用WEB-INF/content下不能提供first-second.jsp或second.jsp

         第二个Action的映射URL应该是first-second,因此第二个Action的类名应该是FirstSecond.下面是第二个Action的代码.

        package org.crazyit.app.action;

         public class FirstSecondAction Extends ActionSupport{

                public String execute(){

                     System.out.println("进入第二个Action“);

                      addActionMessage("第二个Action的提示信息");

                      return "SUCCESS";
                }
           }
      提供以上两个Action后,当first Action处理用户请求结果后,系统将自动调用org.crazyit.app.action.FirstSecondAction 处理用户请求。当浏览器向/first发送请求后,将在Tomcat控制台上看到如下信息:
          进入第一个Action
          进入第二个Action

    --------------------------------------------------------------------------------------------------------------------

struts2的Convention插件主要集中管理Action和Result映射之上。而Struts2的配置文件处理管理Action、result外,还需要管理拦截器、异常处理等相关信息。Convention使用"约定“来管理这些配置。除此之外,convention还运行使用注解管理Action和Result管理,从而覆盖Convention的约定。

分享到:
评论

相关推荐

    Struts2插件convention

    Struts2 Convention插件作为框架中的一员,通过其独特的约定优于配置的特性,为Java Web开发领域带来了新的解决方案。它简化了配置流程,提升了开发效率,使得开发者能够更加专注于业务逻辑的实现,是值得推荐的开发...

    struts2-convention-plugin-2.3.32.jar

    综上所述,"struts2-convention-plugin-2.3.32.jar"是Struts2框架中一个强大且实用的插件,它通过约定优于配置的方式提高了开发效率。然而,理解和掌握其工作原理以及如何有效地结合使用注解是成功运用此插件的关键...

    struts2的convention配置详解 很全

    Convention插件是Struts2提供的一种自动化配置方式,它旨在减少XML配置文件的数量,提高开发效率。这篇详尽的指南将深入讲解Struts2的Convention配置,让你更好地理解和应用这一特性。 首先,了解什么是Conventions...

    struts2-convention-plugin-2.1.6.jar

    总的来说,`struts2-convention-plugin-2.1.6.jar`是Struts2框架的一个增强,它通过约定自动化了许多配置工作,提高了开发效率,但也需要注意其潜在的局限性和对代码可读性的影响。合理运用,可以显著提升开发体验和...

    struts2采用convention-plugin实现零配置

    然而,随着版本的更新,Struts2引入了一个名为Convention Plugin的新特性,旨在简化配置过程,实现所谓的“零配置”开发。 **什么是Struts2 Convention Plugin?** Convention Plugin是Struts2的一个插件,它基于...

    简述STRUTS2_Convention零配置

    总的来说,STRUTS2 Convention零配置大大减少了XML配置文件的需求,提高了开发效率。通过合理的包结构和类命名,开发者可以快速构建出符合MVC模式的应用,同时享受到自动化的便利。然而,需要注意的是,过度依赖约定...

    struts2的Convention插件说明书(中文版)

    Struts2的Convention插件是一种自动化配置工具,从2.1版本...总的来说,Struts2的Convention插件通过约定优于配置的理念,极大地提高了开发效率,降低了维护成本,使得开发者能够更加专注于业务逻辑而不是框架配置。

    Struts2 Convention Plugin中文文档 Annotion

    总的来说,Struts2 Convention Plugin 提供了一种高效、简洁的方式来构建 Struts2 应用,减少了配置工作,提升了开发效率。同时,它允许通过注解进行高度定制,使应用程序更加灵活和可扩展。开发者可以通过调整插件...

    STRUTS2 Convention零配置

    Struts2 Convention插件提供了一种全新的、更为简洁的零配置方式,它通过约定而非配置的方式来管理Action及其结果视图,大大简化了Struts2应用的开发流程。通过上述配置和使用方法,开发者可以更高效地构建Web应用...

    Struts2_Convention_Plugin中文文档

    这个插件引入了一种约定优于配置(Convention over Configuration)的理念,允许开发者在不编写大量XML配置文件的情况下,快速搭建基于Struts2的应用程序。以下是关于Struts2 Convention Plugin的详细知识点: 1. *...

    struts2 约定原则

    stuts2 项目开发action 类 action 视图文件约定规则

    struts2-Convention插件使用

    ### Struts2-Convention插件使用详解 ...Struts2-Convention插件极大简化了Struts2应用的开发与维护,通过约定优于配置的原则,减少了繁琐的XML配置需求,使开发者能够更加专注于业务逻辑的实现。

    Struts2约定优于配置

    Struts2 约定优于配置 Struts2 框架中,有一个非常重要的概念,即...Struts2 的约定优于配置可以通过 Convention 插件来实现 Action 路径到 Result 页面路径的自动映射。这个机制可以减少配置的必要性,提高开发效率。

    struts2-convention-plugin

    Struts2 Convention Plugin极大地简化了Struts2应用的开发和维护过程,通过遵循约定优于配置的原则,减少了大量的手动配置工作,使得开发人员能够更加专注于业务逻辑的实现。对于那些追求高效开发流程的项目而言,这...

    Struts2+Convention+Plugin中文文档

    5. **运行应用**:启动服务器,访问相应的URL,Struts2会根据Convention规则自动处理请求。 **Convention插件中的常见注解:** 1. `@Action`:定义Action的名称、方法映射、结果类型等。 2. `@Results`:用于定义多...

    struts2-convention-plugin-2.3.4-sources

    这个“struts2-convention-plugin-2.3.4-sources”是Struts2框架的一个插件——约定优于配置(Convention Over Configuration)插件的源代码版本,版本号为2.3.4。这个插件是Struts2核心功能的扩展,旨在简化项目...

    Struts2 convention

    Struts2 Convention插件是基于Apache Struts2框架的一个组件,它引入了一种约定优于配置(Convention over Configuration)的理念,简化了MVC应用的开发。这个插件在默认情况下可以根据类和方法的名字来自动映射URL...

Global site tag (gtag.js) - Google Analytics