SpringBoot

本文深入讲解SpringBoot应用的启动流程,包括主程序标注、REST控制器、自动配置、日志框架的使用,以及与Web开发的整合,如Thymeleaf模板引擎的配置与国际化,错误处理机制的定制,和嵌入式Servlet容器的配置。
摘要由CSDN通过智能技术生成

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

     

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值