1.主程序:启动主程序
@SpringBootApplication用来标注一个主程序,,说明这是一个Spring Boot应用
public class MyApllication{
public static void main(String[] args){
SpringApplication.run(MyApplication.class,args);
}
}
@RestController:告诉Spring以字符串的形式渲染结果,并直接返回给调用者。
@EnableAutoConfiguration:注解告诉Spring Boot根据添加的jar依赖猜测你想如何配置Spring。由于spring-boot-starter-web
添加了Tomcat和Spring MVC,所以auto-configuration将假定你正在开发一个web应用,并对Spring进行相应地设置。
@RequestMapping注解提供路由信息,它告诉Spring任何来自”/“路径的HTTP请求都应该被映射到
home`方法。
SpringBoot的测试:@RunWith(Spring Runner.class)
@SpringBootTest
public class SpringTest{@Test可以自动注入}
2.日志框架:
@RunWith(SpringRunner.class)
@ContextConfiguration(classes = {MyApplication.class})
@SpringBootTest
public class Test {
//记录器
Logger logger = LoggerFactory.getLogger(getClass());
@org.junit.Test
public void contextLoads(){
//日志的级别,由低到高,可以调整输出日志的级别,默认输出的是info,及以后的级别.
//如果想要改变级别,在application.properties中加loggimg.level.com.edu=trace //logging.file=springboot.log当前项目下生成日志 ,也可以指定
//logging.path=/spring/log在当前磁盘的根路径下创建spring文件夹和里面的log文件夹,使用spring.log作为默认文件
logger.trace("这相当于System.out.print");
logger.debug("这是调试信息");
logger.info("这是自己要输出的信息");
logger.warn("这事警告日志");
logger.error("这是错误提示日志");
//logging.pattern.console=%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50}v-v%msg%n 在控制台输出的日志的格式
//logging.pattern.file= 指定文件中日志输出的格式
}}
3.SpringBoot与web开发
SpringBoot对前端的映射规则:
1>所有/webjars/**,都去classpath/META-INF/resources/webjars/找资源
webjars:以jar包的方式引入静态资源,需要jQuery,就在gradle里写依赖
*** * dependencies {}写依赖的 bootRepackage{}包下
扩展SpringMVC:编写一个配置类(@Configuration),是webMvcConfigurationAdapter类型,不能标注@EnableWebMvc
public class MyMvcConfig extends WebMvcConfigurerAdapter { //super.addViewControllers(registry)
@Override
public void addViewControllers(ViewControllerRegistry registry){
//浏览器发送请求到页面
registry.addViewController("/hello").setViewName("success"); }}
原理:1>WebMvcAutoConfiguration是SpringMvc的自动配置类
2>在做其他自动配置时会自动导入:@import(EnableWebMvcConfiguration.class)
3>容器中所有的WebConfigurer都会一起起作用
4>我们自己的配置类也会被调用
4.Thymeleaf模板引擎(Thymeleaf3主程序,layout2以上版本)
1.引入:compile group: 'org.springframework.boot', name: 'spring-boot-starter-thymeleaf', version: '3.0.2.RELEASE'
2.国际化
1>编写国际化配置文件,抽取页面需要显示的国际化消息
login.btn=登录
login.password=密码
login.remember=记住我
login.tip=请登录
login.username=用户名
2>使用ResourceBundleMessageSource管理资源文件,但是SpringBoot已经自动配置好了
3>在页面取出国际化内容,#{。。。。}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>成功</title>
</head>
<body>
<h1 th:text="#{login.tip}">登录</h1>
<input type="checkbox" value="remember_me"/>[[#{login.remember}]]
<div th:text="${hello}">成功</div>
<button type="button" th:text="#{login.btn}">Sign in</button>
</body>
</html>
根据浏览器的语言进行转换
4>点击切换国际化
//防止表单重复提交,可以重定向到主页
return "redirect:/top.html";
1.thymeleaf公共页面元素抽取
1.抽取公共片段
div 标签中加 th:fragment="copy"
2.引入公共片段
div标签中加 th:insert="~{footer :: copy}"
~{templatename :: selector}:模板名::选择器
~{templatename:: fragmentname}:模板名::片段名
3.默认效果
insert 片段在div中
th:insert引入
th:replace替换
th:include被引入片段的内容,包含在div中
2.错误处理机制
1>SpringBoot默认的错误处理机制
默认效果:1.返回一个默认的错误页面
2.postman访问,默认响应JSON数据
原理:ErrorMvcAutoConfiguration:错误处理的自动配置
给容器中添加了
-
DefaultErrorAttributes,
帮我们在获取信息
页面能获取的信息:timestamp:时间戳
status:状态码
error:错误提示
exception异常对象
message:异常消息
- BasicErrorController,处理默认的error请求
@Controller
@RequestMapping("${server.error.path:${error.path:/error}}")
public class BasicErrorController extends AbstractErrorController{}
- ErrorPageCustomizer,
-
@Value("${error.path:/error}") private String path="/error";系统出现错误以后来到error,请求进行处理,相当于web.xml注册的页面规则
-
DefaultErrorViewResolver
-
步骤:一旦系统出现错误,ErrorPageCustomizer会生效(定制错误的相应规则),就会来到/error请求,就会被BasicErrorController处理,一种是响应页面,一种是JSON数据
2>如何定制错误响应
1.如何定制错误的页面
有模板引擎的情况下,error/状态码,(将错误页面命名为错误状态码.html,放在模板引擎文件的error文件夹下),发生此状态码的错误就会来到对应的页面。
我们可以使用4XX和5XX作为错误页面的文件名来匹配这种类型的所有错误,精确优先
2.如何定制错误的JSON数据
-
@ControllerAdvice public class MyExceptionHandler { //第一种,没有自适应效果 @ResponseBody @ExceptionHandler(UserNotExistException.class) public Map<String,Object> handleException(Exception e){ Map<String,Object> map =new HashMap<>(); map.put("code","user.notexist"); map.put("message",e.getMessage()); return map; } //第二种,有自适应效果 @ExceptionHandler(UserNotExistException.class) public String handleException(Exception e, HttpServletRequest request){ Map<String,Object> map =new HashMap<>(); //传入我们自己的在状态码,不传默认是200 request.setAttribute("java.servlet.error.status_code",400); map.put("code","user.notexist"); map.put("message",e.getMessage()); //转发到/error,BasicErrorController会做处理 return "forward:/error"; } }
4.嵌入式Servlet容器
1.如何定制和修改Servlet容器的相关配置
修改和servlet有关的配置(ServerProperties)
-
server.port=8081 context-path=/crud //通用的Servlet容器设置,server.xxx //Tomcat的设置, server.tomcat.xxx