SpringMVC學習(二)

控制器Controller

咱們一般經過接口或註解定義兩種方式實現html

一、實現Controller接口

Controller是一個接口,在org.springframework.web.servlet.mvc包下。前端

@FunctionalInterface
public interface Controller {
        //處理請求並返回一個模型與視圖對象
	@Nullable
	ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception;
}

實現接口Controller定義控制器是較老的方法java

缺點是:一個控制器中只有一個方法,若是要多個方法則須要定義多個Controller;定義的方式比較麻煩!web

二、使用註解@Controller

@Controller註解類型用於聲明Spring類的實例是一個控制器;還有三個相同的註解!spring

@Component     組件
@Service       Service層
@Controller    Controller層
@Repository    dao層

Spring可使用掃描機制來找到對應程序中全部基於註解的控制器類,爲了保證Spring能找到控制器,須要在配置文件中聲明組件掃描。瀏覽器

<!-- 自動掃描指定的包,下面全部註解類交給IOC容器管理 -->
<context:component-scan base-package="com.star.controller"/>

注意:頁面是能夠進行復用,可是頁面的結果是不同的,能夠多個請求指向一個視圖,控制器與視圖之間是弱耦合關係。緩存

RestFul風格

概念

RestFul就是一個資源定位及資源操做的風格,不是標準也不是協議,只是一種風格,基於這個風格設計的軟件能夠更簡潔,更有層次,更易於實現緩存等機制。restful

功能

資源:互聯網全部的事物均可以被抽象爲資源mvc

資源操做:使用POST、DELETE、PUT、GET使用不一樣方法對資源進行操做。app

分別對應:添加、刪除、修改、查詢

傳統操做資源

經過不一樣的參數來實現不一樣的效果!方法單一,post和get

使用RestFul風格

測試

一、新建一個類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)的一個快捷方式,一般使用這個!

相關文章
相關標籤/搜索