【重温SSM框架系列】6 - SpringMVC执行流程与组件解析

简介: 【重温SSM框架系列】6 - SpringMVC执行流程与组件解析

SpringMVC执行流程

  1. 用户在浏览器发送请求;
  2. 用户请求达到前端控制器DispatcherServlet,DispatcherServlet收到请求调用HandlerMapping处理器映射器;
  3. 处理器映射器根据XML配置或者注解找到具体的处理器,并将结果返会给前端控制器;
  4. 前端控制器DispatcherServlet调用HandlerAdapter处理器适配器;
  5. 处理器适配器再调用后端控制器Controller执行;
  6. Controller执行并将结果ModelAndView返会给处理器适配器HandlerAdapter;
  7. HandlerAdapter再将Controller执行结果ModelAndView返回给前端控制器;
  8. DispatcherServlet将ModelAndView传给视图解析器ViewReslover;
  9. ViewReslover进行解析并将具体View返回给DispatcherServlet;
  10. DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中);
  11. 将渲染后的视图返会给用户。

在这里插入图片描述

SpringMVC的相关组件

组件解析

1. 前端控制器:DispatcherServlet
用户请求到达前端控制器,它就相当于MVC 模式中的C,DispatcherServlet是整个流程控制的中心,由
它调用其它组件处理用户的请求,DispatcherServlet的存在降低了组件之间的耦合性。

2. 处理器映射器:HandlerMapping
HandlerMapping负责根据用户请求找到Handler 即处理器,SpringMVC提供了不同的映射器实现不同的
映射方式,例如:配置文件方式,实现接口方式,注解方式等。

3. 处理器适配器:HandlerAdapter
通过HandlerAdapter对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理
器进行执行。

4. 处理器:Handler
它就是我们开发中要编写的具体业务控制器。由DispatcherServlet把用户请求转发到Handler。由
Handler 对具体的用户请求进行处理。

5. 视图解析器:View Resolver
View Resolver 负责将处理结果生成View 视图,View Resolver 首先根据逻辑视图名解析成物理视图名,即具体的页面地址,再生成View 视图对象,最后对View 进行渲染将处理结果通过页面展示给用户。

6. 视图:View
SpringMVC框架提供了很多的View 视图类型的支持,包括:jstlView、freemarkerView、pdfView等。最常用的视图就是jsp。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面

@RequestMapping注解

@RequestMapping注解用于建立请求URL 和处理请求方法之间的对应关系。
就相当于代替了Servlet的配置:

<servlet>
    <servlet-name>LoginServlet</servlet-name>
    <servlet-class>com.java.code.Servlet<servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
<servlet-mapping>

相当于@RequestMapping("/login")

接下来来到@RequestMapping的源码中,如下:
RequestMapping.class

