Java一個入門級MVC基於Spring Boot項目

首先根據上一篇文章內容創建一個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代碼管理 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章