Spring 全家桶之 Spring Web MVC (一)- MVC(二)

简介: Spring 全家桶之 Spring Web MVC (一)- MVC

启动Tomcat,浏览器输入 http://localhost:8080/hello 页面显示success

37fa3adaa00e4f29871a3f5217bd81aa_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png

HelloController运行流程:

1).客户端(浏览器)点击链接发送localhost:8080/hello请求

2).Tomcat收到请求

3).SpringMVC的dispatchServlet前端控制器收到所有请求

4).dispatchServlet查看请求地址和@RequestMapping标注的哪个Controller类的方法相匹配

5).前端控制器知道目标类和方法,利用反射执行目标方法

6).方法执行完成之后会有一个返回值,SpringMVC认为这个返回值就是要去的页面

7).拿到返回值,使用视图解析器拼接得到完整的页面地址

8).前端控制器根据地址转发到具体页面

applicationContext.xml配置文件

在web.xml配置文件中的param-value标签下指定了配置文件位置,Spring MVC有默认的配置文件。

注销配置文件,启动Tomcat

image.png

报错"Could not open ServletContext resource [/WEB-INF/springmvc-servlet.xml]" 默认会找这个配置文件springmvc-servlet.xml

修改Servlet名字为dispatcherServlet,再次启动Tomcat,可以看出默认配置文件名称为DispatcherServlet Bean的名字-servlet.xml

image.png

如果想不指定配置文件,就需要在WEB-INF目录下配置一个名字为[Servlet名字-servlet.xml]的配置文件,Spring MVC会在Tomcat容器启动时自动查找这个文件

在WEB-INF下创建一个dispatchServlet-servlet.xml文件,文件内容就是原来resources目录下applicationContext.xml的内容,并将applicationContext.xml删除,再次启动Tomcat

image.png

不再报错,页面可以正常访问

"/" 与 "/*" 的区别

