Spring boot中Spring MVC初识

1.初识MVC

当今MVC(Model-View-Controller)框架已经盛行,它不单单用于java开发,也广泛应用于其他系统的开发。MVC的成功在于他的理念,所以有必要认识下MVC框架。Spring MVC示意图如下:

其中带有阿拉伯数字的说明,是MVC的运行流程。处理请求先到达控制器(Controller),控制器的作用是进行请求分发,这样他会根据请求的内容去访问模型层(Model)。控制器获取到由模型层返回的数据后,就将数据进行渲染到视图中,这样就能展示给用户了。

2.Spring Mvc流程

尽管在Spring Boot开发中我们可以很轻松的通过配置实现Spring MVC的开发,但是为了解决实际问题,我们又必要了解Spring MVC的运行流程和组件,否则很难理解Spring Boot自动为我们生成了什么,配置了什么。

流程和组件是Spring MVC的核心,Spring MVC的流程围绕DispatcherServlet而工作的,所以在Spring MVC中DispatcherServlet就是其最重要的内容。

Spring MVC的流程和组件如下图:


其中阿拉伯数字是其执行流程。严格得数Spring MVC处理流程并非一定需要全流程,有时候一些流程并不存在。例如,我们加入@ResponseBody时是没有经过视图解析器和视图渲染的。

首先,在Web服务器启动的过程过程中,如果Spring Boot机制下启用了Spring MVC,他就开始初始化一些重要的组件,如DispatcherServlet、HandlerAdapter的实例RequestMaappingHandlerAdapter等组件。关于这些组件我们可以看到spring-webmvc-xxx.jar包的属性文件DispatcherServlet.proerties,他定义的对象都在Spring MVC开始时就初始化,并且存在在Spring IOC容器中。代码清单如下:


# Default implementation classes for DispatcherServlet's strategy interfaces.

# Used as fallback when no matching beans are found in the DispatcherServlet context.

# Not meant to be customized by application developers.

#国际化解析器

org.springframework.web.servlet.LocaleResolver=org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver

#主题解析器

org.springframework.web.servlet.ThemeResolver=org.springframework.web.servlet.theme.FixedThemeResolver

#HandlerMapping实例

org.springframework.web.servlet.HandlerMapping=org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping,\

org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping

#处理器适配器

org.springframework.web.servlet.HandlerAdapter=org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter,\

org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter,\

org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter

#处理器异常解析器

org.springframework.web.servlet.HandlerExceptionResolver=org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver,\

org.springframework.web.servlet.mvc.annotation.ResponseStatusExceptionResolver,\

org.springframework.web.servlet.mvc.support.DefaultHandlerExceptionResolver

#策略视图名称转换器

org.springframework.web.servlet.RequestToViewNameTranslator=org.springframework.web.servlet.view.DefaultRequestToViewNameTranslator

#视图解析器

org.springframework.web.servlet.ViewResolver=org.springframework.web.servlet.view.InternalResourceViewResolver

#FlashMap管理器,不常用

org.springframework.web.servlet.FlashMapManager=org.springframework.web.servlet.support.SessionFlashMapManager

这些组件会在Spring MVC得到初始化,所以我们并不需要太多配置就能够开发Spring MVC程序,尤其是在Spring Boot中,更是如此,我们可以用Spring Boot的配置来定制化这些组件间的初始化。

@Controller

@RequestMapping("/ceres/collUser")

public class UserController {

    @Autowired

    private UserService userService;


    @RequestMapping(value = "/query")

    public ModelAndView queryUser(Long id) {

        User user = userService.getById(id);

        ModelAndView mv = new ModelAndView();

mv.setViewName("user/query");

mv.add("user", mv);

return mv;

    }

}

这里注解@Controller表明是一个控制器,然后@RequestMapping代表请求路径和控制器(或其他方法)的映射,它会在Web服务器启动Spring MVC的时,就被扫描到HandlerMapping的机制中存储,之后在用户发起请求被DispatcherServlet拦截后,通过URI和其他条件,通过HandlerMapper机制找到对应的控制器进行响应。

先到这里,后续继续更新。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容