咱们一般经过接口或注解定义两种方式实现html
Controller是一个接口,在org.springframework.web.servlet.mvc包下。前端
@FunctionalInterface public interface Controller { //处理请求并返回一个模型与视图对象 @Nullable ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception; }
实现接口Controller定义控制器是较老的方法java
缺点是:一个控制器中只有一个方法,若是要多个方法则须要定义多个Controller;定义的方式比较麻烦!web
@Controller注解类型用于声明Spring类的实例是一个控制器;还有三个相同的注解!spring
@Component 组件 @Service Service层 @Controller Controller层 @Repository dao层
Spring可使用扫描机制来找到对应程序中全部基于注解的控制器类,为了保证Spring能找到控制器,须要在配置文件中声明组件扫描。浏览器
<!-- 自动扫描指定的包,下面全部注解类交给IOC容器管理 --> <context:component-scan base-package="com.star.controller"/>
注意:页面是能够进行复用,可是页面的结果是不同的,能够多个请求指向一个视图,控制器与视图之间是弱耦合关系。缓存
RestFul就是一个资源定位及资源操做的风格,不是标准也不是协议,只是一种风格,基于这个风格设计的软件能够更简洁,更有层次,更易于实现缓存等机制。restful
资源:互联网全部的事物均可以被抽象为资源mvc
资源操做:使用POST、DELETE、PUT、GET使用不一样方法对资源进行操做。app
分别对应:添加、删除、修改、查询
经过不一样的参数来实现不一样的效果!方法单一,post和get
一、新建一个类RestFulController
package com.star.controller; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class RestFulController { @RequestMapping("/add") //设两个参数a,b,并将结果输出到前端 public String test1(int a, int b, Model model){ int ans = a+b; model.addAttribute("msg","a + b 的结果:" + ans); return "hello"; } }
二、测试请求,咱们使用传统的操做:
三、如今咱们使用RestFul风格
在Spring MVC中可使用@PatnVariable注解,让方法参数的值对应绑定到一个URL模板变量上
@Controller public class RestFulController { @RequestMapping("/add/{a}/{b}") public String test1(@PathVariable int a,@PathVariable int b, Model model){ int ans = a+b; model.addAttribute("msg","a + b 的结果:" + ans); return "hello"; } }
四、重启项目,测试请求:
能够看到原来的路径就会报错!url就要改成:/add/a/b
咱们可使用method属性指定请求类型
用于约束请求的类型,能够收窄请求范围。指定请求谓词的类型如GET, POST, HEAD, OPTIONS, PUT, PATCH, DELETE, TRACE等;
咱们进行测试一下:
@Controller public class RestFulController { @RequestMapping(value = "/add/{a}/{b}", method = RequestMethod.POST)//指定post请求 public String test1(@PathVariable int a,@PathVariable int b, Model model){ int ans = a+b; model.addAttribute("msg","a + b 的结果:" + ans); return "hello"; } }
咱们使用浏览器访问默认是GET请求,会报错:
咱们可使用表单提交post请求,或者将请求改成get
建立一个表单提交页面:
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>Title</title> </head> <body> <form action="add/1/2" method="post"> <input type="submit"> </form> </body> </html>
测试请求:
Spring MVC的@RequestMapping注解可以处理HTTP请求的方法,好比GET,PUT,POST,DELETE以及PATCH。
全部的地址请求默认都会是HTTP GET类型的
方法级别的注解有以下几个:组合注解
@GetMapping @PostMapping @PutMapping @DeleteMapping @PatchMapping
@XXXMapping是一个组合注解
至关于@RequestMapping(method = RequestMethod.XXX)的一个快捷方式,一般使用这个!