<bean id="articleController" class="example.ViewArticleController">
</bean>
ViewArticleController處理請求,然后生成Model,并選擇一個View:
public class ViewArticleController implements Controller {
private Facade facade;
public void setFacade(Facade facade) { this.facade = facade; }
public ModelAndView handleRequest(HttpServletRequest request,
HttpServletResponse response) throws Exception {
// 獲得參數:
int articleId = Integer.parseInt(request.getParameter("articleId"));
// 使用facade處理請求:
Article article = facade.getArticle(articleId);
// 生成Model:
Map map = new HashMap();
map.put("article", article);
// 返回Model和視圖名“skin/blueskysimple/article”:
return new ModelAndView("skin/blueskysimple/article", map);
}
}
最后,skin/bluesky/article視圖會將結果顯示給用戶。
我們注意到,ViewArticleController并不自己查找或者創建Facade,而是由容器通過setFacade(Facade)方法設置的,這就是所謂的IoC(Inversion of Control)或者Dependency Injection。容器通過配置文件完成所有組件的初始化工作:
<!-- 聲明一個Facade -->
<bean id="facade" class="example.Facade" />
<!-- 聲明一個Controller -->
<bean id="articleController" class="example.ViewArticleController">
<!-- 為articleController設置facade屬性 -->
<property name="facade">
<!-- 將名為facade的Bean的引用傳進去 -->
<ref bean="facade" />
</property>
</bean>
以上配置文件實現的功能大致為:
Facade facade = new Facade();
ViewArticleController articleController = new ViewArticleController();
articleController.setFacade(facade);
但是我們不必編寫以上代碼,只需在xml文件中裝配好我們的組件就可以了。所有組件由Spring管理,并且,缺省的創建模式是Singleton,確保了一個組件只有一個實例。
此外,所有自定義異常都是RuntimeException,Spring提供的AOP使我們能非常方便地實現異常處理。在Web層定義ExceptionHandler,處理所有異常并以統一的error頁面把出錯信息顯示給用戶,因此,在代碼中只需拋出異常,完全不必在Controller中處理異常:
<bean id="handlerExceptionResolver" class="org.crystalblog.web.ExceptionHandler" />
文章來源于領測軟件測試網 http://www.kjueaiud.com/