Spring MVC
基于模型-视图-控制器(Model-View-Controller)实现,该web框架用于构建灵活和松耦合的web应用程序。
图上的标注很详细,下面是个人理解:
1.请求进入DispatcherServlet(SpringMVC的前端控制器);2.由其查询一个或多个处理器映射(根据请求所携带的url信息决策);3.将请求发送给对应控制器;4.控制器完成逻辑处理后产生模型(model,一些需返回给用户并在浏览器上显示的信息),格式化后标示出用于渲染的视图名称 ;5.使用视图解析器将逻辑视图匹配到一个特定的视图;6.请求通过视图实现。
搭建SpringMVC
1.配置DispatcherServlet
将下列servlet加入web.xml
<servlet>
<servlet-name>yourName</servlet-name>
<servlet-class>
org.springframwork.web.servlet.DispatcherServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath: servlet-context.xml</param-value>
</init-param>
</servlet>
注:默认情况下Dispatcher在加载时会从一个基于这个Servlet名字的xml文件(youName-servlet.xml)中加载Spring应用上下文,可以像上文那样配置路径。
** 2.匹配DispatcherServlet**
<serlevt-mapping>
<servlet-name>yourName</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
注:通过将Dispatcher映射到/,声明它会作为默认的servlet并且会处理所有请求(包括对静态资源的)。也可用mvc:resources建立一个服务于静态资源的服务器。
在servlet-context.xml中加入
<mvc:resources mapping=”/resources/**” location=”/resources/” />
属性mapping代表路径必须以/resourses开始,也包含了其所有子类,location表明了提供服务的文件位置,
3.配置处理器映射
Spring自带多个处理器映射:
BeanNameUrlHandlerMapping, ControllerBeanNameHandlerMapping, ControllerClassNameHandlerMapping, DefaultAnnotationHandlerMapping, SimpleUrlHandlerMapping.
创建处理器映射,通常只需在Spring中配置一个Bean。如果没有找到,Dispatcher将创建 并使用BeanNameUrlHandlerMapping 和 DefaultAnnotationHandlerMapping。 恰好主要使用基于注解的控制器类,后者就满足需求了。
在servlet-context.xml中配置
<mvc:annotation-driven />
** 4.定义控制器**
Class前加注解 @Controller 声明该类为控制器类,
方法前加注解 @RequestMapping({“/”, ”/home”}) 指明该方法处理页面”/“或者”/home”路劲请求。 需在 servlet-context.xml中配置自动扫描
<context:component-scan base-package=”com/example/controller”/>
5.测试控制器
Junit测试,此步可略,主要妨出错。
6.解析视图
Spring自带多个视图解析器,以InternalResourceView 为例,它通过为逻辑视图名称添加前缀和后缀来确定Web应用程序中模板的路径。
假设已经将所有的jsp放在”/WEB-INF/views“目录下,可在sevlet-context中配置
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"></property>
</bean>
可通过添加<property name= ”viewClass” value= " "/> 引入其他视图支持。
注:之前使用过的一套框架使用的视图解析器为FreeMarker的,感觉现在比较流行于是搜了下http://my.oschina.net/HuifengWang/blog/300461#comment-list,这里解释的还不错。别的视图解析器网上细节很多,此处就不表了。
7.定义视图
就是写网页,与后端处理对应。
8.完成Spring应用上下文
将Spring mvc与Spring其它文件整合
在web.xml里加入
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listen-calss>
</listener>
applicationContext.xml的文件位置就可以有两种默认实现:
-
第一种:直接将之放到/WEB-INF下,之在web.xml中声明一个listener;
-
第二种:将之放到classpath下,但是此时要在web.xml中加入<context-param>,用它来指明你的applicationContext.xml的位置以供web容器来加载
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath: root-context.xml</param-value>
</context-param>