最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring Boot Web 開發(fā)注解篇

 更新時間:2017年08月16日 15:22:59   作者:泥瓦匠BYSocket  
在 Spring Boot 快速入門中,只要在 pom.xml 加入了 spring-boot-starter-web 依賴,即可快速開發(fā) web 應(yīng)用。下文給大家詳細介紹了spring boot web 開發(fā)注解,感興趣的朋友參考下吧

一、spring-boot-starter-web 依賴概述

在 Spring Boot 快速入門中,只要在 pom.xml 加入了 spring-boot-starter-web 依賴,即可快速開發(fā) web 應(yīng)用??梢姡琒pring Boot 極大地簡化了 Spring 應(yīng)用從搭建到開發(fā)的過程,做到了「開箱即用」的方式。Spring Boot 已經(jīng)提供很多「開箱即用」的依賴,如上面開發(fā) web 應(yīng)用使用的 spring-boot-starter-web ,都是以 spring-boot-starter-xx 進行命名的。

Spring Boot 「開箱即用」 的設(shè)計,對開發(fā)者非常便利。簡單來說,只要往 Spring Boot 項目加入相應(yīng)的 spring-boot-starter-xx 依賴,就可以使用對應(yīng)依賴的功能,比如加入 spring-boot-starter-data-jpa 依賴,就可以使用數(shù)據(jù)持久層框架 Spring Data JPA 操作數(shù)據(jù)源。相比 Spring 以前需要大量的XML配置以及復(fù)雜的依賴管理,極大的減少了開發(fā)工作量和學(xué)習(xí)成本。

當(dāng)開發(fā)一個特定類型的應(yīng)用程序時,特定的 Starter 提供所需的依賴關(guān)系,并且將對應(yīng)的 Bean 注冊到 Spring 容器中。spring-boot-starter-web 依賴就是提供開發(fā) Web 應(yīng)用的。

1.1 spring-boot-starter-web 職責(zé)

spring-boot-starter-web 是一個用于構(gòu)建 Web 的 Starter ,包括構(gòu)建 RESTful 服務(wù)應(yīng)用、Spring MVC 應(yīng)用等。并且不需要額外配置容器,默認使用 Tomcat 作為嵌入式容器。

1.2 spring-boot-starter-web 依賴關(guān)系

spring-boot-starter-web 這么強大,它的組成如下表:

spring-boot-starter  核心包,包括了自動化配置支持、日志、YAML 文件解析的支持等。

spring-boot-starter-json 讀寫 JSON 包

spring-boot-starter-tomcat Tomcat 嵌入式 Servlet 容器包

hibernate-validator Hibernate 框架提供的驗證包

spring-web Spring 框架的 Web 包

spring-webmvc Spring 框架的 Web MVC 包

spring-boot-starter-web 包含了 Tomcat 和 Spring MVC ,那啟動流程是這樣的。 標(biāo)識 @SpringBootApplication 的應(yīng)用,初始化經(jīng)過 spring-boot-starter  核心包中的自動化配置,構(gòu)建了 Spring 容器,并通過 Tomcat 啟動 Web 應(yīng)用。很多 Starters 只支持 Spring MVC,一般會將 spring-boot-starter-web 依賴加入到應(yīng)用的 Classpath。

另外,spring-boot-starter-web 默認使用 Tomcat 作為嵌入式 Servlet 容器,在 pom.xml 配置 spring-boot-starter-jetty 和 spring-boot-starter-undertow 就可以替換默認容器。

二、Spring MVC on Spring Boot

Spring MVC 是 Spring Web 重要的模塊。內(nèi)容包括 MVC 模式的實現(xiàn)和 RESTful 服務(wù)的支持。

2.1 Spring MVC 體系溫故知新

spring-webmvc 模塊里面包:

– org.springframework.web.servlet 提供與應(yīng)用程序上下文基礎(chǔ)結(jié)構(gòu)集成的 Servlet,以及 Spring web MVC 框架的核心接口和類。
– org.springframework.web.servlet.mvc Spring 附帶的 Servlet MVC 框架的標(biāo)準(zhǔn)控制器實現(xiàn)。
– org.springframework.web.servlet.mvc.annotation 用于基于注解的 Servlet MVC 控制器的支持包。
– org.springframework.web.servlet.mvc.condition 用于根據(jù)條件匹配傳入請求的公共 MVC 邏輯。
– org.springframework.web.servlet.mvc.method 用于處理程序方法處理的基于 Servlet 的基礎(chǔ)結(jié)構(gòu),基于在 org.springframework.web.method 包上。
– org.springframework.web.servlet.view 提供標(biāo)準(zhǔn)的 View 和 ViewResolver 實現(xiàn),包括自定義實現(xiàn)的抽象基類。
– org.springframework.web.servlet.view.freemarker 支持將 FreeMarker 集成為 Spring Web 視圖技術(shù)的類。
– org.springframework.web.servlet.view.json 支持提供基于 JSON 序列化的 View 實現(xiàn)的類。

