<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" />
文章来源于领测软件测试网 https://www.ltesting.net/