jodd mvc框架 madvoc 教程(2):Actions 介紹

        action方法定義在action類裏面,它用來映射url路徑(action path),modvoc 使用命名慣例(CoC)和註解來定義action路徑。默認狀況下,action的路徑映射由包名(package),類(class)和方法名(method)來決定的,它的慣例規則以下: html

action路徑說明

    path = /action包/action類.action方法.後綴
java

    後綴:默認狀況下,後綴的值是.html,能夠經過modvoc全局配置;
web

    action方法:action路徑的一部分,默認是方法名;
框架

    action類:action路徑的一部分,默認是類名(非大小,多個單詞下排除最後一個單詞,如:類名是userAction,則路徑是user);
ide

    action包名:action包名是action路徑可選擇的一部分。
post

默認狀況下,每一個路徑的部分都是來之方法,類和包名的定義,而後,每一個部分均可以明確的用相應註解值來定義。 網站

action類和action方法

    如下是簡單的實體類和方法: url

@MadvocAction
    public class HelloAction {

        @Action
        public void world() {
        }
    }

這個action類和方法映射的路徑是:/hello.world.html正如上面所說,路徑中的每一個部分均可以明確的用註解值來定義,咱們能夠簡單的修改以下: spa

@MadvocAction("holla")
    public class HelloAction {

        @Action("mundo")
        public void world() {
        }
    }

經過以上的註解配置,它的映射的路徑是:/holla.mundo.html。 然而,以上都只是使用了簡單的字符串來定義路徑,咱們能夠經過如下類配置複雜的路徑: .net

@MadvocAction("foo/boo")
    public class HelloAction {

        @Action("zoo/hello.exec")
        public void world() {
        }
    }



以上的配置中,它的映射路徑是:/foo/boo.zoo/hello.exec.html 

在上面的例子中,咱們能夠經過在一個action類寫多個方法類映射多個路徑。

自定義後綴

在同一個網站中只有一個後綴是合理的,因此,咱們能夠在modvoc的全局配置來配置默認的後綴。可是,咱們也能夠經過@Action 註解的extension來定義每一個方法映射的後綴:

@MadvocAction
    public class HelloAction {
        @Action(extension="jpg")
        public void world() {
        }

        @Action(extension=Action.NONE)
        public void foo() {
        }
    }



以上的配置中,第一個方法映射到:/hello.world.jpg  第二個方法映射到: /hello.foo

    因爲madvoc框架很容易擴展,它很合適來爲action路徑和實現自定義行爲 擴展組件。例如:它很容易的爲任何的方法作好比 store... 開頭的擴展,或者 以.do做爲結尾。

完整的action路徑

    經過madvoc的@Action註解,咱們能夠來定義完整的action映射路徑。注意:必須之前綴「/」開頭。以下:

@MadvocAction
    public class HelloAction {

        @Action("/bonjour-monde.html")
        public void world() {
        }
    }



    明顯地,以上的action映射的路徑是:/bonjour-monde.html。當一個action路徑定義用「/」開頭的時候,則說明它使用了完整的action路徑,忽略了上一級或者幾級的配置(如包名,類名)。

action包

    默認狀況下,action包是被忽略的,沒有使用在action路徑中。但儘管如此,在action的包中設置爲路徑的一部分仍是有意義的,madvoc提供了一個方法來設置包爲action路徑的一部分。

    首先,這個特徵必須在root package中開啓,這樣會映射到action跟的路徑,這個設置在madvoc初始化的適合被設置,一個方法以下:

public class MyWebApplication extends WebApplication {

        @Override
        protected void init(MadvocConfig madvocConfig, ServletContext servletContext) {
            madvocConfig.getRootPackages().addRootPackageOf(IndexAction.class);
        }
    }

     root Package 根據包名和路徑定義。在上面的例子中,一個root package(indexAction)會映射到web的跟目錄(/)。

當root package被定義,madvoc則認爲action類的包:來至root package的偏移量(offset)會被當作action路徑的前綴,因此,package會被映射成爲一個文件夾,以下代碼:

package org.jodd.madvoc.doc;

    @MadvocAction
    public class HelloAction {

        @Action
        public void world() {
        }
    }



則會被映射到/doc/hello.world.html ,若是root package被設置到org.jodd.madvoc.的話。若是你指定了多個root package,必定要注意,千萬別重複映射了。

不少時候,咱們想集成一些action類在分開的子包下,可是又不想改變action的路徑(好比根目錄),咱們能夠指定@MadvocAction("/")在子包下,這樣,madvoc會映射這個包下全部的類到跟目錄下:

@MadvocAction("/")
    package com.....;

    import jodd.madvoc.meta.MadvocAction;


HTTP請求方法

默認狀況下,madvoc會忽略全部的http請求方法,不管是post,get仍是其餘,映射到的方法都會被執行。可是,madvoc也提供了註解@Action的method來控制http請求,以下代碼:

@MadvocAction
    public class FormAction {

        @Action(method = "POST")
        public void store() {
        }
    }

這個方法會映射到路徑:/form.store.html,同時只有是post方法的時候會被執行,get或者其餘方法則出現了404錯誤(page not found)。

默認的action方法

    經過以上的介紹,顯然的,madvoc使用了action的方法來映射action的路徑。此外,madvoc也考慮了一些路徑和方法的名字是無關的一些默認設置,好比那些咱們經常使用的頁面,好比index.html,about.html,error.html等。madvoc會忽略 execute 和 view的方法名字,因此,一下的action:

@MadvocAction
    public class IndexAction {

        @Action
        public void view() {
        }
    }

則會被映射到頁面 /index.html。若是有多個默認的方法被使用,madvoc會選擇最後一個方法來調用,或者拋出一個異常來指明指明action路徑的配置。此外,這些默認的方法名字均可以在madvoc的全局變量中自由的配置。

做爲選擇,註解 @Action能夠被設置爲「忽略」值,這樣,在action路徑映射的時候就會忽略這個方法的名字,所以,如下的代碼中和上面的代碼有相同的映射路徑。

@MadvocAction
    public class IndexAction {

        @Action(Action.NONE)
        public void foo() {
        }
    }

action的映射規則

接下來咱們經過一個表格來總結下ActionMethodParser 的默認的行爲。

相關文章
相關標籤/搜索