天天看點

SpringMVC

目錄

SpringMVC

SpringMVC概述

1、添加依賴

2、在web.xml中配置前端控制器

3、編寫SpringMVC的配置檔案(結構和Spring配置檔案一緻)

4、添加Controller

5、通過浏覽器通路Controller

SpringMVC的工作機制

DispatcherServlet

Controller的實作

ModelAndView類

視圖解析器概述

請求映射

1、RequestMapping可以聲明在類和方法上

2、可以根據不同的請求方式來控制哪種請求可以通路

3、在RequestMapping中添加params

4、在RequestMapping中添加Headers

5、在RequestMapping中添加占位符

控制器方法入參

1、基本資料類型的自動轉化

2、自動封裝資料

時間類型參數

使用ServletAPI

SpringMVC資料校驗

2、定義校驗規則

3、對需要校驗的資料添加注解 @Validated

4、在SpringMVC中注冊校驗器

SpringMVC內建JSON

2、在方法上添加注解@ResponseBody

postMan工具的使用

RESTful

RESTful概念特點

RESTful資源設計規則

處理靜态資源

1)采用

2)采用

SpringMVC攔截器

1、編寫一個攔截器

2、配置攔截器

SpringMVC檔案上傳

1、表單

2、添加依賴

3、上傳的操作

4、上傳解析器

SpringMVC異常處理

1、編寫異常處理類

2、編寫異常展示頁面

3、編寫Controller生成異常

說明下【本文是在網上聽課做的筆記,代碼是自己敲的,有些文字是複制的老師發的】

使用SpringMVC替換Servlet

Servlet的問題:

1、需要判斷調用哪個方法。(邏輯需要自己編寫)

2、需要獲得request的資料,并且需要手動封裝,還要進行類型轉換。

3、跳轉和轉發資料的代碼太繁瑣。

4、通過ajax請求的對象,需要通過fastjson進行轉換,并使用相應對象的輸出流寫出。

以上問題SpringMVC都給出了解決方案。

SpringMVC
SpringMVC
SpringMVC

使用注解配置Controller

<code>相關的jsp頁面</code>

<code>list.jsp</code>

<code>list2.jsp</code>

jstl需要導入的依賴

将Controller的傳回值進行解析,到浏覽器。

在SpringMVC中也有很多視圖解析器

SpringMVC

這時通過視圖解析器解析handler傳回的值(邏輯視圖,轉發資料)

編寫一個視圖

RequestMapping

可以聲明在類上,如果要通路方法,需要将類的RequestMapping的值與方法上的RequestMapping的值組合通路。

http://localhost:8080/項目名稱/類上注解/方法上注解
為了防止直接通過浏覽器通路jsp頁面,将所有頁面放到WEB-INF下。隻能通過控制器跳轉。在視圖解析器中的字首添加WEB-INF。
浏覽器位址欄通路 都是Get請求

相應的配置檔案

相關内容

SpringMVC

SpringMVC中預設識别日期格式為yyyy/MM/dd

其他格式需要自己編寫轉換類

将轉換類配置到SpringMVC架構中

Controller裡面的代碼

HttpServletRequest

HttpServletResponse

HttpSession

ServletContext

HttpServletRequest,HttpServletResponse,HttpSession對象都可以從方法參數中擷取

正規表達式

​ 電話号碼格式

​ 郵箱格式

​ 身份證格式等等

前端資料校驗 (可以減輕伺服器壓力)

後端資料校驗

在封裝類上定義校驗規則,JSR303

将對象或者集合轉換成json

要求頁面傳遞資料格式為json data:JSON.stringify(jsonStr) 在Controller方法上添加注解@RequestBody public String save(@RequestBody User user) 因為預設按照鍵值對解析資料 contentType:"application/json"
<code>可以使用POSTMAN進行測試</code>

<code>f.jsp</code>

SpringMVC
SpringMVC

REST(英文:Representational State Transfer,簡稱REST)

表述性狀态轉移; 表現狀态傳輸;

描述了一個架構樣式的網絡系統,比如 web 應用程式。它首次出現在 2000 年 Roy Fielding 的博士論文中,Roy Fielding是 HTTP 規範的主要編寫者之一。

在目前主流的三種Web服務互動方案中,REST相比于SOAP(Simple Object Access protocol,簡單對象通路協定)以及XML-RPC更加簡單明了,無論是對URL的處理還是對Payload的編碼,REST都傾向于用更加簡單輕量的方法設計和實作。值得注意的是REST并沒有一個明确的标準,而更像是一種設計的風格。

RESTFUL特點包括:

1、每一個URI代表1種資源;

2、用戶端使用GET、POST、PUT、DELETE4個表示操作方式的動詞對服務端資源進行操作:GET用來擷取資源,POST用來建立資源(也可以用于更新資源),PUT用來更新資源,DELETE用來删除資源;

3、通過操作資源的表現形式來操作資源;

4、資源的表現形式是XML或者HTML;