上面列出來核心的包。org.springframework.web.servlet.view 包中, View 視圖實現(xiàn)有常見的:JSON 、FreeMarker 等。org.springframework.web.servlet.mvc 包中,Controller 控制層實現(xiàn)包括了注解、程序方法處理等封裝。自然,看源碼先從 org.springframework.web.servlet 包看其核心的接口和類。

2.2 重要的類

DispatcherServlet 類:調(diào)度 HTTP 請求控制器(或者處理器 Handler)。
View 視圖層 ModelAndView 類:模型和視圖的持有者。
View 接口:MVC WEB 交互。該接口的實現(xiàn)負責(zé)呈現(xiàn)視圖或者暴露模型。
Controller 控制層 HandlerMapping 接口: 請求從 DispacherServlet 過來,該接口定義請求和處理程序?qū)ο笾g的映射。
HandlerInterceptor 接口:處理程序的執(zhí)行鏈接口。

Spring MVC 框架模型

2.3 Spring Boo

2.3 Spring Boot MVC

以前 Spring MVC 開發(fā)模式是這樣的:

1. 在 web.xml 配置 DispatcherServlet,用于截獲并處理所有請求

2. 在 Spring MVC 配置文件中,聲明預(yù)定義的控制器和視圖解析器等

3. 編寫預(yù)定義的處理請求控制器

4. 編寫預(yù)定義的視圖對象,比如 JSP、Freemarker 等

在 Spring Boot MVC 中,Web 自動化配置會幫你減少上面的兩個步驟。默認使用的視圖是 ThymeLeaf,在下面小節(jié)會具體講

1. 編寫預(yù)定義的處理請求控制器

2. 編寫默認 ThymeLeaf 視圖對象

例如下面會展示用戶列表案例:

第一步:處理用戶請求控制器

UserController.java

/**
 * 用戶控制層
 *
 * Created by bysocket on 24/07/2017.
 */
@Controller
@RequestMapping(value = "/users")  // 通過這里配置使下面的映射都在 /users
public class UserController {
 @Autowired
 UserService userService;   // 用戶服務(wù)層
 /**
  * 獲取用戶列表
  * 處理 "/users" 的GET請求,用來獲取用戶列表
  * 通過 @RequestParam 傳遞參數(shù),進一步實現(xiàn)條件查詢或者分頁查詢
  */
 @RequestMapping(method = RequestMethod.GET)
 public String getUserList(ModelMap map) {
  map.addAttribute("userList", userService.findAll());
  return "userList";
 }
}
 @Controller 注解在 UserController 類上,標(biāo)識其為一個可接收 HTTP 請求的控制器
@RequestMapping(value = “/users”) 注解 ,標(biāo)識 UserController 類下所有接收的請求路由都是 /users 開頭的。注意:類上的 @RequestMapping 注解是不必需的
@RequestMapping(method = RequestMethod.GET) 注解,標(biāo)識該 getUserList(ModelMap map) 方法會接收并處理 /users 請求,且請求方法是 GET
getUserList(ModelMap map) 方法返回的字符串 userList ,代表著是視圖,會有視圖解析器解析成為一個具體的視圖對象,然后經(jīng)過視圖渲染展示到瀏覽器

第二步:用戶列表 ThymeLeaf 視圖對象

<!DOCTYPE html>
<html lang="zh-CN">
 <head>
  <script type="text/javascript" th:src="@{https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js}"></script>
  <link th:href="@{https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css}" rel="external nofollow" rel="stylesheet"/>
  <link th:href="@{/css/default.css}" rel="external nofollow" rel="stylesheet"/>
  <link rel="icon" th:href="@{/images/favicon.ico}" rel="external nofollow" type="image/x-icon"/>
  <meta charset="UTF-8"/>
  <title>用戶列表</title>
 </head>
 <body>
  <div class="contentDiv">
   <h5> 《 Spring Boot 2.x 核心技術(shù)實戰(zhàn)》第二章快速入門案例</h5>
   <table class="table table-hover table-condensed">
    <legend>
     <strong>用戶列表</strong>
    </legend>
    <thead>
     <tr>
      <th>用戶編號</th>
      <th>名稱</th>
      <th>年齡</th>
      <th>出生時間</th>
      <th>管理</th>
     </tr>
    </thead>
    <tbody>
     <tr th:each="user : ${userList}">
      <th scope="row" th:text="${user.id}"></th>
      <td><a th:href="@{/users/update/{userId}(userId=${user.id})}" rel="external nofollow" th:text="${user.name}"></a></td>
      <td th:text="${user.age}"></td>
      <td th:text="${user.birthday}"></td>
      <td><a class="btn btn-danger" th:href="@{/users/delete/{userId}(userId=${user.id})}" rel="external nofollow" >刪除</a></td>
     </tr>
    </tbody>
   </table>
   <div><a class="btn btn-primary" href="/users/create" rel="external nofollow" role="button">創(chuàng)建用戶</a></div>
  </div>
 </body>
