写一个最小可运行且无 XML 配置(看到大坨大坨的 XML 配置就烦)的 Spring MVC 程序。

建立项目

首先,你需要下载 Maven。关于 Maven 的使用,请参考我写的这篇入门文章。按照 Maven 的约定,我们建立如下目录结构:

--src
  --main
    |--java
    |  |--com
    |    |--scottqian
    |      |--controllers       /*控制器目录*/
    |      |  --HomeController.java
    |      |--Application.java  /*程序入口*/
    |--resources
       |--templates     /*模板目录*/
          |--home.html
--pom.xml

其中,HomeController.java内容如下

package com.scottqian.controllers;

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 HomeController {

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

本身结构就比较清晰了,对 MVC 有点了解的从字面上看都应该知道它的意思了(先抛开@Controller 这种注解不谈)。唯一可能疑惑的地方是Home方法的返回值,这里返回的是一个字符串。这个字符串代表了视图的名字,在 SpringMVC 2.x 时代还可以返回ModelAndView,然后在ModelAndView里面设置ViewModel,其实效果都一样。

Application.java内容如下:

package com.scottqian;

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);
    }

}

这个是程序的入口点,可以看到他是一个标准的 Java main 入口程序。得益于Spring Boot项目,我们可以以如此优雅的方式启动 Spring MVC 程序。简单列举一下这样做的直观好处:

  1. 丢弃大段配置文件
  2. 内嵌 Web 服务器,就地运行(忘记 WAR 文件吧),配合spring-boot-maven-pluginmvn spring-boot:run直接从命令行启动程序

home.html内容如下:

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

模板,没什么好说的了。

pom.xml内容如下:

<?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>com.scottqian</groupId>
    <artifactId>JPanther</artifactId>
    <version>0.1.0</version>

    <!-- 继承spring-boot-starter-parent,这里面做了很多默认的配置-->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.2.3.RELEASE</version>
    </parent>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
    </dependencies>

    <properties>
        <java.version>1.7</java.version>
    </properties>

    <build>
        <plugins>
            <plugin>
                <!-- 为了直接使用 mvn spring-boot:run 启动网站-->
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

    <repositories>
        <repository>
            <id>spring-milestone</id>
            <url>https://repo.spring.io/libs-release</url>
        </repository>
    </repositories>

    <pluginRepositories>
        <pluginRepository>
            <id>spring-milestone</id>
            <url>https://repo.spring.io/libs-release</url>
        </pluginRepository>
    </pluginRepositories>

</project>

#运行项目 有了 maven plugin,运行项目真是再简单不过了。直接如下命令搞定:

mvn spring-boot:run

如果没什么意外,打开 localhost:8080 就可以看到效果了。So Easy~