【SpringMVC 笔记,Java架构师知识体系

}

}




实现接口 `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)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值