1.Spring MVC
Spring MVC与Servlet技术功能相同,均属于Web开发技术
Spring MVC是一种基于JAVA实现MVC模型的轻量级Web框架
Spring MVC入门案例
1.导入坐标
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
导入tomcat插件
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<path>/</path> <!--项目访问路径。当前配置的访问是localhost:8080/, 如果配置是/aa,则访问路径为localhost:8080/aa -->
<port>8080</port>
<uriEncoding>UTF-8</uriEncoding><!-- 非必需项 -->
</configuration>
</plugin>
</plugins>
</build>
2.创建SpingMVC控制器类(等同于Servlet功能)
package com.itheima.config;
public class SpirngMVCConfig {
}
3.初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对应的Bean
4.初始化Servlet容器,加载SpringMVC、Spring环境,并设置SpringMVC技术处理的请求
复杂版:
package com.itheima.config;
import org.springframework.web.context.WebApplicationContext;
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
import org.springframework.web.servlet.support.AbstractDispatcherServletInitializer;
//定义一个servlet容器启动的配置类,在里面加载spring的配置
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
//加载springMVC容器配置
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx=new AnnotationConfigWebApplicationContext();
ctx.register(SpirngMVCConfig.class);
return ctx;
}
//设置哪些请求归属springMVC处理
@Override
protected String[] getServletMappings() {
//所有请求归springMVC去处理
return new String[]{"/"};
}
//加载spring容器的配置
@Override
protected WebApplicationContext createRootApplicationContext() {
AnnotationConfigWebApplicationContext ctx=new AnnotationConfigWebApplicationContext();
ctx.register(SpringConfig.class);
return ctx;
}
}
精简版(在复杂版的基础上进行简化)
package com.itheima.config;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
//加载Spring容器
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
//加载SpringMVC容器
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpirngMVCConfig.class};
}
//将所有请求交给SpringMVC来处理
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
复杂版和精简版继承的类的继承关系:
5.定义controller
package com.itheima.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
//定义controller
//使用@Controller来定义Bean
@Controller
public class UserController {
//设置当前操作的访问路径
@RequestMapping("/save")
//设置当前操作的返回值类型
@ResponseBody
public String save()
{
System.out.println("user save......");
return "{'moudle':'springMVC'}";
}
}
总结
SpringMVC工作流程
SpringMVC的bean加载控制
原因:在执行业务的时候,Spring不扫描controller(表现层的包),而SpringMVC扫描表现层的包
解决方法一:精确扫描需要的包
@ComponentScan({"com.itheima.service","com.itheima.dao"})
public class SpirngConfig {
}
解决方法二:排除controller包
@ComponentScan(value = "com.itheima",excludeFilters = @ComponentScan.Filter(
type = FilterType.ANNOTATION,
classes = Controller.class
))
public class SpirngConfig {
}
设置请求映射路径
Get请求与Post请求发送普通参数
在Postman中发送请求,在controller方法中定义形参用来接收请求参数
Get请求
Post请求
接收Post请求乱码处理(本质上是过滤器)
在配置类ServletContainersInitConfig中添加如下代码
@Override
protected Filter[] getServletFilters() {
//字符过滤
CharacterEncodingFilter filter=new CharacterEncodingFilter();
filter.setEncoding("UTF-8");
return new Filter[]{filter};
}
五种类型的参数传递
1.普通参数:
a.请求参数和形参名称相同直接发送请求即可
b.请求参数和形参名称不同
使用@RequestParam(“请求参数名”) 注解
2.pojo参数
如果实体类的属性名和请求参数名称相同,直接发送请求即可
3.嵌套的pojo参数
User类中有属性
private Address address;
public class Address{
private String province;
private String city;
}
发送请求参数的时候
http://localhost:8080/book/collection?address.province=北京&address.city=北京
即可
4.数组参数
请求参数和形参名称保持一致
多用于表单复选框提交数据
发送的时候key保持一致
接收参数
5.集合参数
请求参数和形参名称保持一致
发送:
请求:
JSON数据在Spring MVC中的应用
json数据在请求体中
1.导入坐标
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.9.0</version>
</dependency>
在springMVC配置文件中添加
2.postman发送json数据
3.接收json数据
1.普通参数
因为json数据在请求体中,所以形参不能使用@RequestParam注解,而使用@RequestBody注解
@RequestMapping("/json")
@ResponseBody
//接收json数据
public String jsonRequest(@RequestBody List<String> likes)
{
System.out.println(likes);
return "{'moudle':'1234'}";
}
2. pojo类型参数
3.嵌套pojo类型参数
发送请求:
4.集合参数
发送请求:
接收请求:
JSON请求与响应总结:
日期类型参数传递
默认格式:2022/8/28
响应
响应页面
@RequestMapping("/page")
@ResponseBody
public String jsonRequest()
{
return page.jsp;
}
响应文本数据
响应JSON数据
对象集合转为JSON数组
类转换器
响应给客户端的数据为JSON数据,通过类转换器HttpMessageConverter接口实现将响应数据转换为JSON数据