1.Controller

Controller实现的方式有两种方式,
1.实现Controller接口, 此方法不够灵活, 只能编写一个处理方法 ,不建议使用
2.基于注解的方式 (推荐)

实现Controller接口

Controller是一个接口,在org.springframework.web.servlet.mvc包下,接口中只有一个方法;
1.现实Controller接口
2.重写handleRequest方法
3.在配置文件中注册这个bean
此方法不够灵活, 一个类文件只能实现一个方法, 还得配置对应的bean,也麻烦, 不推荐使用, 看下图.
image.png

@Controller

  • 在 Spring MVC 中使用 org.springframework.stereotype.Controller 注解类型声明某类的实例是一个控制器.

  • Spring可以使用扫描机制来找到应用程序中所有基于注解的控制器类,为了保证Spring能找到你的控制器,

需要在配置文件中声明组件扫描。

  1. <!-- 自动扫描指定的包,下面所有注解类交给IOC容器管理 -->
  2. <context:component-scan base-package="com.yuanzi.controller"/>

添加一个ControllerTest2类, 使用注解实现

  1. package com.yuanzi.controller;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.ui.Model;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. @Controller
  6. public class ControllerTest2 {
  7. // 代表这个类会被Spring接管
  8. // 被这个注释的类中所有的方法, 如果返回值是String,
  9. // 并且有具体页面可以跳转,那么就会被视图解析器解析
  10. @RequestMapping("t2")
  11. public String test1(Model model){
  12. model.addAttribute("msg", "ControllerTest2");
  13. return "test1";
  14. }
  15. }

运行tomcat测试
image.png

@RequestMapping

在基于注解的控制器类中可以为每个请求编写对应的处理方法。那么如何将请求与处理方法一一对应呢?

需要使用 org.springframework.web.bind.annotation.RequestMapping
注解类型将请求与处理方法一一对应。

image.png


2.RestFul 风格

概念
REST是REpresentational State Transfer的缩写(一般中文翻译为表述性状态转移),REST 是一种体系结构,
而HTTP 是一种包含了 REST 架构属性的协议,为了便于理解,我们把它的首字母拆分成不同的几个部分:

  • 表述性(REpresentational): REST 资源实际上可以用各种形式来进行表述,包括 XML、JSON 甚至 HTML——最适合资源使用者的任意形式;
  • 状态(State): 当使用 REST 的时候,我们更关注资源的状态而不是对资源采取的行为;
  • 转义(Transfer): REST 涉及到转移资源数据,它以某种表述性形式从一个应用转移到另一个应用。

简单地说,REST 就是将资源的状态以适合客户端或服务端的形式从服务端转移到客户端(或者反过来)。
在 REST 中,资源通过 URL 进行识别和定位,然后通过行为(即 HTTP 方法)来定义 REST 来完成怎样的功能。

功能
资源:互联网所有的事物都可以被抽象为资源
资源操作:使用POST、DELETE、PUT、GET,使用不同方法对资源进行操作。
分别对应 添加、 删除、修改、查询。

CRUD 动作 HTTP 方法
Create POST
Read GET
Update PUT 或 PATCH
Delete DELETE

使用传统方式操作资源
通过不同的参数来实现不同的效果!方法单一,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

学习测试

  1. 在新建一个类 RestFulController ```java package com.yuanzi.controller;

import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping;

@Controller public class RestFulController {

  1. @RequestMapping("t5/{p1}/{p2}")
  2. public String test5(@PathVariable int p1, @PathVariable int p2, Model model){
  3. int result = p1 + p2;
  4. model.addAttribute("msg", "结果为: " + result);
  5. return "test1";
  6. }

} ``` 2.测试请求查看下
image.png