}
}
实现接口 `Controller` 定义控制器是较老的办法:
* 缺点:**一个控制器中只有一个方法,如果要多个方法则需要定义多个 Controller,麻烦**。
[](
)@Controller 注解创建控制器
--------------------------------------------------------------------------------------
`@Controller` 注解类型用于声明 Spring 类的实例是一个控制器,具体参见 [Spring 基础注解](
);
Spring 可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证 Spring 能找到你的控制器,需要在配置文件中声明组件扫描。
<context:component-scan base-package=“com.kuang.controller”/>
测试使用:
//@Controller注解的类会自动添加到Spring上下文中
@Controller
public class ControllerTest2 {
//映射访问路径
@RequestMapping("/t2")
public String index(Model model) {
//Spring MVC会自动实例化一个Model对象用于向视图中传值
model.addAttribute("msg", "ControllerTest2");
//返回视图位置
return "test";
}
}
* * *
上面两个请求都可以指向一个视图 `test.jsp`,但是页面结果的结果是不一样的,从这里可以看出视图是被复用的,而控制器与视图之间是弱耦合关系。
**注解方式是平时使用的最多的方式!**
[](
)@RequestMapping
==================================================================================
`@RequestMapping` 注解用于映射 url 到控制器类或一个特定的处理程序方法,可用于类或方法上。
* 用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。
只注解在 **方法** 上:只需要指定方法的路径即可。
* 以下代码的访问路径:`http://localhost:8080/项目名/h1`
@Controller
public class TestController {
@RequestMapping("/h1")
public String test(){
return "test";
}
}
同时注解在 **类** 和 **方法** 上:需要先指定类上的路径再指定方法的路径。
* 以下代码的访问路径:`http://localhost:8080/项目名/hello/h1`
@Controller
@RequestMapping("/hello")
public class TestController {
@RequestMapping("/h1")
public String test(){
return "test";
}
}
[](
)使用 method 属性指定请求类型
-------------------------------------------------------------------------------------
用于约束请求的类型,可以收窄请求范围。
指定请求谓词的类型如 `GET`、`POST`、`HEAD`、`OPTIONS`、`PUT`、`PATCH`、`DELETE`、`TRACE` 等。
测试使用:
// 要求必须是 POST 请求, 则可以通过 method指定
@RequestMapping(value = “/restful”, method = {RequestMethod.POST})
public String index2(Model model){
model.addAttribute(“msg”, “hello!”);
return “test”;
}
访问:`http://localhost:8080/hello`
使用浏览器地址栏进行访问 **默认是Get请求**,会报错405:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200609234738275.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzczNDA5NQ==,size_16,color_FFFFFF,t_70)
将代码中 `method` 指定为 `GET` 或者去除即可访问。
[](
)@RequestMapping 小结
-------------------------------------------------------------------------------------
Spring MVC 的 `@RequestMapping` 注解能够处理 HTTP 请求的方法
* `GET`、`PUT`、`POST`、`DELETE` 以及 `PATCH`。
浏览器的地址栏请求默认都会是 HTTP `GET` 类型的。
方法级别的注解变体有如下几个:组合注解
@GetMapping
@PostMapping
@PutMapping
@DeleteMapping
@PatchMapping
`@GetMapping` 是一个组合注解,平时使用的会比较多。
* 相当于 `@RequestMapping(method =RequestMethod.GET)` 的一个快捷方式。
[](
)RestFul 风格
=============================================================================
Restful 就是一个资源定位及资源操作的风格。不是标准也不是协议,只是一种风格。基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。
**传统方式操作资源**:通过不同的参数来实现不同的效果,方法单一,`post` 和 `get`。
* `http://127.0.0.1/item/queryItem.action?id=1` 查询,GET
* `http://127.0.0.1/item/saveItem.action` 增加,POST
* `http://127.0.0.1/item/updateItem.action` 更新,POST
* `http://127.0.0.1/item/deleteItem.action?id=1` 删除,GET 或 POST
**使用 RestFul 操作资源** :可以通过不同的请求方式来实现不同的效果。
如下:请求地址一样,但是功能可以不同。
* `http://127.0.0.1/item/1` 查询,GET
* `http://127.0.0.1/item` 新增,POST
* `http://127.0.0.1/item` 更新,PUT
* `http://127.0.0.1/item/1` 删除,DELETE
[](
)@PathVariable
--------------------------------------------------------------------------------
在 SpringMVC 中可以使用 `@PathVariable` 注解,让方法参数的值对应绑定到一个URL模板变量上。
@Controller
public class RestFulController {
// 映射访问路径
@RequestMapping("/commit/{p1}/{p2}")
public String index(@PathVariable int p1, @PathVariable int p2, Model model){
int result = p1 + p2;
// Spring MVC 会自动实例化一个 Model 对象用于向视图中传值
model.addAttribute("msg", "结果:" + result);
// 返回视图位置
return "test";
}
}
访问路径:`http://localhost:8080/commit/1/2`
### 最后
作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料
**[CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】](https://codechina.csdn.net/m0_60958482/java-p7)**
![](https://img-blog.csdnimg.cn/img_convert/3e1212e0ca1b11e610a12d0640e4349e.png)
![](https://img-blog.csdnimg.cn/img_convert/6a0cf9071b5bf1a7049f81061feccb11.png)
return "test";
}
}
访问路径:http://localhost:8080/commit/1/2
最后
作为过来人,小编是整理了很多进阶架构视频资料、面试文档以及PDF的学习资料,针对上面一套系统大纲小编也有对应的相关进阶架构视频资料
CodeChina开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频】
[外链图片转存中…(img-zfVJTHfy-1630666317799)]
[外链图片转存中…(img-PU8KSX2x-1630666317801)]