欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

SpringBoot Web开发笔记(1)

程序员文章站 2022-06-12 19:18:43
...

SpringBoot Web开发笔记(1)

关于自动装配

springboot到底帮助我们配置了什么?我们能不能进行修改?能修改哪些东西?能不能扩展?

  • xxxxAutoConfiguration…向容器中自动配置组件

  • xxxxProperties:自动配置类,装配配置文件中自定义的一些内容

要解决的问题:

  • 导入静态资源…
  • 首页
  • jsp,模板引擎thymeleaf
  • 装配扩展springmvc
  • 增删改查
  • 拦截器
  • 国际化!

导入静态资源

                                                                                    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();
                                                                                        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?

SpringBoot Web开发笔记(1)

总结:

  1. 在springboot,我们可以使用下面的方式处理静态资源

    • webjars -------> localhost:8080/webjars/

    • public,static,/**,resourse ------> localhost:8080/

  2. 优先级:resources>static(默认)>public

首页如何定制

  1. 首页图标设置

    • 实现原理
      SpringBoot Web开发笔记(1)

    • 实现方法

      1. ​ 第一步添加favicon.ico(首页图标)
        SpringBoot Web开发笔记(1)

      2. ​ 第二步

SpringBoot Web开发笔记(1)

  1. 首页配置:注意点,所有页面的静态资源都需要thymeleaf接管;@{}

  2. 页面国际化

模板引擎Thymeleaf

结论:只需要使用thymeleaf,只需要导入对应的依赖就可以了!我们将html放在我们的templates目录下即可!

	public static final String DEFAULT_PREFIX = "classpath:/templates/";

	public static final String DEFAULT_SUFFIX = ".html";
  • 语法

SpringBoot Web开发笔记(1)

  • 属性优先级
    SpringBoot Web开发笔记(1)

装配扩展springmvc

package com.wzz.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.View;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.io.PrintWriter;
import java.util.Locale;

// 如果你想diy一些定制化的功能,只要写这个组件,然后将它交给springboot,springboot就会帮我们自动装配。
// 扩展springmvc    dispathservlet


// 如果我们要扩展springmvc,官方建议我们这样去做!
@Configuration
//@EnableWebMvc   // 会导致自己配置的springmvc失效,导入一个类:DelegatingWebMvcConfiguration:从容器中获取所有的webmvcconfig;
public class MyMvcConfig implements WebMvcConfigurer {

    //视图跳转
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
//        System.out.println("start");
        registry.addViewController("/wzz").setViewName("test");
//        System.out.println("end");
    }


    // ViewResolver 实现了视图解析器接口的类,我们就可以把它看做视图解析器
/**
    @Bean
    public ViewResolver myViewResolver(){
        return new MyViewResolver();
    }



    //自定义一个自己的视图解析器MyViewResolver
    public static class MyViewResolver implements ViewResolver{
        @Override
        public View resolveViewName(String viewName, Locale locale) throws Exception {
            return null;
        }
    }
**/
}


总结:

在springboot中,有非常多的xxx Configuration帮助我们进行扩展配置,只要看见了这个东西,我们就要注意了!

页面国际化

1.首页配置:

  • 注意点:所有页面的静态资源都需要使用thymeleaf接管;
  • url: @{}

2.页面国际化:

  • 我们需要配置i18n文件
  • 我们如果需要在项目中按钮自动切换,我们需要自定义一个组件LocaleResolver
  • 记得将自己的组件配置到spring容器**@Bean**
  • #{}

登录+拦截器

为首页配置拦截器

书写LoginHandlerInterceptor自定义拦截器,并实现 HandlerInterceptor,重写preHandle方法(登录主页之前)

public class LoginHandlerInterceptor implements HandlerInterceptor{
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //登录成功之后,应该有用户的session
        Object loginUser = request.getSession().getAttribute("loginUser");

        if (loginUser == null){
            request.setAttribute("msg","没有权限,请先登录");
            request.getRequestDispatcher("/index.html").forward(request,response);
            return false;
        }else {
            return true;
        }

    }
}

将自定义的LoginHandlerInterceptor拦截器写入到MyMvcConfig中,重写WebMvcConfigurer中的的addInterceptors方法

 @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginHandlerInterceptor()).
          addPathPatterns("/**").
          excludePathPatterns("/index.html","/","/user/login","/css/*","/js/*","/img/*");
    }
相关标签: spring boot