過濾器的主要目的是攔截每次請求之前和之後的一些操作。有別於 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...