之前寫過幾篇關于利用Spring MVC來開發的博客,從博客下面的評論以及GitHub上的Issues看還是會出現許多的問題,且大部分的問題都出在配置上。雖然說Spring MVC的配置較SSH簡化了不少,但是在使用過程中仍然會覺得配置的吃力。
為了進一步簡化配置,考慮使用Spring Boot將之前的項目重寫,以及對各個模塊進行重構。由于是一步步探索的過程,因而在此一步一步記錄下來,除了自我學習以外,更方便未來review文檔,同時希望能為讀者帶來一定的遍歷。
Spring是一套非常大的框架,在這個框架下有許多的子項目,這些項目可以在?https://spring.io/projects?找到,我們需要用到的兩個主要項目就是 Spring Framework 和 Spring Data。這些子項目可以被運用到許許多多的場景,隨意組合。然而,可能是歷史原因,開發者往往會受到框架組合和配置的困擾,一個個的xml文件讓人看起來是非常頭痛的事情,而且一旦某個部分配置出錯,需要花費很長的時間來找出這個錯誤,這樣做效率是極低的。
為了極大的簡化配置,甚至達到零配置的可能,Spring團隊開發出了 Spring Boot框架,與其說它是一個框架,倒不如它是一個極大降低Spring開發難度的一個應用程序。
下面是官方的介紹:
Spring Boot makes it easy to create stand-alone, production-grade Spring based Applications that you can "just run". We take an opinionated view of the Spring platform and third-party libraries so you can get started with minimum fuss. Most Spring Boot applications need very little Spring configuration.
大致的意思:Spring Boot使我們更加容易地創建一個獨立的、生產級的,且可以直接運行的Spring應用。由于它整合了Spring platform和一些三方庫的配置,使我們可以做到真正的開箱即用。大多數的Spring Boot應用只需要非常少的Spring配置。
?那它的特征有哪些呢:
有上面這幾條就已經足夠吸引人了。其他的不用做太多的介紹,直接從代碼來看Spring Boot的配置是多么的easy。
在開發之前,首先交代一下開發環境:
IDE選用IntelliJ IDEA 2016,Spring Tool Suite也是一個好的選擇。
JDK使用JDK8。
就這些,不用Tomcat(Spring Boot內嵌),不用Maven(IDEA內嵌)。
創建項目的方法有兩種,一種是使用官方的SPRING INITIALIZR,另一種是利用IDEA。
打開?http://start.spring.io/,如下圖所示
填寫好項目名,所需依賴后(目前只使用Web和JPA,數據庫暫時使用內存數據庫H2,方便演示),點擊生成項目,會生成一個zip包,這就是你的原始項目,解壓到指定目錄,使用IDEA打開pom.xml:
IDEA會自動下載所有的依賴,這樣原始的項目就配置完成了:
這個過程其實和1.1類似,相當于1.1的本地版本。
打開IDEA,新建項目,選擇Spring Initializr,點擊Next:
填寫項目名,Next:
選擇Web、JPA和H2,Next,Finish。
這樣就生成了一個和1.1一樣的項目。
打開?https://spring.io/guides,可以看到Spring官網提供的一些例程,一個例程大約15~30分鐘的時間:
選擇第一個例程,需要做的如下:
請求 :
http://localhost:8080/greeting
返回:
{"id":1,"content":"Hello, World!"}
請求:
http://localhost:8080/greeting?name=Gaussic
返回:
{"id":1,"content":"Hello, Gaussic!"}
我們需要做的是,發送一個請求,返回JSON格式的數據。Spring-Boot-Web整合了Spring MVC的配置,我們將利用Spring MVC來開發一個簡單的Restful服務。
首先新建一個Greeting類,這是一個POJO,在mvc框架中稱之為model,用以保存數據:
package com.gaussic;/*** Created by gaussic on 11/4/2016.* model*/
public class Greeting {private final long id;private final String content;public Greeting(long id, String content) {this.id = id;this.content = content;}public long getId() {return id;}public String getContent() {return content;}
}
controller在mvc框架中是控制層,?它會解析瀏覽器的請求,并做特定地處理。由于我們需要開發一個簡單的Restful API,Spring MVC提供了簡單的?@RestController?注解,來標明某個類是一個 Restful Controller,簡化Controller的配置,如下:
package com.gaussic;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;import java.util.concurrent.atomic.AtomicLong;/*** Created by gaussic on 11/4/2016.* controller*/@RestController
public class GreetingController {private static final String template = "Hello, %s!"; // content 模板private final AtomicLong counter = new AtomicLong(); // 自動生成 id@RequestMapping("/greeting")public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {return new Greeting(counter.incrementAndGet(), // 自增String.format(template, name) // content模板);}
}
在運行之前,先解釋一下這段代碼。
首先,@RestController注解規定了GreetingController是一個Restful API的控制器,只返回API相關的數據,如果是普通的@Controller注解,如果在方法上不做特殊的配置,將默認返回一個視圖(關于視圖在后面會提及)。
其次,@RequestMapping("/greeting")是一個請求映射,當瀏覽器訪問 http://localhost:8080/greeting,是,將會轉入這個方法進行處理。
@RequestParam用于獲取該請求的參數,當瀏覽器訪問 http://localhost:8080/greeting?name=Gaussic是,將會把參數的值寫入name中,此處默認值是World,如果不設置默認值且不傳遞參數,將會報錯。
特別要注意的是,這個方法直接返回了一個Greeting對象,官方的解釋是:
As you see in steps below, Spring uses the?Jackson JSON?library to automatically marshal instances of type?
Greeting
?into JSON.
也就是說,Spring會使用Jackson JSON庫自動地將這個Greeting對象轉化為JSON并返回。這一點非常強大,而且在編寫API時是非常有作用的。
現在所有的開發已經完成,在IDEA中運行Spring Boot非常簡單,點擊右上角的箭頭即可:
在瀏覽器中訪問 http://localhost:8080/greeting,返回json格式數據,刷新之后id會自增:
傳入參數name,將返回新的數據:
這樣,一個簡單的Restful Service開發完成了。
如果需要在外部運行,需要將應用打成jar包。在此可以使用IDEA內部集成的maven進行打包,
點擊右端的 Maven Projects,先選擇 clean,再選擇 package,將會在target文件夾下生成一個.jar文件。
現在,使用:
java -jar target/springblog-0.0.1-SNAPSHOT.jar
運行即可。
轉載請注明出處:Gaussic(自動問答)
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
下面的StudentService.java实现了 通过JDBC对表STUDENTS的SELECT 和INSERT操作:
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态