5、用戶端與服務端之間的互動在請求之間是無狀态的,從用戶端到服務端的每個請求都必須包含了解請求所必需的資訊。

URI

URI 表示資源,資源一般對應伺服器端領域模型中的實體類。

URI規範

不用大寫;

用中杠-不用下杠_;

參數清單要encode;

URI中的名詞表示資源集合,使用複數形式。

資源集合 vs 單個資源

URI表示資源的兩種方式:資源集合、單個資源。

資源集合:

/zoos //所有動物園

/zoos/1/animals //id為1的動物園中的所有動物

單個資源:

/zoos/1 //id為1的動物園

/zoos/1;2;3 //id為1,2,3的動物園

避免層級過深的URI

/在url中表達層級,用于按實體關聯關系進行對象導航,一般根據id導航。

過深的導航容易導緻url膨脹,不易維護,如 GET /zoos/1/areas/3/animals/4,盡量使用查詢參數代替路徑中的實體導航,如GET /animals?zoo=1&amp;area=3;

對Composite資源的通路

伺服器端的組合實體必須在uri中通過父實體的id導航通路。

組合實體不是first-class的實體,它的生命周期完全依賴父實體,無法獨立存在,在實作上通常是對資料庫表中某些列的抽象,不直接對應表,也無id。一個常見的例子是 User — Address,Address是對User表中zipCode/country/city三個字段的簡單抽象,無法獨立于User存在。必須通過User索引到Address:GET /user/1/addresses

Request

HTTP方法

通過标準HTTP方法對資源CRUD:

GET:查詢

GET /zoos

GET /zoos/1

GET /zoos/1/employees

POST:建立單個資源。POST一般向“資源集合”型uri發起

POST /animals //新增動物

POST /zoos/1/employees //為id為1的動物園雇傭員工

PUT:更新單個資源(全量),用戶端提供完整的更新後的資源。與之對應的是 PATCH,PATCH 負責部分更新,用戶端提供要更新的那些字段。PUT/PATCH一般向“單個資源”型uri發起

PUT /animals/1

PUT /zoos/1

DELETE:删除

DELETE /zoos/1/employees/2

DELETE /zoos/1/employees/2;4;5

DELETE /zoos/1/animals //删除id為1的動物園内的所有動物

<code>Controller.java</code>

<code>g.jsp</code>

<code>web.xml</code>

要在web.xml中添加過濾器

小技巧:@RequestMapping 可以替換 (get post put update delete)

技巧:

@Controller 替換成 @RestController 可以直接傳回 JSON資料

SpringMVC

在springMVC-servlet.xml中配置&lt;mvc:default-servlet-handler /&gt;後,會在Spring MVC上下文中定義一個org.springframework.web.servlet.resource.DefaultServletHttpRequestHandler,它會像一個檢查員,對進入DispatcherServlet的URL進行篩查,如果發現是靜态資源的請求,就将該請求轉由Web應用伺服器預設的Servlet處理,如果不是靜态資源的請求,才由DispatcherServlet繼續處理。

一般Web應用伺服器預設的Servlet名稱是"default",是以DefaultServletHttpRequestHandler可以找到它。如果你所有的Web應用伺服器的預設Servlet名稱不是"default",則需要通過default-servlet-name屬性顯示指定:

&lt;mvc:default-servlet-handler default-servlet-name="所使用的Web伺服器預設使用的Servlet名稱" /&gt;

&lt;mvc:default-servlet-handler /&gt;将靜态資源的處理經由Spring MVC架構交回Web應用伺服器處理。而&lt;mvc:resources /&gt;更進一步,由Spring MVC架構自己處理靜态資源,并添加一些有用的附加值功能。

首先,&lt;mvc:resources /&gt;允許靜态資源放在任何地方,如WEB-INF目錄下、類路徑下等,你甚至可以将JavaScript等靜态檔案打到JAR包中。通過location屬性指定靜态資源的位置,由于location屬性是Resources類型,是以可以使用諸如"classpath:"等的資源字首指定資源位置。傳統Web容器的靜态資源隻能放在Web容器的根路徑下,&lt;mvc:resources /&gt;完全打破了這個限制。

其次,&lt;mvc:resources /&gt;依據目前著名的Page Speed、YSlow等浏覽器優化原則對靜态資源提供優化。你可以通過cacheSeconds屬性指定靜态資源在浏覽器端的緩存時間,一般可将該時間設定為一年,以充分利用浏覽器端的緩存。在輸出靜态資源時,會根據配置設定好響應封包頭的Expires 和 Cache-Control值。

在接收到靜态資源的擷取請求時,會檢查請求頭的Last-Modified值,如果靜态資源沒有發生變化,則直接傳回303相應狀态碼,提示用戶端使用浏覽器緩存的資料,而非将靜态資源的内容輸出到用戶端,以充分節省帶寬,提高程式性能。

<code>controller.java</code>

本文來自部落格園,作者:chn-tiancx,轉載請注明原文連結:https://www.cnblogs.com/tiancx/p/15663082.html