## SpringMVC 基本概念
SpringFrameWork 在 Spring 的基础上开发了 SpringMVC,作为 Web 开发中的控制器(Controller)框架,SpringMVC 可以与 Spring 无缝整合,运行效率高于 Struts2 框架,并且可以基于注解开发,更加轻量且更加灵活,SpringMVC 框架实际上是对 Servlet 的再次封装。
## SpringMVC Hello World
### 搭建开发环境,引入依赖
引入 `spring-webmvc`,就可引入其依赖的相关的其他包,例如 `spring-core`,`spring-context`,`spring-aop`,`spring-beans`,`spring-expression`,`spring-aspects` 等,同时还需要引入 `Servlet` 相关依赖
```xml
org.springframework
spring-webmvc
5.1.4.RELEASE
javax.servlet
javax.servlet-api
4.0.1
provided
javax.servlet
jstl
1.2
```
### 编写 SpringMVC 配置文件
编写 `springmvc.xml` 文件作为 SpringMVC 的主配置文件,放于 `resources` 目录下
```xml
```
### Web.xml 配置 SpringMVC 的核心 Servlet
```xml
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:springmvc.xml
springmvc
/
```
### 创建控制器
创建一个控制器处理请求
```java
package cool.yzt.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
@RequestMapping("/hello")
public class HelloController {
@RequestMapping("/springmvc")
public String hello() {
System.out.println("hello,SpringMVC");
return "index";
}
}
```
* `@Controller` 注解表示这个类是一个控制器,由 Spring 容器进行创建和管理
* `@RequestMapping` 注解可以作用在类或方法上,用于指定类和方法的请求路径、请求方法等,例如`@RequestMapping(value = "/springmvc",method = RequestMethod.GET)`
### 5.部署项目,启动项目测试
配置好 `Tomcat` 的端口(8888),以及项目的 `ApplicationContext`("/"),浏览器访问 `http://localhost:8888/hello/springmvc`,则返回 `webapp` 下的 `index.jsp`,并且控制台打印出 `System.out.println("hello,SpringMVC");`
## SpringMVC 其他常用注解
### @PathVariable
作用于方法的参数之上,表示该参数将会通过请求的 URL 中获取,`@RequestMapping` 的请求路径中的参数使用`{}`包裹,表示这是一个动态获取的值,例如
```java
@RequestMapping(value="/product/{productId}",method = RequestMethod.GET)
public String getProduct(@PathVariable("productId") String productId){
System.out.println("Product Id : " + productId);
return "index";
}
```
### @ResponseBody
该注解作用于控制器方法之上,表示该方法返回的对象并不是一个模板(例如jsp,html),而是其他某种数据格式,例如 JSON 和 XML 等,SpringMVC 会通过适当的 `HttpMessageConverter` 转换为指定格式后,写入到 `Response` 对象的响应体中
### @GetMapping、@PostMapping 等
其实是 `@RequestMapping(method = RequestMethod.GET)` 和 `@RequestMapping(method = RequestMethod.POST)` 注解的一种快捷方式,`@PutMapping`、`@DeleteMapping` 等同理,建议使用这两个注解,便于阅读和理解。
## 参考
[百知教育 SpringMVC](https://www.bilibili.com/video/BV1WD4y1D7kz)

SpringMVC Hello World