Spring MVC 简介前端
Spring Web MVC处理请求的流程 具体执行步骤以下:java
首先用户发送请求----->前端控制器,前端控制器根据请求信息(如URL)来决定选择哪个页面控制器进行处理并把请求委托给它,即之前的控制器的控制逻辑部分;图2-1中的一、2步骤;web
页面控制器接收到请求后,进行功能处理,首先须要收集和绑定请求参数到一个对象,这个对象在Spring Web MVC中叫命令对象,并进行验证,而后将命令对象委托给业务对象进行处理;处理完毕后返回一个ModelAndView(模型数据和逻辑视图名);图2-1中的三、四、5步骤;spring
前端控制器收回控制权,而后根据返回的逻辑视图名,选择相应的视图进行渲染,并把模型数据传入以便视图渲染;图2-1中的步骤六、7;编程
前端控制器再次收回控制权,将响应返回给用户,图2-1中的步骤8;至此整个结束 json
Spring MVC的优点服务器
清晰的角色划分:前端控制器(DispatcherServlet)、请求处处理器映射(HandlerMapping)、处理器适配器(HandlerAdapter)、视图解析器(ViewResolver)、处理器或页面控制器(Controller)、验证器( Validator)、命令对象(Command 请求参数绑定到的对象就叫命令对象)、表单对象(Form Object 提供给表单展现和提交到的对象就叫表单对象)。架构
分工明确,并且扩展点至关灵活,能够很容易扩展,虽然几乎不须要;app
因为命令对象就是一个POJO,无需继承框架特定API,可使用命令对象直接做为业务对象;框架
和Spring 其余框架无缝集成,是其它Web框架所不具有的;
可适配,经过HandlerAdapter能够支持任意的类做为处理器;
可定制性,HandlerMapping、ViewResolver等可以很是简单的定制;
功能强大的数据验证、格式化、绑定机制;
利用Spring提供的Mock对象可以很是简单的进行Web层单元测试;
本地化、主题的解析的支持,使咱们更容易进行国际化和主题的切换。
强大的JSP标签库,使JSP编写更容易。
………………还有好比RESTful风格的支持、简单的文件上传、约定大于配置的契约式编程支持、基于注解的零配置支持等等。
Spring MVC的经常使用注解
Spring MVC 基本配置 Spring MVC的定制配置须要咱们的配置类集成一个WebMvcConfigurerAdapter类,并在此类使用@EnableWebMvc注解,来开启Spring MVC的配置支持.
Spring MVC 静态资源配置 Spring Boot默认的静态资源配置 若是须要直接访问静态资源,能够在咱们的配置类中重写 addResourceHandlers方法
快捷的ViewController 无需作任何业务处理,只是简单的页面转向,可使用addViewControllers方法来实现.
package com.wangge.buzmgt.config; import com.wangge.json.JSONFormatMethodProcessor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.ByteArrayHttpMessageConverter; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.ResourceHttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter; import org.springframework.http.converter.support.AllEncompassingFormHttpMessageConverter; import org.springframework.http.converter.xml.Jaxb2RootElementHttpMessageConverter; import org.springframework.http.converter.xml.SourceHttpMessageConverter; import org.springframework.web.method.support.HandlerMethodReturnValueHandler; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import java.util.ArrayList; import java.util.List; @Configuration @EnableWebMvc public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void addViewControllers (ViewControllerRegistry registry) { registry.addViewController ("/").setViewName ("index"); registry.addViewController ("/left").setViewName ("left"); } @Override public void addReturnValueHandlers (List<HandlerMethodReturnValueHandler> returnValueHandlers) { returnValueHandlers.add (new JSONFormatMethodProcessor (messageConverter ())); } private List<HttpMessageConverter<?>> messageConverter () { List<HttpMessageConverter<?>> converters = new ArrayList<> (); converters.add (new ByteArrayHttpMessageConverter ()); converters.add (new StringHttpMessageConverter ()); converters.add (new ResourceHttpMessageConverter ()); converters.add (new SourceHttpMessageConverter<> ()); converters.add (new AllEncompassingFormHttpMessageConverter ()); converters.add (new Jaxb2RootElementHttpMessageConverter ()); converters.add (new MappingJackson2HttpMessageConverter ()); return converters; } @Override public void addResourceHandlers (ResourceHandlerRegistry registry) { registry.addResourceHandler ("/static/**").addResourceLocations ("classpath:/static/"); } }
其中 addResourceLocations 指的是文件放置的目录,addResourceHandler指的是对外暴露的访问路径.