Spring Boot 面向微服务的框架,更适合称作一个方案
Spring Boot 的核心还是 Spring,只是多了一些工程化的方案:
- Java Web 容器的嵌入集成,Spring Boot 默认集成了 Tomcat
- Spring Boot 还自定了工程打包格式,通过这个就可以直接把一个 Java Web 工程转化为一个普通的 Java 工程,启动一个 main 方法就可以把 Spring 工程启动起来,降低了开发的难度
- Spring Boot 默认集成了你能想到的所有的第三方库和服务,比如数据库连接、NoSQL、安全等
- Spring Boot 提供了标准的属性配置文件
Spring MVC 是 Java Web 的一种实现框架,Java Web 的规范就是 Servlet 技术,所有的 Java Web 都实现了 Servlet API 的定义
这是一个网页加载的过程
在 Spring Boot 方案里,一个网页请求到了服务器后,首先进入的是 Java Web 服务器,然后进入到 Spring Boot 应用,最后匹配到某一个Spring Controller
(这其实也是一个 Spring Bean),然后路由到具体某一个 Bean 的方法,执行完后返回结果,输出到客户端来。
在整个流程里,重要的就是Spring Controller
,有三个核心的技术点:
- Bean 的配置:Controller 注解应用
- 网络资源的加载:加载网页
- 网址路由的配置:RequestMapping 注解应用
1. Controller 注解
Spring Controller
本身也是一个 Spring Bean,只是它提供了 Web 能力,只需要在实现类上提供一个Controller
注解就可以了。
import org.springgramework.stereotype.Controller;
@Controller
public class HelloController {
}
2. 加载网页
在 Spring Boot 应用中,一般把网页放在src/main/resources/static
目录下
在 Controller 中,会自动加载 static 下的 HTML 内容
import org.springframework.stereotype.Controller;
@Controller
public class HelloControl {
public String say(){
//返回的是 html 文件路径
return "hello.html";
}
}
3. RequestMapping 注解
对于 Web 服务器来说,必须要实现的一个能力就是解析 URL,并提供资源给调用者。这个过程称为路由。Spring MVC 完美的支持了路由能力,只需要在 Web 访问的方法上添加一个@RequestMapping
注解就可以完成配置了
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class HelloControl {
@RequestMapping("/hello")
public String say(){
return "html/hello.html";
}
}
获取 Http URL 参数
https://域名/songlist?id=xxxx
定义参数,在方法上卖弄添加对应的参数和参数注解
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
@Controller
public class SongListControl {
@RequestMapping("/songlist")
public String index(@RequestParam("id") String id) {
System.out.println(id);
return "html/songList.html";
}
}
这个注解@RequestParam
的参数 “id”必须和 URL 的参数一样
// https://域名/songlist?listId=xxxx
@RequestMapping("/songlist")
public String index( @RequestParam("listId") String id){
return "html/songList.html";
}
@RequestMapping
注解用于解析 URL 请求路径,这个注解默认是支持所有的 Http Method 的,单对于 GET 请求来说,可以使用@GetMapping
注解
import org.springframework.web.bind.annotation.*;
@GetMapping("/songlist")
public String index(@RequestParam("id") String id,@RequestParam("pageNum") int pageNum){
return "html/songList.html";
}
非必须传递的参数
@GetMapping("/songlist")
public String index(@RequestParam(name="pageNum",required = false) int pageNum,@RequestParam("id") String id){
return "html/songList.html";
}
设置非必须传递的参数后,这两种 URL 请求都是可以的
http://xxxx/songlist?id=xxx&pageNum=1
http://xxxx/songlist?id=xxx
上面的例子都是返回 HTML 内容
如果只想返回数据(类JSON格式):则需要用到@ResponseBody
注解,放在请求方法上
如果在请求返回的参数时对象时 Spring MVC 会自动把对象转换为 JSON 字符串输出到网页上
@GetMapping("/api/foos")
@ResponseBody
public String getFoos(@RequestParam("id") String id) {
return "ID: " + id;
}
点击 Spring Boot