一、AbstractController(簡單控制器)
AbstractController使用方法:
首先讓我們使用AbstractController來重寫第二章的HelloWorldController:
?
public class HelloWorldController extends AbstractController {@Overrideprotected ModelAndView handleRequestInternal(HttpServletRequest req, HttpServletResponse resp) throws Exception {//1、收集參數//2、綁定參數到命令對象//3、調用業務對象//4、選擇下一個頁面ModelAndView mv = new ModelAndView();//添加模型數據 可以是任意的POJO對象mv.addObject("message", "Hello World!");//設置邏輯視圖名,視圖解析器會根據該名字解析到具體的視圖頁面mv.setViewName("hello");return mv;}
}
?
<!— 在chapter4-servlet.xml配置處理器 -->
<bean name="/hello" class="cn.javass.chapter4.web.controller.HelloWorldController"/>
?
從如上代碼我們可以看出:
1、繼承AbstractController
2、實現handleRequestInternal方法即可。
?
二、ServletForwardingController
將接收到的請求轉發到一個命名的servlet
三、BaseCommandController
命令控制器通用基類,提供了以下功能支持:
1、數據綁定:請求參數綁定到一個command object(命令對象,非GoF里的命令設計模式),這里的命令對象是指綁定請求參數的任何POJO對象;
?? commandClass:表示命令對象實現類,如UserModel;
?? commandName:表示放入請求的命令對象名字(默認command),request.setAttribute(commandName, commandObject);
?
2、驗證功能:提供Validator注冊功能,注冊的驗證器會驗證命令對象屬性數據是否合法;
?? validators:通過該屬性注入驗證器,驗證器用來驗證命令對象屬性是否合法;
?
該抽象類沒有沒有提供流程功能,只是提供了一些公共的功能,實際使用時需要使用它的子類。
四、AbstractCommandController
命令控制器之一,可以實現該控制器來創建命令控制器,該控制器能把自動封裝請求參數到一個命令對象,而且提供了驗證功能。
用于支持帶步驟的表單提交的命令控制器基類,使用該控制器可以完成:
1、定義表單處理(表單的渲染),并從控制器獲取命令對象構建表單;
2、提交表單處理,當用戶提交表單內容后,AbstractFormController可以將用戶請求的數據綁定到命令對象,并可以驗證表單內容、對命令對象進行處理。
?
五、AbstractFormController
用于支持帶步驟的表單提交的命令控制器基類,使用該控制器可以完成:
1、定義表單處理(表單的渲染),并從控制器獲取命令對象構建表單;
2、提交表單處理,當用戶提交表單內容后,AbstractFormController可以將用戶請求的數據綁定到命令對象,并可以驗證表單內容、對命令對象進行處理。
?
六、SimpleFormController
提供了更好的兩步表單支持:
1、準備要展示的數據,并到表單展示頁面;
2、提交數據數據進行處理。
?
七、CancellableFormController
?
?1、表單展示:和SimpleFormController一樣;
2、表單取消:和SimpleFormController一樣;
3、表單成功提交:取消功能處理方法為:onCancel(Object command),而且默認返回cancelView屬性指定的邏輯視圖名。
???那如何判斷是取消呢?如果請求中有參數名為“_cancel”的參數,則表示表單取消。也可以通過cancelParamKey來修改參數名(如“_cancel.x”等)。
?
?