AJAXJS MVC 使用教程之五 過濾器

2021-10-08 17:00:31 字數 1881 閱讀 4871

過濾器的主要目的是攔截每次請求之前和之後的一些操作。有別於 servlet 標準過濾器,這是 mvc 框架中重寫的過濾器。為簡化概念,框架中不單獨另設 aop 機制,但可把過濾器當作 aop 的代替品。其發揮如下作用:初始化資料庫連線、日誌記錄、許可權校驗等等。

如下例子中註解@mvcfilter引入了資料庫連線過濾器 databasefilter,通過過濾器before()方法在list()執行之前呼叫了資料庫連線的邏輯。除此之外,@authority也是過濾器註解,引入 privilegefilter 實現許可權的校驗,註解的 value 屬性是建立privilegefilter 所必需的構造器引數。

@get

@mvcfilter

(filters =

)@authority

(filter = privilegefilter.

class

, value = rightconstant.article_online)

public string list

(@queryparam

(start)

int start,

@queryparam

(limit)

int limit)

mvcfilter 的 filters 屬性是 filteraction 介面派生類的陣列,型別為class extends filteraction>。當使用者自定義過濾器時須實現 filteraction 介面,給出before(filtercontext ctx)after(filterafterargs ctx)的實現。介面 filteraction 原始碼如下。

package com.ajaxjs.web.mvc.filter;

/** * 過濾器動作

* * @author sp42 [email protected]

*/public

inte***ce

filteraction

filtercontext/filterafterargs 均是前置/後置方法所需的引數列表,使用者可按需呼叫。值得注意是方法的 boolean 型別返回值,決定了後續方法是否繼續執行。前置方法before()返回 true 是一般正常情況,控制器方法會繼續執行;若before()返回 false 或丟擲異常會發生如下兩件事:一、中止後續的過濾器執行;二、控制器方法不會執行。沒有了控制器執行的結果,自然也不能按原流程返回結果給客戶端。此時有兩種分支可供使用者選擇:

1、後置方法after()引數中的filterafterargs.isbeforeskip屬性就是前置方法為 false 時的狀態,使用者在after()實現中應判斷isbeforeskip而給出相應的 response 響應。2、如果想簡單一點,可在before()中丟擲異常,那樣控制器也會接受到異常進而轉化為 response 響應輸出(可相容 html/json 格式)。後者的做法更簡單直接一點。本來多數情況下,若前置方法不能滿足,則後面的未執行邏輯亦無須執行,除非有需要進行特定情況的處理。

框架中內建若干實用的過濾器供使用者使用,如下表所示,在com.ajaxjs.framework.filter.*包和使用者模組的com.ajaxjs.user.filter.*

Vbs指令碼程式設計簡明教程之五

錯誤處理 引發錯誤的原因有很多,例如使用者輸入了錯誤型別的值,或者指令碼找不到必需的檔案 目錄或者驅動器,我們可以使用迴圈技術來處理錯誤,但是vbs本身也提供了一些基本技術來進行錯誤的檢測和處理。1 最常見的錯誤是執行時錯誤,也就是說錯誤在指令碼正在執行的時候發生,是指令碼試圖進行非法操作的結果。例...

Tkinter使用教程之Android測試工具

實戰解析 from tkinter import from tkinter import ttk def create window 建立視窗 root tk root.title androidtool root.geometry 360x282 root.resizable 0,0 標題行功能 ...

git使用教程之了解git

1 理解git快照 快照的作用就相當於將舊檔案所佔的空間保留下來,並且儲存乙個引用,而新檔案中會繼續使用與舊檔案內容相同部分的磁碟空間,不同部分則寫入新的磁碟空間。git有乙個head指標,這個指標可以移動,這個指標移動到哪個快照,你就可以檢視該快照也就是當時的狀態。2 git的三種狀態 已提交 c...