web.xml配置文件中url-parttern标签的 "/" 代表拦截所有请求(不包括JSP页面),"/*"拦截所有请求包括jsp页面这些请求,将配置中的“/”改为“/*”,重新启动容器,并访问/hello,出现404报错

image.png

控制台报错如下

image.png

说明 "/" 拦截的请求不包括jsp页面,"/*" 拦截所有的请求,包括jsp页面

在web目录下增加index.html,将 “/*” 改为 “/”,重启容器,访问index.html

image.png

页面无法访问,控制台报错,这是为什么?

image.png

首先tomcat文件中conf文件夹下本身就有一个web.xml文件,项目中的web.xml就是继承Tomcat conf文件夹下的web.xml

Tomcat中web.xml相当于是父类,其中配置了DefaultServlet,专门用来处理静态资源的,项目中web.xml是子类,都配置了 "/",相当于子类重写了父类的方法,那么Tomcat中的web.xml中的defualtServlet配置的 "/" 也就失效了,也就无法处理html静态资源了。

image.png

其中default配置类 "/"

image.png

项目中配置 “/” 不拦截jsp请求是为了放行jsp,将jsp交由tomcat处理,tomcat的web.xml中有一个JspServlet,专门处理*.jsp文件的

image.png

image.png

“/*” 就是直接拦截所有请求,"/" 是为了迎合Rest风格的URL地址

@RequestMapping注解

Spring MVC 使用@RequestMapping注解标注xxController或者方法可以处理哪些URL请求

  • @RequestMapping定义在类上表明提供上层URL地址,这是针对方法上@RequestMapping的URL地址来说的
  • @RequestMapping定义在方法上,标注了方法能够处理的具体请求

在controller包下创建一个MappingController,测试@RequestMapping注解

plus:不能两个方法处理同一个请求即不能有两个方法的RequestMapping中value是一样的 严格遵循一个方法处理一个请求

@RequestMapping标注在类上,为当前所有方法所处理的请求前增加前缀

@Controller
@RequestMapping("/mapping")
public class MappingController {
    @RequestMapping("/handle")
    public String handle(){
        String method = Thread.currentThread().getStackTrace()[1].getMethodName();
        System.out.println(this.getClass().getSimpleName() + "类的" + method + "方法正在执行");
        return "success";
    }
}    
复制代码

浏览器输入http://localhost:8080/mapping/handle

image.png



相关文章
|
7月前
|
前端开发 Java 测试技术
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestParam
本文介绍了 `@RequestParam` 注解的使用方法及其与 `@PathVariable` 的区别。`@RequestParam` 用于从请求中获取参数值(如 GET 请求的 URL 参数或 POST 请求的表单数据),而 `@PathVariable` 用于从 URL 模板中提取参数。文章通过示例代码详细说明了 `@RequestParam` 的常用属性,如 `required` 和 `defaultValue`,并展示了如何用实体类封装大量表单参数以简化处理流程。最后,结合 Postman 测试工具验证了接口的功能。
369 0
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestParam
|
7月前
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestBody
`@RequestBody` 是 Spring 框架中的注解,用于将 HTTP 请求体中的 JSON 数据自动映射为 Java 对象。例如,前端通过 POST 请求发送包含 `username` 和 `password` 的 JSON 数据,后端可通过带有 `@RequestBody` 注解的方法参数接收并处理。此注解适用于传递复杂对象的场景,简化了数据解析过程。与表单提交不同,它主要用于接收 JSON 格式的实体数据。
561 0
|
7月前
|
前端开发 Java 微服务
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@PathVariable
`@PathVariable` 是 Spring Boot 中用于从 URL 中提取参数的注解,支持 RESTful 风格接口开发。例如,通过 `@GetMapping("/user/{id}")` 可以将 URL 中的 `{id}` 参数自动映射到方法参数中。若参数名不一致,可通过 `@PathVariable("自定义名")` 指定绑定关系。此外,还支持多参数占位符,如 `/user/{id}/{name}`,分别映射到方法中的多个参数。运行项目后,访问指定 URL 即可验证参数是否正确接收。
368 0
|
7月前
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestMapping
@RequestMapping 是 Spring MVC 中用于请求地址映射的注解,可作用于类或方法上。类级别定义控制器父路径,方法级别进一步指定处理逻辑。常用属性包括 value(请求地址)、method(请求类型,如 GET/POST 等,默认 GET)和 produces(返回内容类型)。例如:`@RequestMapping(value = "/test", produces = "application/json; charset=UTF-8")`。此外,针对不同请求方式还有简化注解,如 @GetMapping、@PostMapping 等。
322 0
|
7月前
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RestController
本文主要介绍 Spring Boot 中 MVC 开发常用的几个注解及其使用方式,包括 `@RestController`、`@RequestMapping`、`@PathVariable`、`@RequestParam` 和 `@RequestBody`。其中重点讲解了 `@RestController` 注解的构成与特点:它是 `@Controller` 和 `@ResponseBody` 的结合体,适用于返回 JSON 数据的场景。文章还指出,在需要模板渲染(如 Thymeleaf)而非前后端分离的情况下,应使用 `@Controller` 而非 `@RestController`
235 0
|
3月前
|
前端开发 Java API
Spring Cloud Gateway Server Web MVC报错“Unsupported transfer encoding: chunked”解决
本文解析了Spring Cloud Gateway中出现“Unsupported transfer encoding: chunked”错误的原因,指出该问题源于Feign依赖的HTTP客户端与服务端的`chunked`传输编码不兼容,并提供了具体的解决方案。通过规范Feign客户端接口的返回类型,可有效避免该异常,提升系统兼容性与稳定性。
222 0
|
3月前
|
SQL Java 数据库连接
Spring、SpringMVC 与 MyBatis 核心知识点解析
我梳理的这些内容,涵盖了 Spring、SpringMVC 和 MyBatis 的核心知识点。 在 Spring 中,我了解到 IOC 是控制反转,把对象控制权交容器;DI 是依赖注入,有三种实现方式。Bean 有五种作用域,单例 bean 的线程安全问题及自动装配方式也清晰了。事务基于数据库和 AOP,有失效场景和七种传播行为。AOP 是面向切面编程,动态代理有 JDK 和 CGLIB 两种。 SpringMVC 的 11 步执行流程我烂熟于心,还有那些常用注解的用法。 MyBatis 里,#{} 和 ${} 的区别很关键,获取主键、处理字段与属性名不匹配的方法也掌握了。多表查询、动态
125 0
|
3月前
|
JSON 前端开发 Java
第05课:Spring Boot中的MVC支持
第05课:Spring Boot中的MVC支持
191 0
|
12月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
166 4
|
9月前
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
408 29