1、Spring MVC的目的
构建向Spring框架那样灵活和松耦合的Web应用程序。
2、Spring MVC中如何处理Request?
每当用户在Web浏览器中点击链接或者提交表单时,Request就开始工作了。
从离开浏览器开始到获取响应返回,Request会在经历过的每一站留下一些信息,也会获取一些信息。
DipatcherServlet——前端控制器Servlet,负责将Request发送给Spring MVC的Controller;
Handler Mapping——处理器映射,应用中会有多个控制器,DipatcherServlet需要知道发送给哪个控制器,所以会查询一个或多个HandlerMapping确定下一站。而Handler Mapping会根据Request所携带的URL信息进行决策;
Controller——控制器,Request到控制器后,会得到用户提交的信息,然后处理这些信息。实际中,设计良好的控制器本身只处理很少的工作,而是将业务逻辑委托给一个或者多个服务对象进行处理。控制器做的最后一件事就是把模型数据打包~~
Model——模型,是控制器在完成逻辑处理后,会产生的一些信息,这些信息需要返回给用户并在浏览器上显示。
View Resolver——视图解析器,原始模型产生后,需要通过View进行必要的格式化。View Resolver就是根据得到的逻辑视图名匹配一个View,告诉DipatcherServlet。DipatcherServlet知道由哪个视图渲染结果,Request的任务基本完成,还有最后一站去完成视图的实现。
View——视图,Request在这里交付数据模型,完成任务。View使用模型数据渲染输出,这个输出通过Response对象传递给客户端。
3、传统方式,在Web应用程序中配置DipatcherServlet
传统方式中,DipatcherServlet这样的Servlet会配置在web.xml文件中,web.xml会放到应用的war包中。
<!--配置springmvc DispatcherServlet(中心控制器)-->
<servlet>
<servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!--Sources标注的文件夹下需要新建一个spring文件夹-->
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<servlet-name>springMVC</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
4、新方式基于Servlet 3规范和Spring 3.1,可以使用Java将DipatcherServlet配置在Servlet容器中,而不再使用web.xml。(同时使用也没问题)
了解凡是扩展(继承)了AbstractAnnotationConfigDipatcherServletInitializer的类,都会自动配置DipatcherServlet和Spring的应用上下文,Spring的应用上下文会位于应用程序的Servlet上下文中。
这个类中三个方法:
String[] getServletMappings()、getRootConfiClasses()、getServletConfigClasses().(后两个返回类,即xxx.class)
5、两个应用上下文(基于Java配置)
当DipatcherServlet启动时,它会创建Spring应用上下文,并加载配置文件or配置类中所声明的bean。
在Spring Web应用中,通常会有另外一个应用上下文,这个由ContextLoaderListener(Servlet监听器)创建。
我们希望DipatcherServlet加载包含web组件的bean,如控制器、试图解析其以及处理及映射,而ContextLoaderListener加载应用中的其它bean,这些bean通常是驱动应用后端的中间层和数据层组件。
实际上,AbstractAnnotationConfigDipatcherServletInitializer会同时创建DipatcherServlet和ContextLoaderListener。
6、启用Spring MVC
一,XML配置中,使用<mvc:annotation-driven>启用注解驱动的Spring MVC;
二,基于Java进行配置,即创建一个Java类进行配置。