美文网首页
Spring 实战 Web 一: Spring MVC

Spring 实战 Web 一: Spring MVC

作者: DJN_ | 来源:发表于2018-08-21 08:34 被阅读0次

    Spring MVC 请求流程

    Spring 将请求在调度 Servlet、处理器映射、控制器以及视图解析器之间移动。
    请求从离开浏览器到获取响应返回会经历好多站点,如下图展示了使用 Spring MVC 时经历的所有站点。


    Image_112.png
    1. DsipatcherServlet
      Spring MVC 的所有请求都会通过一个前端请求控制器 Servlet 来映射需要交给 Spring MVC 进行处理的请求,并处理整个请求并获得响应。

    2. 控制器、处理器映射
      前端控制器会将请求发送给 Spring MVC 控制器(Controller),DispatcherServlet 会通过查询一个或多个处理器映射(handler mapping)来确定具体的控制器及处理器。

    3. 处理器进行逻辑处理(业务)
      处理器进行业务逻辑处理,通常会产生模型(model),通常还需要将模型对应到一个视图(view),控制器所做的最后一件事就是将模型数据打包,将模型和视图信息发送回 DispatcherServlet,这样,控制器就不会与具体的视图耦合。

    4. 视图解析器解析和渲染 ModelAndView
      DispatcherServlet 已经知道应该由哪个视图(view)来渲染数据(model),不过还需要通过视图解析器(view resolver)来找到具体的视图实现。

    两个应用上下文

    搭建 Spring MVC 有两种方式,在 web.xml 中进行配置,或 Java 中继承 AbstractAnnotationConfigDispatcherServletInitializer。

    1. 当 DsipatcherServlet 启动时,它会创建 Spring 应用上下文,并加载配置文件或配置类中声明的 bean。
    2. 但在 Spring 中通常还有另外一个上下文,该上下文由 ContextLoaderListener 创建。

    我们期望 DispatcherServlet 加载包含 web 组件的 bean,如控制器、视图解析器以及处理器映射,而 ContextLoaderListener 加载其他的 bean,这些 bean 通常是驱动后端的中间层和数据层组件。

    使用 AbstractAnnotationConfigDispatcherServletInitializer(Servlet 3.0) 使用 Spring MVC 时,会同时创建两个上下文。


    image.png

    启用 Spring MVC

    1. 使用 xml 进行配置时可通过 <mvc:annotation-driven> 启用注解驱动的 Spring MVC
    2. 基于 java 进行配置时使用 @EnableWebMvc 注解进行启用,通过继承 WebMvcConfigurerAdapter 来进行一些初始配置(否则将使用默认的配置),如视图解析器、静态资源处理
    @Configuration // 定义 DispatcherServlet 应用上下文中的 bean
    @EnableWebMvc // 启用 spring mvc
    @ComponentScan("com.duan.springmvcdemo") // 启用组件扫描
    public class WebConfig extends WebMvcConfigurerAdapter {
    
        @Override
        public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
            configurer.enable(); // 静态资源处理
        }
    
        @Override
        public void configureViewResolvers(ViewResolverRegistry registry) {
        }
    
        @Override
        public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        }
    
    }
    
    

    使用 Thymeleaf

    使用 Thymeleaf 前需要做的配置:

    1. ThymeleafViewResolver 将逻辑视图名转为 Thymeleaf 模板视图名
    2. SpringTemplateEngine 处理模板并渲染结果
    3. TemplateResolver 加载 Thymeleaf 模板
    image.png

    使用 xml 中声明 bean 的方式也可完成。
    Thymeleaf 便签对应到标准的 HTML 属性(th:xxx),并且能够直接加载到浏览器中进行查看(区别于 JSP)。

    <!DOCTYPE html>
    <html xmlns:th="http://www.thymeleaf.org" lang="en" xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta charset="UTF-8">
        <title>HOME</title>
        <link rel="stylesheet"
              type="text/css"
              th:href="@{/resources/style.css}">
    
    </head>
    <body>
    
    <!--Not allowed to load local resource chrome 安全考虑,安装插件可解决-->
    <img th:src="${spitterAvatar}">
    
    <form method="post" enctype="multipart/form-data" action="/spitter/doRegister">
        <label>
            Profile Picture
        </label>
        <input type="file" name="profilePicture" accept="image/jpeg,image/png,image/gif"><br>
    
        <input type="submit" value="提交">
    </form>
    
    </body>
    </html>
    

    相关文章

      网友评论

          本文标题:Spring 实战 Web 一: Spring MVC

          本文链接:https://www.haomeiwen.com/subject/abxdiftx.html