Spring Boot/Spring MVC

weixin_34107955發表於2016-09-27

先建立pom:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.springframework</groupId>
    <artifactId>gs-serving-web-content</artifactId>
    <version>0.1.0</version>
    <packaging>war</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.4.0.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</project>

建立web controller:
src/main/java/hello/GreetingController.java

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

@Controller
public class GreetingController {

    @RequestMapping("/greeting")
    public String greeting(@RequestParam(value="name", required=false, defaultValue="World") String name, Model model) {
        model.addAttribute("name", name);
        return "greeting";
    }

}

建立application.properties:
src/main/resources/application.properties

spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
#如果按照一般web工程將頁面放在src/main/webapp/WEB-INF/jsp/,則配置字首
#spring.mvc.view.prefix=/WEB-INF/jsp/
#spring.mvc.view.suffix=.jsp

完整的application.properties 示例

建立thymeleaf頁面:
spring boot不推薦使用jsp,因為在tomcat/jetty上jsp不能在巢狀的tomcat/jetty容器中解析,即不能在打包成可執行的jar的情況下解析 (直接run main函式或者打成可執行的jar包),只能是打成war包在非巢狀的tomcat容器才能看到效果。Spring Boot提供了預設配置的模板引擎主要有以下幾種:

  • Thymeleaf
  • FreeMarker
  • Velocity
  • Groovy
  • Mustache

src/main/resources/templates/greeting.html

<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <title>Getting Started: Serving Web Content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p th:text="'Hello, ' + ${name} + '!'" />
</body>
</html>

執行application:

package hello;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

因為使用了spring boot,到現在我們都沒有配置過任何.xml檔案,包括web.xml。接下來我們可以打包,執行。

java -jar target/gs-serving-web-content-0.1.0.jar

開啟瀏覽器 8080/greeting , 可以看到:
"Hello, World!"
8080/greeting?name=User 可以看到:
"Hello, User!"

配置預設頁面和靜態資源:
Spring Boot預設提供靜態資源目錄位置需置於classpath下,目錄名需符合如下規則:

  • /static
  • /public
  • /resources
  • /META-INF/resources

例如:/static/js,/static/css。index.html 一般作為預設頁面一般也配置在靜態資源路徑下,開啟 http://localhost:8080/ 即展示:
src/main/resources/static/index.html

<!DOCTYPE HTML>
<html>
<head>
    <title>Getting Started: Serving Web Content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
    <p>Get your greeting <a href="/greeting">here</a></p>
</body>
</html>

在四個目錄下同名的html頁面優先順序先後為:/META-INF/resources > /resources > /static > /public。

一個完整的專案結構:

  • root package結構:com.example.myproject
  • 應用主類Application.java置於root package下,我們放在root package下可以幫助程式減少手工配置來載入到我們希望被Spring載入的內容。
  • 實體(Entity)與資料訪問層(Repository)置於com.example.myproject.domain包下。
  • 邏輯層(Service)置於com.example.myproject.service包下。
  • Web層(web)置於com.example.myproject.web包下。

相關文章