1. SpringBoot服务端数据-实现添加用户功能
(1)创建一个Maven的jar工程。
(2)修改POM文件添加Web启动器与Thymeleaf坐标。
(3)在项目中使用Thymeleaf编写一个添加用户的视图。
(4)创建一个Controller处理添加用户请求。
@Controller
public class UsersController {
@RequestMapping("/{page}")
public String showPage(@PathVariable String page){
return page;
}
/**
* 完成添加用户
* @return
*/
@RequestMapping("/addUser")
public String addUser(Users users){
System.out.println(users);
return "ok";
}
}
2.SpringBoot服务端数据-数据校验
(1)Spring Boot中服务端数据校验技术的特点是什么?
SpringBoot 中使用了 Hibernate-validate 校验框架
(2)阐述Spring Boot中如何实现服务端数据校验?
第一步:在实体类中添加校验规则
第二步:在controller中开启校验
两种方式,第一种:
第二种:
第三步:在页面中获取提示信息
或者
(3)@NotBlank注解的作用是什么?
对数据进行非空校验
(4)@Valid注解的作用是什么?
开启对实体类对象的数据校验
(5)BindingResult的作用是什么?
封装了校验的结果
3.SpringBoot服务端数据-解决异常
(1)在服务端数据校验时会出现什么异常?
(2)产生异常的原因是什么?
因为当我们第一次访问界面的时候,还没有进入controller层去进行添加操作,只是在跳转界面这个操作中,所以在html中我们进行数据校验的参数无法得到,则无法进行显示,就会出现错误。
(3)如何解决该异常?
两种方式解决:
第一种:可以在跳转页面的方法中注入一个 Uesrs 对象。注意:由于 springmvc 会将该对象放入到 Model 中传递。key 的名称会使用该对象的驼峰式的命名规则来作为 key。参数的变量名需要与对象的名称相同。将首字母小写。
第二种:如果想为传递的对象更改名称,可以使用@ModelAttribute(“aa”)这表示当前传递的对象的 key 为 aa。那么我们在页面中获取该对象的 key 也需要修改为 aa
(4)@ModelAttribute注解的作用是什么?
为传递参数对象更改名称
4.SpringBoot服务端数据-其他校验规则
(1)@NotBlank: 注解的作用是什么?
对实体类的对象进行非空校验,判断是否为null或空字符串
(2)@NotEmpty: 注解的作用是什么?
非空校验,但是可以识别空字符串
(3)@Length: 注解的作用是什么?
判断字符的长度(最大或最小)
(4)@Min: 注解的作用是什么?
判断数值最小值
(5)@Max: 注解的作用是什么?
判断数组最大值
(6)@Email:注解的作用是什么?
判断邮箱是否合法
5.SpringBoot异常处理-自定义错误页面
(1)在Spring Boot中一共提供了几种处理异常的方式?
五种处理异常方式
(2)什么是自定义错误页面方式?
SpringBoot默认的处理异常的机制:SpringBoot默认已经提供了一套处理异常的机制。一旦程序中出现了异常SpringBoot会向/error的url发送请求。在SpringBoot中提供了一个叫BasicExceptionController来处理/error请求。然后跳转到默认显示异常的页面来展示异常信息。
(3)自定义错误页面的命名上有何要求?
名称必须叫error
(4)自义定错误页面应该放到项目的什么位置?
如果我们需要将所有的异常统一跳转到自定义的错误页面,需要在src/main/resources/templates目录下创建error.html页面。
6.SpringBoot异常处理-@ExceptionHandler
(1)@ExceptionHandler注解的作用是什么?
使得不同的异常跳转到不同的异常界面
(2)使用@ExceptionHandler注解处理异常的步骤是什么?
第一步:controller层
/**
* java.lang.NullPointerException
* * 该方法需要返回一个 ModelAndView:目的是可以让我们封装异常信息以及视
* 图的指定
* * 参数 Exception e:会将产生异常对象注入到方法中
*/
@ExceptionHandler(value = {java.lang.NullPointerException.class})
public ModelAndView nullPointerExceptionHandler(Exception e){
ModelAndView model=new ModelAndView();
model.addObject("error",e.toString());
model.setViewName("error1");
return model;
}
/**
* java.lang.ArithmeticException
* * 该方法需要返回一个 ModelAndView:目的是可以让我们封装异常信息以及视
* 图的指定
* * 参数 Exception e:会将产生异常对象注入到方法中
*/
@ExceptionHandler(value = {java.lang.ArithmeticException.class})
public ModelAndView arithmeticExceptionHandler(Exception e){
ModelAndView model=new ModelAndView();
model.addObject("error",e.toString());
model.setViewName("error2");
return model;
}
第二步:界面显示
7.SpringBoot异常处理-@ControlleAdvice
(1)@ControllerAdvice注解的作用是什么?
处理异常的全局异常类
(2)@ControllerAdvice+@ExceptionHandler注解处理异常有什么特点?
在全局异常类上要加上@ControllerAdvice注解,然后在该类中加入@ExceptionHandler注解处理异常的方法。
8.SpringBoot异常处理-SimpleMappingExceptionResolver
(1)SimpleMappingExceptionResolver的作用是什么?
完成异常的同一处理
(2)阐述使用SimpleMappingExceptionResolver处理异常的方式是什么?
/**
* 通过 SimpleMappingExceptionResolver 做全局异常处理
*/
@Configuration
public class GlobalException {
/**
* 该方法必须要有返回值。返回值类型必须是:
SimpleMappingExceptionResolver
*/
@Bean
public SimpleMappingExceptionResolver getSimpleMappingExceptionResolver(){
SimpleMappingExceptionResolver resolver = new SimpleMappingExceptionResolver();
Properties mappings = new Properties();
/**
* 参数一:异常的类型,注意必须是异常类型的全名
* 参数二:视图名称
*/
mappings.put("java.lang.NullPointerException","error1");
mappings.put("java.lang.ArithmeticException","error2");
//设置视图与异常的映射关系
resolver.setExceptionMappings(mappings);
return resolver;
}
}
9.SpringBoot异常处理-自定义HandlerExceptionResolver
(1)HandlerExceptionResolver接口的作用是什么?
全局异常处理
(2)阐述使用HandlerExceptionResolver接口处理异常的方式是什么?
@Configuration
public class GlobalException implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
ModelAndView model = new ModelAndView();
if (e instanceof NullPointerException){
model.setViewName("error1");
}
if (e instanceof ArithmeticException){
model.setViewName("error2");
}
model.addObject("error",e.toString());
return model;
}
}
10.Spring Boot整合junit单元测试
(1)@RunWith注解的作用是什么?
类启动器
(2)@SpringBootTest注解的作用是什么?
1、表示当前类为springBoot的测试类
2、加载SpringBoot启动类,启动springBoot
11.Spring Boot热部署-SpringLoader-方式一
(1)使用SpringLoader实现热部署的方式有几种?
两种
1、SpringLoader插件
2、DevTools工具
(2)SpringLoader实现热部署有什么缺陷?
该部署方法只对Java代码做部署处理,但是对页面无能为力。
(3)如何启动通过Maven插件方式引入SpringLoader实现热部署的服务?
Spring-boot:run
(4)如何关闭使用SpringLoader热部署的服务?
需要在后台手动关闭该进程
12.Spring Boot热部署-SpringLoader-方式二
(1)手动添加SpringLoader的jar实现项目的热部署的步骤是什么?
1、添加 springloader 的jar 包
2、启动项目
(2)启动服务时与基于插件方式添加SpringLoader方式有何区别?
一个通过maven命令 spring-boot:run来启动
这种方式通过-javaagent:.\lib\springloaded-1.2.5.RELEASE.jar -noverify来启动项目。
(3)启动服务时需要添加什么启动参数?
添加 -javaagent:.\lib\springloaded-1.2.5.RELEASE.jar -noverify
13.Spring Boot热部署-Devtools的使用
(1)Spring Loader与Devtools的区别是什么?
SpringLoader在部署项目的时候使用的是热部署的方式
DevTools在部署项目的时候使用的是重写部署的方式
(2)使用Devtools实现热部署的步骤是什么?
1、修改项目的pom文件,添加devtools的依赖
2、启动项目
3、更改后台数据或者前台数据,等待一会就会重新自行部署