天天看點

springmvc03-restful和控制器

一.控制器Controller

控制器複雜提供通路應用程式的行為,通常通過接口定義或注解定義兩種方法實作。

控制器負責解析使用者的請求并将其轉換為一個模型。

在Spring MVC中一個控制器類可以包含多個方法

在Spring MVC中,對于Controller的配置方式有很多種

實作Controller接口

Controller是一個接口,在org.springframework.web.servlet.mvc包下,接口中隻有一個方法;

springmvc03-restful和控制器

測試

1.編寫一個Controller類,ControllerTest1

springmvc03-restful和控制器

 2.編寫完畢後,去Spring配置檔案中注冊請求的bean;name對應請求路徑,class對應處理請求的類

springmvc03-restful和控制器

 3.編寫前端的test.jsp,注意在WEB-INF/jsp目錄下編寫,對應我們的視圖解析器 

springmvc03-restful和控制器

4.配置Tomcat運作測試

說明:

  • 實作接口Controller定義控制器是較老的辦法
  • 缺點是:一個控制器中隻有一個方法,如果要多個方法則需要定義多個Controller;定義的方式比較麻煩;

 使用注解@Controller(推薦)

·@Controller注解類型用于聲明Spring類的執行個體是一個控制器(在講IOC時還提到了另外3個注解);

·Spring可以使用掃描機制來找到應用程式中所有基于注解的控制器類,為了保證Spring能找到你的控制器,需要在配置檔案中聲明元件掃描。

<!-- 自動掃描指定的包,下面所有注解類交給IOC容器管理 -->

<context:component-scan base-package="com.kuang.controller"/>

·增加一個ControllerTest2類,使用注解實作;

springmvc03-restful和控制器

運作tomcat測試

springmvc03-restful和控制器

可以發現,我們的兩個請求都可以指向一個視圖,但是頁面結果的結果是不一樣的,從這裡可以看出視圖是被複用的,而控制器與視圖之間是弱偶合關系。

注解方式是平時使用的最多的方式!

Restful風格:

概念

Restful就是一個資源定位及資源操作的風格。不是标準也不是協定,隻是一種風格。基于這個風格設計的軟體可以更簡潔,更有層次,更易于實作緩存等機制。

功能

資源:網際網路所有的事物都可以被抽象為資源

資源操作:使用POST、DELETE、PUT、GET,使用不同方法對資源進行操作。

分别對應 添加、 删除、修改、查詢。

傳統方式操作資源  :通過不同的參數來實作不同的效果!方法單一,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

springmvc03-restful和控制器

 2.在springmvc中可以使用@PathVariable注解,讓方法參數的值對應綁定到一個URL模闆變量上

 3.我們來測試檢視一下

springmvc03-restful和控制器

 是不是看起來簡潔不少,我們來思考一下設定路徑變量的好處:

  • 使路徑變得更加簡潔;
  • 獲得參數更加友善,架構會自動進行類型轉換。
  • 通過路徑變量的類型可以限制通路參數,如果類型不一樣,則通路不到對應的請求方法,如這裡通路是的路徑是/commit/1/a,則路徑與方法不比對,而不會是參數轉換失敗。
注意:所有位址欄的請求預設都是Get類型的,是以我們如果想用其他類型的查找,就需要限定他們的請求類型

方法級别的注解變體有如下幾個:組合注解
      

  @GetMapping

  @PostMapping

  @PutMapping

  @DeleteMapping

  @PatchMapping

@GetMapping 是一個組合注解,平時使用的會比較多!

它所扮演的是 @RequestMapping(method =RequestMethod.GET) 的一個快捷方式。