23.2 Spring MVC的控制器
和Struts2一样,Spring MVC框架的控制器也用来建立视图层和模型层的联系,Spring的控制器可以通过继承一些接口来实现,下面进行讲解。
23.2.1 核心控制器DispatcherServlet
DispatcherServlet是Spring MVC的核心控制器,其作用相当于Struts2的FilterDispatcher,负责对客户端的请求进行分发,把满足特定格式的请求交给业务控制器去处理。
1.DispatcherServlet的配置
【示例23-4】下面通过一段代码来说明在web.xml中如何配置DispatcherServlet。
- <context-param> <!--配置contextConfigLocation 参数-->
- <param-name>contextConfigLocation</param-name>
- <param-value>/WEB-INF/applicationContext-jdbc.xml</param-value>
- </context-param>
- <servlet> <!--配置DispatcherServlet -->
- <servlet-name>petclinic</servlet-name>
- <servlet-class>org.springframework.web.servlet.
DispatcherServlet</servlet-class> - <load-on-startup>2</load-on-startup>
- </servlet>
- <servlet-mapping> <!--为DispatcherServlet 建立映射-->
- <servlet-name>petclinic</servlet-name>
- <url-pattern>*.htm</url-pattern>
- </servlet-mapping>
上面的代码通过contextConfigLocation参数来定义Spring MVC的配置文件,这样当DispatcherServlet初始化时就会加载该文件中的配置信息。把DispatcherServlet的URL映射为*.htm,这样所有的以.htm结尾的请求都会被DispatcherServlet处理。
2.DispatcherServlet的工作流程
当DispatcherServlet接收到用户请求后,按照如下步骤进行处理。
(1)搜索封装配置文件信息的WebApplicationContext,并将它作为一个属性存储在请求对象中,这样DispatcherServlet就可以使用WebApplicationContext调用配置文件中定义的源。
(2)把本地化信息、主体信息也存储到请求对象上。
(3)根据配置文件搜索合适的业务处理器,并准备用于返回的ModelAndView。
(4)当业务处理器处理完业务逻辑后,根据WebApplicationContext中绑定的视图信息显示对应的视图。
23.2.2 控制器接口Controller
Controller接口是所有控制器接口的父类,所有Spring框架提供的控制器,以及所有用户自定义的控制器都得实现这个接口。
【示例23-5】该示例分析Controller.Java的源代码,如下所示。
- package org.springframework.web.servlet.mvc;
- import Javax.servlet.http.HttpServletRequest;
- import Javax.servlet.http.HttpServletResponse;
- import org.springframework.web.servlet.ModelAndView;
- public interface Controller {
- ModelAndView handleRequest(HttpServletRequest
request, HttpServletResponse - response) throws Exception;
- }