本节是 Spring Boot基础,主要介绍了Spring MVC技术基础。如果您对此部分已有了解可越过本节的学习。
由于篇幅关系,MVC框架学习分成了两个部分,此篇为第一部分;介绍了spring boot集成MVC框架、使用Controller、URL映射到方法、方法参数。
一、集成MVC框架
1、引入依赖
Spring Boot 集成Spring MVC 框架并实现自动配置,只需要在porm 中添加以下依赖即可,不需要其他任何配置:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
这里采用IDEA 搭建的过程可以参考: 《第一个 Spring Boot2.x 程序快速搭建》https://blog.csdn.net/LUCKWXF/article/details/94472728
2、web目录结构参考
Web 的模板文件位于resources/templates 目录下,模板文件使用的静态资源文件,如js 、css 、图片,存放在resources/static 目录下。在MVC 中, 视图名自动在templates 目录下找到对应的模板名称,模板中使用的静态资源将在static 目录下查找。如下Controller 代码所示,将“/userdetail.html?id=xxx ”请求映射到foo方法:
@RequestMapping ("/userdetail.html")
public String foo (String id) {
......
return "/admin/userinfo.btl";
}
渲染的视图名称是“/admin/userlnfo.btl ”, 会寻找templates/admin/userlnfo. btl 模板文件,如果这个userlnfo.btl 有以下引用
<link href ="/css/ztree.css" rel = "stylesheet"/>
扩展名为btl 的文件是模板文件,是这本书作者创建的Beetl模板技术的模板文件,这里先不用纠结此技术,下节详细介绍。
整体目录效果图参考如下:
从上图可以看到,在Sprin g Boot 应用中,通常会创建如下子包名:
controller 一一此包下包含了MVC 的Controller ,如UserController;
service一一此包下有业务处理代码, 如UserService ;
entity一一包含了业务实体, 如User类;
conf一一包含了一些配置类,比如用于配置数据源的DataSourceConfig, 还有本章的
JSON 序列化配置JacksonConf。
Spring Boot 应用的程序入口 MvctestApplication 建立在这些包名上, 这样Spring Boot 应用能自
动扫描整个项目的结构。
MvctestApplication同其他Spring Boot 程序一样, 仅仅是一个带有@SpringBootApplication 注解的类:
@SpringBootApplication
public class MvctestApplication {
public static void main(String[] args) {
SpringApplication.run(MvctestApplication.class, args);
}
}
二、使用Controller
SpringMVC 框架不像传统的MVC 框架那样必须继承某个基础类才能处理用户的HTTP 请求,Spring MVC 只需要在类上声明@Controller, 标注这是一个Controller 即可。对于用户请求,使用@RequestMapping 映射HTTP 请求到特定的方法处理类。
@Controller
@RequestMapping ("/test")
public class HelloworldController {
@RequestMapping ("/index.html")
public String say (Model model) {
model.addAttribute ("name","hello,world" ) ;
return "/index.btl";
如以上代码所示,
@Controller 作用于类上, 表示这是一个MVC 中的Controller 。
@RequestMapping 既可以作用在方法上, 也可以作用在类上。如上例所示,用户如果访问/test/index. html ,则会交给HelloworldCon位oller.say 方法来处理。say 方法有一个参数Model ,这是Spring MVC 可识别的一个参数类型 ,用来表示MVC 中的Model 。你可以在say 方法中为这个Model 添加多个变量,这些变量随后可以用于视图渲染。
say 方法返回的类型是字符串,默认是视图的名称。Spring Boot 的视图默认保存在resources/templates 目录下, 因此, 渲染的视图是/resources/templates/index. btl 模板文件。
MVC 框架有时候返回的是JSON 字符串,如果想直接返回内容而不是视图名,则需要在方
法上使用@ResponseBody:
@RequestMapping ("/index_str.html")
public @ResponseBody String resposebodytest () {
return "hello,spring boot!";
}
ResponseBody 注解直接将返回的对象输出到客户端,如果是字符串, 则直接返回: 如果不是,则默认使用Jackson 序列化成JSON 字符串后输出。
@RequestMapping ("/index_json.html")
public @ResponseBody JSONObject resposeJsontest () {
JSONObject object = new JSONObject();
//string
object.put("string","string");
//int
object.put("int",2);
//boolean
object.put("boolean",true);
//array
List<Integer> integers = Arrays.asList