https://www.bilibili.com/video/BV1Fi4y1S7ix?p=43&vd_source=c581024b8cd9585ec6a75c56ac05571a
SpringMVC技术与Servlet技术功能等同,均属于web层开发技术。
SpringMVC 是一种基于Java实现MVC模型的轻量级Web框架。
SpringMVC 是一种表现层框架技术。
优点:使用简单,开发便捷,灵活性强。
<dependencies>
<dependency>
<groupId>org.springframeworkgroupId>
<artifactId>spring-webmvcartifactId>
<version>5.3.21version>
dependency>
<dependency>
<groupId>javax.servletgroupId>
<artifactId>javax.servlet-apiartifactId>
<version>4.0.1version>
<scope>providedscope>
dependency>
dependencies>
@RestController
//@RestController = @ResponseBody + @Controller
//@Controller 将类注册到Spring容器
//@ResponseBody 将方法返回值作为响应体,不加则是跳转的页面
public class UserController {
@RequestMapping("/save") //设置请求路径
public String save() {
return "save";
}
}
@Configuration
@ComponentScan({"com.xin.web"})
public class SpringMVCConfig {
public static void main(String[] args) {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
}
}
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
//加载Spring Web容器配置
@Override
protected WebApplicationContext createServletApplicationContext() {
//创建一个Spring Web容器
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
//加载配置
context.register(SpringMVCConfig.class);
return context;
}
@Override
protected String[] getServletMappings() {
//设置交给SpringMVC处理的请求路径。"/"所有请求
return new String[]{"/"};
}
//加载Spring容器配置。
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
方式一 继承AbstractDispatcherServletInitializer
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
@Override
protected WebApplicationContext createServletApplicationContext() {
//创建SpringMVC容器
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
//加载配置
context.register(SpringMVCConfig.class);
return context;
}
@Override
protected String[] getServletMappings() {
//设置“/” 所有请求路径都交给SpringMVC控制器处理。
return new String[]{"/"};
}
@Override
protected WebApplicationContext createRootApplicationContext() {
//创建Spring容器
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
//加载配置
context.register(SpringConfig.class);
return context;
}
}
方式二 继承AbstractAnnotationConfigDispatcherServletInitializer
public class ServletContainersInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMVCConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
@Configuration
@ComponentScan(value = {"com.xin.web"},
excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Controller.class))
public class SpringConfig {
public static void main(String[] args) {
//验证下是否排除了@Controller注解下的Bean
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
UserController userController = context.getBean(UserController.class);
System.out.println(userController);
}
}
public class ServletContainersInitConfig extends AbstractDispatcherServletInitializer {
@Override
protected Filter[] getServletFilters() {
//设置字符过滤,处理中文乱码
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
return new Filter[]{characterEncodingFilter};
}
}
<dependency>
<groupId>com.fasterxml.jackson.coregroupId>
<artifactId>jackson-databindartifactId>
<version>2.13.3version>
dependency>
@ComponentScan({"com.xin.web.controller"})
@EnableWebMvc //开启json数据转换为对象
public class SpringMVCConfig {
}
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping("/save") //设置请求路径
public String save(@RequestBody User user) {
System.out.println(user);
return user.toString();
}
}
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/save")
public String save() {
//响应到页面
return "/index.jsp"; //页面路径
}
}
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/save")
@ResponseBody
public String save() {
//响应文本数据
return "save";
}
}
@Controller
@RequestMapping("/user")
public class UserController {
@RequestMapping("/save")
@ResponseBody
public User save() {
User user = new User();
return user; //jackson帮我们将对象转为json格式的数据了。
}
}
public class SpringMVCSupport extends WebMvcConfigurationSupport {
@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
//放行静态资源,不由SpringMVC控制器管理
registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
registry.addResourceHandler("/html/**").addResourceLocations("/html/");
registry.addResourceHandler("/css/**").addResourceLocations("/css/");
registry.addResourceHandler("/js/**").addResourceLocations("/js/");
registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
}
}
@Configuration
@ComponentScan(basePackages = {"com.xin.web.controller"})
@Import(SpringMVCSupport.class) //将SpringMVCSupport对象添加到SpringMVC容器。
@EnableWebMvc //开启json数据转换为
public class SpringMVCConfig {
}