</html>

一個 table 展示用戶列表,引入了 jquery.min.js 和 bootstrap.min.css ,更好的展示頁面效果。具體 ThymeLeaf 語法下面會講到。

代碼共享在:https://github.com/JeffLi1993/spring-boot-core-book-demo

2.3.1 控制器

什么是控制器?控制器就是控制請求接收和負責(zé)響應(yīng)到視圖的角色。

@Controller 注解標(biāo)識一個類作為控制器。DispatcherServlet 會掃描所有控制器類,并檢測 @RequestMapping 注解配置的方法。Web 自動化配置已經(jīng)處理完這一步驟。

@RequestMapping 注解標(biāo)識請求 URL 信息,可以映射到整個類或某個特定的方法上。該注解可以表明請求需要的。

使用 value 指定特定的 URL ,比如 @RequestMapping(value = “/users”) 和 @RequestMapping(value = “/users/create”) 等

使用 method 指定 HTTP 請求方法,比如 RequestMethod.GET 等

還有使用其他特定的參數(shù)條件,可以設(shè)置 consumes 指定請求時的請求頭需要包含的 Content-Type 值、設(shè)置 produces 可確保響應(yīng)的內(nèi)容類型

MVC on REST ful 場景

在 HTTP over JSON (自然 JSON、XML或其他自定義的媒體類型內(nèi)容等均可)場景,配合上前后端分離的開發(fā)模式,我們經(jīng)常會用 @ResponseBody 或 @RestController 兩種方式實現(xiàn) RESTful HTTP API 。

老方式:

@ResponseBody 注解標(biāo)識該方法的返回值。這樣被標(biāo)注的方法返回值,會直接寫入 HTTP 響應(yīng)體(而不會被視圖解析器認為是一個視圖對象)。

新方式:

@RestController 注解,和 @Controller 用法一致,整合了 @Controller 和 @ResponseBody 功能。這樣不需要每個 @RequestMapping 方法上都加上 @ResponseBody 注解,這樣代碼更簡明。

使代碼更簡明,還有常用便捷注解 @GetMapping、@PostMapping 和 @PutMapping 等

HTTP 協(xié)議相關(guān)知識回顧,可以看看我以前的博文《圖解 HTTP 協(xié)議》http://www.bysocket.com/?p=282

2.3.2 數(shù)據(jù)綁定

數(shù)據(jù)綁定,簡單的說就是 Spring MVC 從請求中獲取請求入?yún)?,賦予給處理方法相應(yīng)的入?yún)?。主要流程如下?/p>

1. DataBinder 接受帶有請求入?yún)⒌?ServletRequest 對象

2. 調(diào)用 ConversionService 組件,進行數(shù)據(jù)類型轉(zhuǎn)換、數(shù)據(jù)格式化等工作

3. 然后調(diào)用 Validator 組件,進行數(shù)據(jù)校驗等工作

4. 綁定結(jié)果到 BindingResult 對象

5. 最后賦予給處理方法相應(yīng)的入?yún)?/p>

@ModelAttribute 注解添加一個或多個屬性(類對象)到 model 上。例如

 @RequestMapping(value = "/create", method = RequestMethod.POST)
 public String postUser(@ModelAttribute User user)

@PathVariable 注解通過變量名匹配到 URI 模板中相對應(yīng)的變量。例如

 @RequestMapping(value = "/update/{id}", method = RequestMethod.GET)
 public String getUser(@PathVariable("id") Long id, ModelMap map)

@RequestParam 注解將請求參數(shù)綁定到方法參數(shù)。

@RequestHeader 注解將請求頭屬性綁定到方法參數(shù)。

2.3.3 視圖和視圖解析

視圖的職責(zé)就是渲染模型數(shù)據(jù),將模型里面的數(shù)據(jù)展示給用戶。

請求到經(jīng)過處理方法處理后,最終返回的是 ModeAndView ??梢詮?Spring MVC 框架模型 看出,最終經(jīng)過 ViewResolver 視頻解析器得到視圖對象 View。可能是我們常見的 JSP ,也可能是基于 ThymLeaf 、FreeMarker 或 Velocity 模板引擎視圖,當(dāng)然還有可能是 JSON 、XML 或者 PDF 等各種形式。

業(yè)界流行的模板引擎有如下的 Starters 支持:

