為什麼使用 Spring MVC
Spring helps development teams everywhere build simple, portable, fast and flexible JVM-based systems and applications.
BUILD ANYTHING
RUN ANYWHERE
REST ASSURED
以上內容摘自 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 項目,這樣會更快,也不容易出錯。
依次選擇 IDEA->File->NEW->Maven->Next
輸入GroupId, ArtifactId,Version默認即可
輸入 Project name,Finish
GroupId:
定義了項目屬於哪個組,一般來說這個網網和公司或組織關聯,比如說,你所在的公司為mycom.那就應該定義為com.mycom.mymaven,mymaven為項目名稱
ArtifactId:
定義了當前Maven項目在組中的唯一id
至此,我們就用 IDEA 創建了一個 Maven 工程,項目結構如下圖所示:
然後我們需要更改 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 也像我們期望的一樣自增。
閱讀更多 JAVA技術開發 的文章