之前在写Spring入门的学习笔记,但是深深感受到单单是“硬学”,即便有穿插一些生动的小例子,还是远远不能用好Spring,更不用谈掌握其核心,深入理解它的思想了。不得不承认,项目是进步的原动力,很复杂的思想、理念,经历几个项目,相信大家都能用的很熟,也会有一定的理解了,辅之以一些参考文档,大神的思想解析,便能够做到游刃有余地利用Spring,而不是被Spring的各种配置,各种思想、各种模式搞得晕头转向。
因此,这一系列的文章,将立足于实战,着眼于项目,以项目作为推动来逐步学习和理解Spring,当然,我们从简单易于上手的Spring-boot开始我们的旅程。我们采用MAVEN构建项目,使用的是Intellij IDEA作为环境,如果不熟悉MAVEN的朋友可以先学习MAVEN的简单使用。
Spring-boot入门
大部分实战的开头都是HelloWorld,我们也不例外,从最简单的程序着手介绍Spring-boot项目的构建过程,当然我们后面会做一点小小的扩展。
1、首先是项目的创建:我们用MAVEN来构建项目,创建完成后的项目结构:
;
2、接下来我们配置pom文件,配置源码如下:
4.0.0
org.seu.cambridgewoo
SpringWebDemo
1.0-SNAPSHOT
org.springframework.boot
spring-boot-starter-parent
1.3.3.RELEASE
org.springframework.boot
spring-boot-starter-web
junit
junit
4.12
3、配置完pom文件后我们开始编写主代码和测试代码,这里需要注意的一点是,Springboot要求我们的源码必须要在package下,因此直接在java文件下创建源文件是不能够通过编译的。所以我们创建两个package然后在package下编写我们的主代码,项目结构如图所示:
4、个各类的代码如下:
HelloWorld类,接受http请求并返回数据
package org.seu.cambridge;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* Created by Cambridgewoo on 2017/3/15.
*/
@RestController /*将收到的http请求根据路径分发给对应的controller,RestController是特殊的Controller,
其返回值直接作为http的response的body返回给浏览器*/
public class HelloWorld {
@RequestMapping("/") //定位路由信息
public String sayHello(){
return "Hello,World!";
}
}
Application类:Spring-boot会做一些准备工作并启动服务器
package org.seu.cambridge;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* Created by Cambridgewoo on 2017/3/15.
*/
@SpringBootApplication //是一个注解集合
public class Application {
public static void main(String[] args){
SpringApplication.run(Application.class,args);
}
}
HellowWorldTest类:测试了sayHello
package org.seu.cambridge;
import org.junit.Test;
import static junit.framework.Assert.assertEquals;
/**
* Created by Cambridgewoo on 2017/3/15.
*/
public class HelloWorldTest {
@Test
public void testsayHello(){
assertEquals("Hello,World!",new HelloWorld().sayHello());
}
}
其中Application类中的@SpringBootApplication是一个注解集合,可以看到其内容如下:
5、接下来我们在命令行中输入mvn clean test进行测试得到如下结果:测试通过,接下来我们启动服务器看一看我们的成果,在命令行中输入mvn spring-boot:run,看到结果如下:
从红框标出来的位置可以看到服务器已经启动,我们可以从http://localhost:8080/的位置看到我们的成果了!结果截图如下:
6、至此,我们已经完成了最简单的项目,接下来我们稍作一些些扩展,在前面的HelloWorld类里,有@requestmapping注解,其目的是告知目标url,这里有很多应用方式,比如嵌套使用:;多个url并列:
;当我们遇到url呈如下情况时:www.github.io/user1;www.github.io/user2;如果我们针对每一个url逐条创建将会十分的繁琐,因此我们会使用@PathVariable使其自动识别url:
;同时我们经常会遇到get或者post不同的请求,我们可以使用对@RequestMapping添加属性的方式,来对不同的请求进行相应:
;
以上我们例举了不少的情况,具体的实现和结果请大家亲自动手试一试,对于不理解的地方动手后会变得很清晰。
7、下面我们再细致一点,看一看@RestController这个注解,谈这个注解之前,我们看一看项目的结构,test类暂且不谈,Application的目的实际上就是Spring-boot的准备工作,并且启动的服务器,真正的“业务逻辑”是HelloWorld中实现的,但实际应用中,我们会将这个接受http请求并返回数据的接口同业务逻辑分离开来,使得项目更加的模块化和松耦合,便于维护和复用,这里不再展开细说。回到@RestController,这个注解的意思是直接将return的信息以字符串返回给网页,所以我们看到了“HelloWorld!”这一串字符,但刚才也说了,实际应用中,这里往往只是调用各种业务的接口,自然也不会使用@RestController,下面我们简单地试一下@Controller,代码如下:,并且我们需在resources中添加templates文件夹,其中添加hello.html,结构如图:
,hello.html的代码如下:
Getting Started: Serving Web Content
在HelloWorld类中修改代码如下:
@Controller
public class HelloWorld {
@RequestMapping("/hello/{name}")
public String hello(@PathVariable("name") String name, Model model) {
model.addAttribute("name", name);
return "hello"; //寻找名字为hello的模板进行渲染
}
}
完成后我们启动服务器,在网页中浏览到结果:
至此,我们的第一个Spring-boot程序全部完成。