初見識 Spring MVC

為什麼使用 Spring MVC

Spring helps development teams everywhere build simple, portable, fast and flexible JVM-based systems and applications.

  1. BUILD ANYTHING

  2. RUN ANYWHERE

  3. REST ASSURED

初見識 Spring MVC

以上內容摘自 Sping官網

並且重要的是,Spring MVC使用廣泛,各大公司基本都有在用,掌握了它無疑可以更好地工作。

開始

以下文檔將會指導你用Spring實現一個 “hello world” web 應用。

你將會創建

創建一個 HTTP GET 請求:

http://localhost:8080/greeting

然後回得到以下的響應:

{"id":1,"content":"Hello, World!"}

你也可以自定義可選參數 name 的值:

http://localhost:8080/greeting?name=User

該 name 的值將會覆蓋默認的 “World”,並顯示在頁面上:

{"id":1,"content":"Hello, User!"}

你所需要具備的

創建 Maven 工程

官方提供了使用 Gradle 創建項目以及直接從 Git 下載源碼 的方式。

我們使用 Maven 創建項目。

官網提供的方法是自己創建對應的目錄結構:

mkdir -p src/main/java/hello

而我們可以用 IDE 來創建一個 Maven 項目,這樣會更快,也不容易出錯。

  1. 依次選擇 IDEA->File->NEW->Maven->Next

  2. 輸入GroupId, ArtifactId,Version默認即可

  3. 輸入 Project name,Finish

GroupId:

定義了項目屬於哪個組,一般來說這個網網和公司或組織關聯,比如說,你所在的公司為mycom.那就應該定義為com.mycom.mymaven,mymaven為項目名稱

ArtifactId:

定義了當前Maven項目在組中的唯一id

至此,我們就用 IDEA 創建了一個 Maven 工程,項目結構如下圖所示:

初見識 Spring MVC

然後我們需要更改 pom.xml 文件。

將以下 pom.xml 替換項目生成的 pom.xml

4.0.0org.springframeworkgs-serving-web-content0.1.0org.springframework.bootspring-boot-starter-parent1.4.0.RELEASEorg.springframework.bootspring-boot-starter-thymeleaforg.springframework.bootspring-boot-devtoolstrue1.8org.springframework.bootspring-boot-maven-plugin

然後執行:

mvn clean

mvn compile

就會將所依賴的 jar 下載下來(前提是需要安裝好 Maven,Linux可以通過 yum install maven進行安裝,Mac 可以通過 brew install maven 進行安裝)。

創建一個 web 服務器

Spring 創建的項目中,HTTP 請求是通過 controller 進行處理的。你可以很容易通過@Controller 註解來識別這些請求。在下面的例子中,我們將以 JSON 的形式響應 /greeting 請求。如下所示:

{ "id": 1, "content": "Hello, World!" }

首先創建 Greeting.java

package hello; 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; } }

然後創建 GreetingController.java

package hello;import java.util.concurrent.atomic.AtomicLong;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.RestController;public class GreetingController { private static final String template = "Hello, %s!"; private final AtomicLong counter = new AtomicLong(); ("/greeting") public Greeting greeting(@RequestParam(value="name", defaultValue="World") String name) { return new Greeting(counter.incrementAndGet(), String.format(template, name)); } }

這個控制器很簡潔,但是包含了大量的信息。

這個 @RequestMapping 註解確保了 HTTP 的 /greeting 請求映射到 greeting() 方法。

上面的例子沒有區別 GET, PUT, POST 等等,因為 @RequestMapping 默認匹配所有的 HTTP 請求。如果想具體指明是哪種請求,可以使用@RequestMapping(method=RequestMethod.GET)

@RequestParam 會將請求過來的查詢字符串中的 name 綁定到 greeting() 方法中。該值並不是必須的,當沒有傳入值時,將會使用默認的 “World” 來代替。

傳統的 MVC 控制器和 RESTful web service 控制器的一個主要區別是 RESTful web service 創建了 HTTP response body,對象可以直接以 JSON 的形式寫入到 HTTP 響應體中,而不需要依賴模板引擎在服務器端渲染數據。

該 Greeting 對象必須轉換成 JSON,Spring 會自動使用 Jackson 2 進行轉換。

最後我們需要創建啟動器,啟動我們的 Web 服務。 創建 Application.java

package hello;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); } }

@SpringBootApplication 是一個很方便的註解,它相當於添加了以下所有註解:

  • @Configuration

  • @EnableAutoConfiguration

  • @EnableWebMvc

  • @ComponentScan

執行應用

mvn spring-boot:run

然後我們會在後臺看到服務啟動的日誌,大概十幾秒後就可以了。

測試應用

瀏覽器訪問 http://localhost:8080/greeting ,你將會看到:

{"id":1,"content":"Hello, World!"}

訪問 http://localhost:8080/greeting?name=User ,你將會看到:

{"id":2,"content":"Hello, User!"}

我們會看到 id 從 1 變為 2,這也證明了不同的請求訪問的是同一個 GreetingController 實例,並且 counter 也像我們期望的一樣自增。


分享到:


相關文章: