SpringBoot web开发

SpringBoot web开发

静态资源

​ web开发必然存在着各种页面和静态资源,那么SpringBoot哪个目录存放静态资源呢,分析源码

WebMvcAutoConfiguration配置类的addResourceHandlers方法为加载静态资源

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    //表示自定义静态资源路径
   if (!this.resourceProperties.isAddMappings()) {
      logger.debug("Default resource handling disabled");
      return;
   }
   Duration cachePeriod = this.resourceProperties.getCache().getPeriod();
   CacheControl cacheControl = this.resourceProperties.getCache().getCachecontrol().toHttpCacheControl();
     //webjars下的静态资源
   if (!registry.hasMappingForPattern("/webjars/**")) {
      customizeResourceHandlerRegistration(registry.addResourceHandler("/webjars/**")
            .addResourceLocations("classpath:/META-INF/resources/webjars/")
            .setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));
   }
   String staticPathPattern = this.mvcProperties.getStaticPathPattern();
    
   if (!registry.hasMappingForPattern(staticPathPattern)) {
      customizeResourceHandlerRegistration(registry.addResourceHandler(staticPathPattern)
            .addResourceLocations(getResourceLocations(this.resourceProperties.getStaticLocations()))
            .setCachePeriod(getSeconds(cachePeriod)).setCacheControl(cacheControl));
   }
}

WebJars下的静态资源

​ webJars是将客户端(浏览器)资源(JavaScript,Css等)打成jar包文件,借助Maven工具对其管理

​ 官网:https://www.webjars.org/

引入jqueryjar

<dependency>
    <groupId>org.webjars</groupId>
    <artifactId>jquery</artifactId>
    <version>3.5.1</version>
</dependency>

image-20201009141347256

默认的静态资源存放路径

​ webJars是已经打包好的静态资源文件,如果是自己开发的,则应该放在默认的路径下

image-20201009142419330

image-20201009143852610

其读取优先级为resources>static>public

首页

​ 首页也可以放在静态资源目录下,templates目录下也可放置,但需要通过controller层跳转才能访问,需要模板引擎的支持。

image-20201009145349803

Thymeleaf 模板引擎

Thymeleaf简介

​ Thymeleaf是一个流行的模板引擎,该模板引擎采用Java语言开发,能够处理HTML、XML、JavaScript、CSS甚至纯文本,模板引擎是一个技术名词,是跨领域跨平台的概念,在Java语言体系下有模板引擎,在C#、PHP语言体系下也有模板引擎。除了thymeleaf之外还有Velocity、jsp、FreeMarker等模板引擎,与其它模板引擎(比如FreeMaker)相比,Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用(更加方便前后端分离,比如方便类似VUE前端设计页面),功能类似。

image-20201009160618857

官网:https://www.thymeleaf.org/

SpringBoot 配置Thymeleaf

导入依赖(必须是3.XX的版本)

<!--Thymeleaf-->
<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf-spring5</artifactId>
</dependency>
<dependency>
    <groupId>org.thymeleaf.extras</groupId>
    <artifactId>thymeleaf-extras-java8time</artifactId>
    <version></version>
</dependency>

开发的页面放在此路径下,文件后缀名以html结尾

image-20201009155226422 image-20201009155523510

Controller跳转

@RestController
@RequestMapping("/test")
public class TestController {

    @RequestMapping("/test")
    public String hello(){
        return "test";
    }
}

image-20201009155940237

使用Thymeleaf开发只需要导入对应依赖,然后在templates目录下开发页面即可。

Thymeleaf语法

官方说明在线文档:https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html#creating-and-configuring-the-template-engine

使用Thymeleaf的东西需要在页面引入

<html xmlns:th="http://www.thymeleaf.org">
@Controller
@RequestMapping("/test")
public class TestController {

    @RequestMapping("/test")
    public String hello(Model model){
        model.addAttribute("msg","Thymeleaf ");
        return "test";
    }
}

image-20201009162748610

image-20201009162831067

使用Thymeleaf可以替换任何html元素,格式为th:元素名

Thymeleaf更多语法可查看相关文档

扩展SprongMVC配置

​ springboot对各个功能模块进行了封装,而各个功能模块有默认内置了许多功能组件,例如对于mvc模块来说,其内置了拦截器和视图解析器等各种组件,如果想开发自定义视图解析器,springboot也提供了支持。

定义一个自己的视图解析器,其步骤如下:

  1. ​ 自定义一个配置类,实现WebMvcConfigurer接口
  2. ​ 自定义一个视图解析器MyViewResolver
  3. ​ 将自定义视图解析器注册为bean,springboot就会监测到
@Configuration
public class MyConfig implements WebMvcConfigurer {


    //将自定义的视图解析器注册为bean,springboot将会监测到
    @Bean
     public MyViewResolver myViewResolver(){
         return  new MyViewResolver();
     }

    //自定义一个视图解析器
    public static  class MyViewResolver implements ViewResolver{

        @Override
        public View resolveViewName(String s, Locale locale) throws Exception {
            return null;
        }
    }
}

通过断点可以看到自定义的视图解析器被加载

image-20201009172213294

总结

​ 如果想自定义组件,只需要将自定义组件注册为bean,就可以交给springboot接管了。

Thymeleaf国际化

​ 对于一般的html文件,如果要转化为Thymeleaf页面,则需要修改为Thymeleaf的标准(主要是页面引用的静态资源),例如:

image-20201010004455195

页面国际化

​ 定义i18n文件

image-20201010004721554

如果要实现中英文切换,需要自定义LocaleResolver,并将其注册为bean

image-20201010004850840

public class MyLocaleResolver implements LocaleResolver {

    //解析请求
    @Override
    public Locale resolveLocale(HttpServletRequest httpServletRequest) {
        //获取请求参数
        String language = httpServletRequest.getParameter("l");
        System.out.println(language);
        //获取默认值
        Locale locale = Locale.getDefault();

        //请求携带国际化参数
        if(!StringUtils.isEmpty(language)){
            //zh,CN
            String[] str = language.split("_");
            locale = new Locale(str[0],str[1]);
        }
        return locale;
    }

    @Override
    public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {

    }
}
@Configuration
public class MyConfig implements WebMvcConfigurer {

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
        registry.addViewController("/index.html").setViewName("index");
    }

    @Bean
    public LocaleResolver localeResolver(){
        return  new MyLocaleResolver(
        );
    }

}

点击中英文链接即可切换

image-20201010005026258

注意点:

​ 链接里面用@{},国际化用#{}

开发中注意点

​ springboot默认时间格式是yyyy/mm/dd,如果想使用yyyy-mm-dd格式,需要显示配置spring.mvc.format.date=yyyy-MM-dd

​ Thymeleaf前端传值时,如果name属性也是一个对象,那么需要用form封装,否则只能传其子属性

image-20201010172424214

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值