首先根據上一篇文章內容創建一個Spring Boot項目,如圖所示:
一,創建Controller並返回數據
在src/main/java/項目文件夾下面創建package,繼續裏面可以創建模塊的package,然後可以右鍵創建Class,命名爲helloController,然後就可以寫控制器代碼了。
package xxh.springbootmvc.xxhdemo1.helloController; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; @RestController @RequestMapping("/v1/hello") public class helloController { @RequestMapping("/world") public String world() { return "Hello World !!!你好世界"; } }
例如,如上代碼就是最簡單的一個返回字符串的Controller,如圖:
如果要指定請求方式,接收URL參數,並根據參數返回數據,可以增加增加一個處理:
@RequestMapping(value = "/getworld", method = RequestMethod.GET) public MVHelloWord getWorld(@RequestParam(value = "id", required = true) int id, HttpServletRequest request) { MVHelloWord entity = null; if (123 == id) { entity = new MVHelloWord(123, "諸葛亮"); } else { entity = new MVHelloWord(0, "不認識"); } return entity; }
效果如圖:
注意:因爲控制器前面加了標註@RestController,所以默認以接口形式返回json數據application/json,標註@RequestMapping就制定了改頁面/接口的名稱,調用方法RequestMethod等規則,標註@RequestParam指明瞭接收的參數規則,或者通過HttpServletRequest對象來接收請求信息效果是一樣的。
然後MVHelloWord這個自己創建的模型,下面提到。
如果URL參數裏面的id不等於123則輸出的內容就不一樣了。
二,創建Model
與創建Controller一樣,在模塊package裏創建一個Class,不加任何標註的Class就是一個普通的類,當做Model你可以在裏面寫自己的屬性。比如:
private int id;
private String name;
然後選中他們,右鍵找到Generate生成構造函數和get,set方法:
最終生成的代碼:
package xxh.springbootmvc.xxhdemo1.helloController; /*這是一個Model*/ public class MVHelloWord { public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } /*私有屬性*/ private int id; private String name; public MVHelloWord(int id, String name) { this.id = id; this.name = name; } @Override public String toString() { return "MVHelloWord{" + "id=" + id + ", name='" + name + '\'' + '}'; } }
這樣一個最簡單的Model就創建好了。
三,返回json
當我們在控制器前面加標註@RestController,@RequestMapping,並且在方法裏返回Model時,Spring Boot將默認給我們返回json數據。
四,返回視圖
返回視圖稍微麻煩點,其中就是我們要引入thymeleaf框架。首先在項目結構文件中找到pom.xml,這是項目的引入配置文件。插件包需要在這裏引入才能被加載出來。
打開pom.xml後找到:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>
這是web項目默認的插件,將它複製並粘貼一份,將artifactId改成spring-boot-starter-thymeleaf,保存。也可以將下面的代碼直接複製進去:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
idea工具會自動幫助加載插件框架。
然後在項目結構文件中找到application.properties,這是應用程序(項目)的關鍵屬性配置文件。一些自定義配置或變量都可以寫在這裏。
例如:設置項目的端口,設置視圖的根路徑和視圖文件的後綴名:
#設置項目的端口 server.port=8888 #設置視圖的根路徑和視圖文件的後綴名 spring.thymeleaf.prefix=classpath:/templates/ spring.thymeleaf.suffix=.html
這樣設置就可以在resources/templates/目錄下創建後綴名爲.html的視圖文件了。
點擊templates右鍵新建HTML文件,按照W3C標準創建html代碼即可。
注意:html標籤加協議 xmlns:th="http://www.thymeleaf.org" ,然後頁面纔可以用th引用從Controller傳過來的Model實體。
Controller代碼:
package xxh.springbootmvc.xxhdemo1.helloController; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /*標註是控制器*/ @Controller @RequestMapping("/v1/hello2") public class hello2Controller { @RequestMapping("/world") public String world(HttpServletRequest request,HttpServletResponse response) { System.out.print("Hello World!!!"); MVHelloWord entity = new MVHelloWord(123, "諸葛亮"); request.setAttribute("myEntity",entity); // 請求返回實體變量名及實體對象 return "a"; // 這是視圖名稱 或 路徑/視圖名稱 } }
視圖a.html代碼:
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>我的第一個視圖頁面</title> </head> <body> <h3>下面顯示實體信息:</h3> <!--第一種展示實體數據方式--> myEntity:<span th:text="${myEntity}"></span><br /> id= <span th:text="${myEntity.id}"></span><br /> name= <span th:text="${myEntity.name}"></span><br /> <!--第二種展示實體數據方式--> <div th:object="${myEntity}"> <p>ID:<span th:text="*{id}"></span></p> <p>name:<span th:text="*{name}"></span></p> </div> </body> </html>
請求訪問效果如圖:
當然還有另外2種返回視圖的Controller代碼寫法:
package xxh.springbootmvc.xxhdemo1.helloController; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /*標註是控制器*/ @Controller @RequestMapping("/v1/hello2") public class hello2Controller { @RequestMapping("/world") public String world(HttpServletRequest request,HttpServletResponse response) { System.out.print("Hello World!!!"); MVHelloWord entity = new MVHelloWord(123, "諸葛亮"); request.setAttribute("myEntity",entity); // 請求返回實體變量名及實體對象 return "a"; // 這是視圖名稱 或 路徑/視圖名稱 } @RequestMapping("/world2") public ModelAndView world2() { MVHelloWord entity = new MVHelloWord(123, "諸葛亮"); ModelAndView mv = new ModelAndView(); mv.setViewName("Vhello/a"); // 這是視圖名稱 或 路徑/視圖名稱 mv.addObject("myEntity", entity); // 請求返回實體變量名及實體對象 return mv; } @RequestMapping("/world3") public String world3(Integer id, Model model, HttpServletRequest request, HttpServletResponse response) { MVHelloWord entity = new MVHelloWord(123, "諸葛亮"); model.addAttribute("entity", entity); // 請求返回實體變量名及實體對象 model.addAttribute("id", id == null ? 99 : id); //這是自定義放回白能量id model.addAttribute("msg", "第一戰立威之戰:火燒博望坡"); //這是自定義放回白能量msg return "Vhello/d"; // 這是視圖名稱 或 路徑/視圖名稱 } }
請求world2效果如圖:
請求world3效果如圖:
其中,視圖d.html代碼如下:
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>MVC測試</title> </head> <body> <h3>world3測試</h3> <p><label>參數id=</label><input type="text" name="id" th:id="'data'+${id}" readonly="readonly" th:value="${id}"></p> <p><label>id=</label><span th:text="${entity.id}"></span></p> <p><label>name=</label><span th:text="${entity.name}"></span></p> <p style="color: orangered" th:utext="${msg}"><label>id=</label><span></span></p> </body> </html>
代碼結構如圖;
上一篇:idea創建一個入門Spring Boot項目(controller層)使用Maven代碼管理