咱們一般經過接口或註解定義兩種方式實現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)的一個快捷方式,一般使用這個!