@Target({ElementType.METHOD, ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Mapping
public @interface RequestMapping {
    String name() default "";

    @AliasFor("path")
    String[] value() default {};

    @AliasFor("value")
    String[] path() default {};

    RequestMethod[] method() default {};

    String[] params() default {};

    String[] headers() default {};

    String[] consumes() default {};

    String[] produces() default {};
}

@Target具有 ElementType.METHOD 和 ElementType.TYPE 两个属性,表示@RequestMapping可以使用在类和方法上。

  • 类上,请求URL 的第一级访问目录。此处不写的话,就相当于应用的根目录;
  • 方法上,请求URL 的第二级访问目录,与类上的使用@ReqquestMapping标注的一级目录一起组成访问虚拟路径。

RequestMapping属性解析

  • value

用于指定请求的URL。它和path属性的作用是一样的.

  • method

用于指定请求的方式,包括GET、POST、PUT、DELETE等。

  • params

用于指定限制请求参数的条件。request中必须包含某些参数值时,才让该方法处理。

  • headers

用于指定request中必须包含某些指定的header值,才能让该方法处理请求。

  • consumes

用于指定处理请求的Content-Type,例如application/json, text/html。

  • produces

用于指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回。

自定义视图解析器

通过属性注入的方式修改视图的的前后缀。

    <bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/views/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

这样在Controller中方法重定向至某个jsp页面是,只需要返回相对于/WEB-INF/views/的相对路径即可,并且不需要再写.jsp后缀名。

例如,一个请求需要重定向至views文件夹中的success.jsp页面,那么就只需要return “success”
在这里插入图片描述
若是要重定向至views下的user中的profile.jsp页面,那么就只需要return “user/profile”
在这里插入图片描述

目录
相关文章
|
前端开发 Java 测试技术
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestParam
本文介绍了 `@RequestParam` 注解的使用方法及其与 `@PathVariable` 的区别。`@RequestParam` 用于从请求中获取参数值(如 GET 请求的 URL 参数或 POST 请求的表单数据),而 `@PathVariable` 用于从 URL 模板中提取参数。文章通过示例代码详细说明了 `@RequestParam` 的常用属性,如 `required` 和 `defaultValue`,并展示了如何用实体类封装大量表单参数以简化处理流程。最后,结合 Postman 测试工具验证了接口的功能。
926 0
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestParam
|
9月前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestBody
`@RequestBody` 是 Spring 框架中的注解,用于将 HTTP 请求体中的 JSON 数据自动映射为 Java 对象。例如,前端通过 POST 请求发送包含 `username` 和 `password` 的 JSON 数据,后端可通过带有 `@RequestBody` 注解的方法参数接收并处理。此注解适用于传递复杂对象的场景,简化了数据解析过程。与表单提交不同,它主要用于接收 JSON 格式的实体数据。
1620 0
|
前端开发 Java 微服务
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@PathVariable
`@PathVariable` 是 Spring Boot 中用于从 URL 中提取参数的注解,支持 RESTful 风格接口开发。例如,通过 `@GetMapping(&quot;/user/{id}&quot;)` 可以将 URL 中的 `{id}` 参数自动映射到方法参数中。若参数名不一致,可通过 `@PathVariable(&quot;自定义名&quot;)` 指定绑定关系。此外,还支持多参数占位符,如 `/user/{id}/{name}`,分别映射到方法中的多个参数。运行项目后,访问指定 URL 即可验证参数是否正确接收。
999 0
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestMapping
@RequestMapping 是 Spring MVC 中用于请求地址映射的注解,可作用于类或方法上。类级别定义控制器父路径,方法级别进一步指定处理逻辑。常用属性包括 value(请求地址)、method(请求类型,如 GET/POST 等,默认 GET)和 produces(返回内容类型)。例如:`@RequestMapping(value = &quot;/test&quot;, produces = &quot;application/json; charset=UTF-8&quot;)`。此外,针对不同请求方式还有简化注解,如 @GetMapping、@PostMapping 等。
953 0
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RestController
本文主要介绍 Spring Boot 中 MVC 开发常用的几个注解及其使用方式,包括 `@RestController`、`@RequestMapping`、`@PathVariable`、`@RequestParam` 和 `@RequestBody`。其中重点讲解了 `@RestController` 注解的构成与特点:它是 `@Controller` 和 `@ResponseBody` 的结合体,适用于返回 JSON 数据的场景。文章还指出,在需要模板渲染(如 Thymeleaf)而非前后端分离的情况下,应使用 `@Controller` 而非 `@RestController`
616 0
|
12月前
|
前端开发 Java API
Spring Cloud Gateway Server Web MVC报错“Unsupported transfer encoding: chunked”解决
本文解析了Spring Cloud Gateway中出现“Unsupported transfer encoding: chunked”错误的原因,指出该问题源于Feign依赖的HTTP客户端与服务端的`chunked`传输编码不兼容,并提供了具体的解决方案。通过规范Feign客户端接口的返回类型,可有效避免该异常,提升系统兼容性与稳定性。
845 0
|
SQL Java 数据库连接
2-SSM框架篇
Spring框架核心知识点总结,涵盖IOC、DI、Bean作用域、事务管理、AOP、Spring MVC流程及MyBatis相关问题。内容包括控制反转与依赖注入原理、Bean生命周期与线程安全、事务传播机制、JDK与CGLIB代理区别、MyBatis动态SQL与缓存机制等高频面试题。
238 0
|
SQL Java 数据库连接
Spring、SpringMVC 与 MyBatis 核心知识点解析
我梳理的这些内容,涵盖了 Spring、SpringMVC 和 MyBatis 的核心知识点。 在 Spring 中,我了解到 IOC 是控制反转,把对象控制权交容器;DI 是依赖注入,有三种实现方式。Bean 有五种作用域,单例 bean 的线程安全问题及自动装配方式也清晰了。事务基于数据库和 AOP,有失效场景和七种传播行为。AOP 是面向切面编程,动态代理有 JDK 和 CGLIB 两种。 SpringMVC 的 11 步执行流程我烂熟于心,还有那些常用注解的用法。 MyBatis 里,#{} 和 ${} 的区别很关键,获取主键、处理字段与属性名不匹配的方法也掌握了。多表查询、动态
374 0
|
JSON 前端开发 Java
第05课:Spring Boot中的MVC支持
第05课:Spring Boot中的MVC支持
449 0

热门文章

最新文章

推荐镜像

更多
  • DNS