# NOTE_SpringMVC
**Repository Path**: vectorx/NOTE_SpringMVC
## Basic Information
- **Project Name**: NOTE_SpringMVC
- **Description**: 尚硅谷SpringMVC教程丨一套快速上手spring mvc 学习笔记
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 3
- **Forks**: 2
- **Created**: 2022-03-13
- **Last Updated**: 2023-07-02
## Categories & Tags
**Categories**: Uncategorized
**Tags**: Spring-MVC, restful, Java
## README
# NOTE_SpringMVC
## 介绍
:sparkles: 【尚硅谷】SpringMVC教程丨一套快速上手spring mvc 学习笔记
## 更新
- :link: Github:[vectorxxxx/NOTE_SpringMVC: 尚硅谷SpringMVC教程丨一套快速上手spring mvc 学习笔记 (github.com)](https://github.com/vectorxxxx/NOTE_SpringMVC)
- :link: Gitee:[NOTE_SpringMVC: 尚硅谷SpringMVC教程丨一套快速上手spring mvc 学习笔记 (gitee.com)](https://gitee.com/vectorx/NOTE_SpringMVC)
- :link: GitCode:[VectorUx / NOTE_SpringMVC · GitCode](https://gitcode.net/qq_35925558/NOTE_SpringMVC)
- :link: 语雀:[SpringMVC从入门到精通 · 语雀 (yuque.com)](https://www.yuque.com/u21195183/fvry7k)
- :link: 博客园:[SpringMVC从入门到精通 - 随笔分类 - VectorX - 博客园 (cnblogs.com)](https://www.cnblogs.com/vectorx/category/2124029.html)
- :link: CSDN:[SpringMVC从入门到精通_VectorUx的博客-CSDN博客](https://blog.csdn.net/qq_35925558/category_11683845.html)
- :link: 掘金:[SpringMVC从入门到精通 - VectorX的专栏 - 掘金 (juejin.cn)](https://juejin.cn/column/7074468745569108004)
**整理不易,还望各位看官一键三连 :heart: :heart: :heart: **
**整理不易,还望各位看官一键三连 :heart: :heart: :heart: **
**整理不易,还望各位看官一键三连 :heart: :heart: :heart: **
:sparkles:下面开始吧~
---
## 一、目录

### 0、简介

### 1、@RequestMapping 注解

### 2、获取请求参数

### 3、域对象共享数据

### 4、视图

### 5、RESTful

### 6、HttpMessageConverter

### 7、拦截器和异常处理

### 8、完全注解开发

### 9、执行流程

## 二、配置文件
### 1、pom.xml
```xml
org.springframework
spring-webmvc
5.3.16
ch.qos.logback
logback-classic
1.2.11
test
javax.servlet
javax.servlet-api
4.0.1
provided
org.thymeleaf
thymeleaf-spring5
3.0.15.RELEASE
com.fasterxml.jackson.core
jackson-databind
2.13.2
commons-fileupload
commons-fileupload
1.4
```
### 2、web.xml
```xml
characterEncodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceResponseEncoding
true
characterEncodingFilter
/*
HiddenHttpMethodFilter
org.springframework.web.filter.HiddenHttpMethodFilter
HiddenHttpMethodFilter
/*
springMVC
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springMVC.xml
1
springMVC
/
```
### 3、springMVC.xml
```xml
```
## 三、完全注解开发
`WebInit`——`web.xml`
```java
/**
* web工程的初始化类,代替web.xml
*/
public class WebInit extends AbstractAnnotationConfigDispatcherServletInitializer {
/**
* 指定Spring配置类
*
* @return
*/
@Override
protected Class>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
/**
* 指定SpringMVC配置类
*
* @return
*/
@Override
protected Class>[] getServletConfigClasses() {
return new Class[]{WebConfig.class};
}
/**
* 指定SpringMVC的映射规则,即url-pattern
*
* @return
*/
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
/**
* 注册过滤器
*
* @return
*/
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
characterEncodingFilter.setEncoding("UTF-8");
characterEncodingFilter.setForceResponseEncoding(true);
HiddenHttpMethodFilter hiddenHttpMethodFilter = new HiddenHttpMethodFilter();
return new Filter[]{characterEncodingFilter, hiddenHttpMethodFilter};
}
}
```
`WebConfig`——`springMVC.xml`
```java
/**
* SpringMVC的配置类清单
* 1、扫描组件
* 2、视图解析器
* 3、view-controller
* 4、default-servlet-handler
* 5、MVC注解驱动
* 6、文件上传解析器
* 7、拦截器
* 8、异常处理解析器
*/
@Configuration
// ========== 1、扫描组件 ==========
@ComponentScan("com.vectorx.springmvc.controller")
// ========== 5、MVC注解驱动 ==========
@EnableWebMvc
public class WebConfig implements WebMvcConfigurer {
// ========== 2、视图解析器 ==========
/**
* 生成模板解析器
*
* @return
*/
@Bean
public ITemplateResolver templateResolver() {
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML);
templateResolver.setCharacterEncoding("UTF-8");
return templateResolver;
}
/**
* 生成模板引擎并注入模板解析器
*
* @param templateResolver
* @return
*/
@Bean
public ISpringTemplateEngine templateEngine(ITemplateResolver templateResolver) {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver);
return templateEngine;
}
/**
* 生成视图解析器并注入模板引擎
*
* @param templateEngine
* @return
*/
@Bean
public ViewResolver viewResolver(ISpringTemplateEngine templateEngine) {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setOrder(1);
viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setTemplateEngine(templateEngine);
return viewResolver;
}
// ========== 3、view-controller ==========
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");
}
// ========== 4、default-servlet-handler ==========
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
// ========== 6、文件上传解析器 ==========
@Bean
public MultipartResolver multipartResolver() {
MultipartResolver multipartResolver = new CommonsMultipartResolver();
return multipartResolver;
}
// ========== 7、拦截器 ==========
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new TestInterceptor()).addPathPatterns("/**");
}
// ========== 8、异常处理解析器 ==========
@Override
public void configureHandlerExceptionResolvers(List resolvers) {
SimpleMappingExceptionResolver exceptionResolver = new SimpleMappingExceptionResolver();
Properties properties = new Properties();
properties.setProperty(ArithmeticException.class.getCanonicalName(), "error");
exceptionResolver.setExceptionMappings(properties);
exceptionResolver.setExceptionAttribute("ex");
resolvers.add(exceptionResolver);
}
}
```
整理难免有误,欢迎大家批评指正!
---
> 署名 4.0 国际 (CC BY 4.0)。您可以自由地:共享 — 在任何媒介以任何形式复制、发行本作品;演绎 — 修改、转换或以本作品为基础进行创作;在任何用途下,甚至商业目的。只要你遵守许可协议条款,许可人就无法收回你的这些权利。惟须遵守下列条件:署名 — 您必须给出适当的署名,提供指向本许可协议的链接