spring-boot-starter-thymeleaf Thymeleaf 模板視圖依賴,官方推薦

spring-boot-starter-freemarker Freemarker 模板視圖依賴

spring-boot-starter-groovy-templates Groovy 模板視圖依賴

spring-boot-starter-mustache Mustache 模板視圖依賴

具體,spring-boot-starter-thymeleaf 使用案例在 GitHub :https://github.com/JeffLi1993/spring-boot-core-book-demo 的 chapter-2-spring-boot-quick-start 工程。

三、小結(jié)

本文主要介紹了 Spring Boot 在 Web 開發(fā)中涉及到的 HTTP 協(xié)議,還有一些 Spring MVC 相關(guān)的知識。

推薦:

開源項目 springboot-learning-example https://github.com/JeffLi1993/springboot-learning-example

開源項目 spring-boot-core-book-demo https://github.com/JeffLi1993/spring-boot-core-book-demo

總結(jié)

以上所述是小編給大家介紹的Spring Boot Web 開發(fā)注解篇,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java全面細致講解Cookie與Session及kaptcha驗證碼的使用

    Java全面細致講解Cookie與Session及kaptcha驗證碼的使用

    web開發(fā)階段我們主要是瀏覽器和服務(wù)器之間來進行交互。瀏覽器和服務(wù)器之間的交互就像人和人之間進行交流一樣,但是對于機器來說,在一次請求之間只是會攜帶著本次請求的數(shù)據(jù)的,但是可能多次請求之間是會有聯(lián)系的,所以提供了會話機制
    2022-06-06
  • 淺談為什么Java里面String類是不可變的

    淺談為什么Java里面String類是不可變的

    這篇文章主要介紹了為什么Java里面String類是不可變的,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • SpringBoot工程打包后執(zhí)行Java?-Jar就能啟動的步驟原理

    SpringBoot工程打包后執(zhí)行Java?-Jar就能啟動的步驟原理

    這篇文章主要介紹了SpringBoot工程打包后為何執(zhí)行Java?-Jar就能啟動,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • 如何利用Java8 Stream API對Map按鍵或值排序

    如何利用Java8 Stream API對Map按鍵或值排序

    這篇文章主要給大家介紹了關(guān)于如何利用Java8 Stream API對Map按鍵或值排序的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用Java8具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Java中super和this關(guān)鍵字詳解

    Java中super和this關(guān)鍵字詳解

    這篇文章主要介紹了Java中super和this關(guān)鍵字詳解,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-06-06
  • Spring AOP 與代理的概念與使用

    Spring AOP 與代理的概念與使用

    大家知道我現(xiàn)在還是一個 CRUD 崽,平時用 AOP 也是 CV 大法。最近痛定思痛,決定研究一下 Spring AOP 的原理。 這里寫一篇文章總結(jié)一下。主要介紹 Java 中 AOP 的實現(xiàn)原理,最后以兩個簡單的示例來收尾。
    2020-10-10
  • java base64編碼、解碼的三種方式總結(jié)

    java base64編碼、解碼的三種方式總結(jié)

    這篇文章主要介紹了java base64編碼、解碼的三種方式,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-10-10
  • 如何使用JAVA調(diào)用SHELL

    如何使用JAVA調(diào)用SHELL

    這篇文章主要介紹了如何使用JAVA調(diào)用SHELL,文中講解非常細致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • SpringMVC中的常用注解源碼及解析

    SpringMVC中的常用注解源碼及解析

    這篇文章主要介紹了SpringMVC中的常用注解源碼及解析,SpringMVC是一種基于Java的Web框架,它使用了許多注解來簡化開發(fā)過程,本文列舉了一些常用的注解,需要的朋友可以參考下
    2023-10-10
  • java對接webservice接口的4種方式總結(jié)

    java對接webservice接口的4種方式總結(jié)

    因工作需要和一個Sap相關(guān)系統(tǒng)以WebService的方式進行接口聯(lián)調(diào),之前僅聽過這種技術(shù),但并沒有實操過,所以將本次開發(fā)進行記錄,這篇文章主要給大家介紹了關(guān)于java對接webservice接口的4種方式,需要的朋友可以參考下
    2023-10-10

最新評論

丹东市| 如东县| 民乐县| 大厂| 嵊州市| 林芝县| 新安县| 常州市| 休宁县| 华蓥市| 九龙坡区| 比如县| 邯郸县| 南皮县| 巩留县| 长垣县| 佳木斯市| 沾化县| 枣强县| 湖北省| 郎溪县| 荣昌县| 晴隆县| 冀州市| 永济市| 昌平区| 盐源县| 延津县| 定远县| 巴青县| 江都市| 盘山县| 汤阴县| 中阳县| 马龙县| 洱源县| 灌阳县| 稻城县| 尖扎县| 县级市| 大方县|