1. 开发步骤
1.1 定义前端控制器
Web应用是基于请求/响应架构的应用,现今的MVC Web框架,都需要在web.xml文件中配置核心Servlet / Filter。这里需要定义前端控制器DispatcherServlet 来拦截所有的用户请求。
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<servlet>
<!-- servlet名称 -->
<servlet-name>springMVC</servlet-name>
<!-- servlet 对应的java类 -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 参数设置 -->
<init-param>
<!-- 设置springmvc配置文件的路径 -->
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/springmvc-config.xml</param-value>
</init-param>
<!-- 设置web应用启动时,该servlet的启动优先级,越小越高-->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<!-- 请求对应的servlet名称 -->
<servlet-name>springMVC</servlet-name>
<!-- 监听的范围 -->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
1.2 处理用户请求的Handle类
这一部分是所有MVC框架中必不可少的一部分,可以通过实现Controller接口或使用@Controller注解。负责处理前端控制器发送过来的请求。
1.3 配置Handle
可以在springmvc配置文件中,配置自定义的Handle类:
<bean name="/hello" class="com.controller.Hello"/>
也可以让框架自动扫描加了注解 @Controller 的类,配置:
<context:component-scan base-package="com.controller"/>
<mvc:annotation-driven/>
1.4 视图
jsp、html等
1.5 一个demo的目录结构
2. 运行流程
- 用户向服务器发送请求
- DispatcherServlet 拦截并解析用户发来的请求,得到URL(请求资源标识符),根据该URL调用HandlerMapping获取该Handler配置的所有相关对象,这些对象会被封装到HandlerExecutionChain对象当中返回。
- DispatcherServlet会根据上一步得到的Handler选择一个HandlerAdapter,以便调用实际的开发人员定义的处理请求方法。
- 提取请求中的模型数据后,开始执行Handler中的方法。在填充Handler方法的形参过程中,根据配置,spring将做一些额外的工作:
4.1 消息转换, 将请求消息(如JSON、XML等数据)转换成一个对象,将对象转换为指定的响应信息。
4.2 数据转换,对请求消息进行数据转换,如String -> Integer、Double等
4.3 数据格式化,对请求消息进行数据格式化,如将字符串转换成格式化数字或格式化日期等。
4.4 数据验证, 验证数据的有效性,验证结果存储到BindingResult或Error中。 - Handler执行完成后,向DispatcherServlet返回一个ModelAndView对象
- 根据ModelAndView选择一个ViewResolver,并返回给DispatcherServlet
- ViewResolver结合Model和View来渲染视图
- 将渲染结果返回给客户端