SpringMVC是一种基于Java实现MVC模型的轻量级Web框架
使用简单,开发便捷(相比于Servlet)
灵活性强
入门案例
1.导入依赖SpringMVC坐标
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>5.1.38</version> //不要使用6及以上,javaxservlet不支持 </dependency>
2.创建配置类文件夹,创建核心配置类
@Configuration @ComponentScan("com.study.controller") //加载对应文件夹下的bean public class SpringMvcConfig { }
创建SpringMVC控制器类(等同于Servlet功能)
设定请求方法的返回值为字符串类型,并返回自定义json数据
@Controller //注解为可供Spring调用的bean public class UserController { @RequestMapping("/save")//定义映射路径 @ResponseBody //定义为响应体,告诉系统我不是页面 public String save(){ System.out.println("user save ...."); return "{'info':'springmvc'}"; //将json类型返回 } }
在配置文件夹下新建初始化servlet容器文件,加载SpringMVC环境,并设置SpringMVC请求拦截的路径
AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器的抽象类
AbstractDispatcherServletInitializer提供三个接口方法供用户实现
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer { @Override //Servlet容器初始化,加载Spring的配置类 创建Servlet容器时,加载SpringMVC对应的bean并放入WebApplicationContext对象范围中,而WebApplicationContext的作用范围为ServletContext范围,即整个web容器范围 protected WebApplicationContext createServletApplicationContext() { AnnotationConfigWebApplicationContext ctx=new AnnotationConfigWebApplicationContext(); ctx.register(SpringMvcConfig.class); return ctx; } @Override 设定SpringMVC对应的请求映射路径,设置为/表示拦截所有请求,任意请求都将转入到SpringMVC进行处理 protected String[] getServletMappings() { //表示所有的请求都交给SpringMVC处理 return new String[]{"/"}; } @Override 如果创建Servlet容器时需要加载非SpringMVC对应的bean,使用当前方法进行,使用方式同createServletApplicationContext() protected WebApplicationContext createRootApplicationContext() { return null; } }
使用Tomcat运行时,如果其他都没有问题,但是运行不出来,可能是tomcat版本太低,
用高一个版本的tomcat就可以解决了
入门案例工作流程分析
因为我们SpringMVC只控制表现层的Bean,其他类型的 bean都交给Spring来处理,我们要避免表现层打的bean也被Spring扫到![](https://img-blog.csdnimg.cn/074b604da18d45df8e31a586264d874b.png)
也就是排除了注解类别为Controller的bean
换一下继承的东西,可以简化开发
postman
postman这款软件可以很好的处理请求与响应,很适合用来测试
请求与响应
因为我们主要是异步调用,所以主要是json
请求映射路径![](https://img-blog.csdnimg.cn/11ccf0134f564045b50041a5515df90f.png)
映射路径这一块,不同模块可能会有同名的方法,为了区分,我们需要在模块类上加一个映射路径,这样映射路径就成了/user/save 就不会跟/book/save冲突了
、
get请求和post请求发送普通参数
Post请求中文乱码处理
5种类型参数参数传递
Json数据传递参数
1.添加json数据转换相关坐标
<!-- 添加json数据转换相关坐标--> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.0</version> </dependency>
2.设置发送json数据(请求body中添加json数据)
3.开启自动转换json数据的支持
@EnableWebMvc注解功能强大,该注解整合了多个功能,此处仅使用其中一部分功能,即json数据进行自动类型转换
4.设置接收json数据
json数据
Json数据在请求体中,所以我们的注解换成@RequestBody
json对象
json数组
日期类型参数传递
用@DateTimeFormat来设置读取日期格式
响应
响应页面
响应数据
文本数据
json数据
响应数据的时候,要用@ResponseBody告诉服务器这个不是页面
数据我们要什么数据 就返回什么类型的数据
REST风格
因为有些资源路径我们是一样的,所以我们通过行为动作来区分相同的访问地址
{id} 为得到输入的id,这样下面的参数则为传过来的id值
@PathVariable 意思id从路径上取
简化REST开发
可以将RequestMapping提取出来到类上
直接把原本要写的RequstMapping换成对应的方法Maping 这样我们就可以不写method了
但是有些需要传参数的,还是要把参数带上
这样我们就简化完成啦:
基于RESTFUL页面数据交互
因为我们的路径都会被SpringMVC所以我们要设置放行