美文网首页JAVAEE
JAVAEE框架学习——Struts2——Convention插

JAVAEE框架学习——Struts2——Convention插

作者: So_ProbuING | 来源:发表于2018-06-21 10:42 被阅读3次

    struts2引入了Convention插件来支持零配置。不需要使用struts.xml进行配置,也不需要Annotation配置。

    使用Convention插件

    • 导包
      复制Struts2项目下的struts2-convention-plugin-xxx.jar

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

    • 所有实现了com.opensymphony.xwork2.Action的Java类
    • 所有类名以Action结尾的Java类

    常量配置

    • struts.convention.exclude.packages:指定不扫描哪些包下的Java类,位于这些包结构下的Java类将不会被自动映射成Action
    • struts.convention.package.locators:Convention插件使用该常量指定的包作为搜寻Action的根包
    • struts.convention.action.packages:Convention插件以该常量指定包作为根包来搜索Action类

    约定Action的搜索和映射

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

    com.probuing.actions.LoginAction 映射到/命名空间
    com.probuing.actions.books.GetBooks 映射到/books/命名空间
    com.probuing.action.Login 映射到/命名空间
    com.probuing.action.xxx.yyy 映射到/xxx/yyy命名空间
    com.probuing.struts2.wage.hr.Aasd 映射到/wage/hr/命名空间
    

    Action的映射

    Action的name属性(该Action所要处理的URL)根据该Action的类名映射

    • 如果该Action的类名包含Action后缀,将该Action类名的Action后缀去掉。否则不做任何处理
    • 将Action类名的驼峰写法转成中划线写法

    LoginAction 映射Action的name为login GetBooks映射的Action的name属性为 get-books

    com.xxx.actions.LoginAction  映射到/login
    com.xxx.actions.books.GetBooks 映射到/books/get-books
    com.xxx.actions.auction.bid.BidAction映射到/auction/bid/bid
    com.xxx.actions.wage.hr.AddEmployeeAction 映射到/wage/hr/add-employ
    

    采用Convention插件后 Action的代码没有什么变化.

    Result映射

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

    eg:com.xxx.action.user.Login 返回success字符串时,Convention有限考虑使用WEB-INF\content\user目录下的 login-success.jsp作为物理视图资源,如果找不到该文件,login.jsp也可作为对应的视图资源
    
    ### Action链的约定
    如果希望一个Action处理结果后不是进入视图,而是进入另一个Action形成Action链,约定为:
    * 第一个  Action返回的逻辑视图字符串没有对应的视图资源
    * 第二个Action与第一个Action处于同一个包下
    * 第二个Action映射的URL为:firstactionName+resultcode
    

    eg 有两个Action一个FirstAction 一个SecondAction
    当希望FirstAction处理结果后不是进入视图,而是进入SecondAction需要做

    • /WEB-INF/content下不能有first-second.jsp 或者first.jsp
    • SecondAction的映射URL应该是first-second 因此第二个类名应该是FirstSecond

    相关文章

      网友评论

        本文标题:JAVAEE框架学习——Struts2——Convention插

        本文链接:https://www.haomeiwen.com/subject/vhqqyftx.html