Day18 SpringBoot 5 Lombok thymeleaf国际化 locale springboot拦截器 springboot错误页面 session
uwupu 啦啦啦啦啦

Lombok

Lombok通过注解可以直接实现getter、setter、equals、toString等方法,不需要手动写这些方法。

注解名 介绍
@Data 整合了Getter、Setter、ToString、EqualsAndHashCode、RequiredArgsConstructor注解
@Getter getter方法
@Setter setter方法
@ToString toString方法
@EqualsAndHashCode equals和hashCode方法
@NonNull 不为Null
@AllArgsConstructor 所有有参构造方法
@NoArgsConstructor 无参构造方法

thymeleaf国际化

thymeleaf国际化可以提供页面多语言功能。配置之后可以依据Header中的语言来返回相应的语言的页面。

  1. 创建一个多语言配置文件夹,这里使用classpath:/i18n/。

    image

    文件名使用语言简写作为后缀。如:简体中文zh_CN,米国英语en_US。

  2. 在文件夹下创建配置文件用于表示各种语言在页面上应该显示的内容;

    image

  3. 在html文件中添加相应的属性,使用“th:text”和表达式”#{login.tip}”。(注:表达式使用”#”作为开头)

    1
    2
    <label class="sr-only" th:text="#{login.username}">Username</label>
    <label class="sr-only" th:text="#{login.password}">Password</label>

通过url参数修改语言/配置自定义LocaleResolver

  1. 创建一个类,实现LocaleResolver接口。根据url参数返回相应的Locale对象。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    public class MyLocaleResover implements LocaleResolver {
    //解析请求
    @Override
    public Locale resolveLocale(HttpServletRequest request) {
    String lang = request.getParameter("l");//获取链接中的参数l
    Locale localeDefault = Locale.getDefault();//如果没有就使用默认的
    //如果请求的链接携带了国际化的参数
    if (!StringUtils.isEmpty(lang)){
    //zh_CN
    String[] lang2 = lang.split("_");//将语言和国家分开
    //语言 国家
    Locale locale = new Locale(lang2[0], lang2[1]);
    return locale;//使用url中参数指定
    }
    return localeDefault;
    }

    @Override
    public void setLocale(HttpServletRequest request, HttpServletResponse response, Locale locale) {

    }
    }
  2. 在SpringMvc配置中添加自定义的LocaleResolver;

    1
    2
    3
    4
    5
    6
    7
    8
    @Configuration
    public class MyMvcConfig implements WebMvcConfigurer {
    //自定义的localeResolver
    @Bean
    public LocaleResolver localeResolver(){
    return new MyLocaleResover();
    }
    }
  3. 在thymeleaf语法配置结束后,使用url参数即可控制页面的语言;

    image image

Locale 原理

首先判断是否有本地配置,有则使用本地配置,没有则使用默认配置。

1
2
3
4
5
6
7
8
9
@ConditionalOnMissingBean(name = DispatcherServlet.LOCALE_RESOLVER_BEAN_NAME)
public LocaleResolver localeResolver() {
if (this.webProperties.getLocaleResolver() == WebProperties.LocaleResolver.FIXED) {
return new FixedLocaleResolver(this.webProperties.getLocale());
}//判断本地配置是否存在,若存在则使用,不存在则执行下面
AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver();
localeResolver.setDefaultLocale(this.webProperties.getLocale());//使用默认的LocalteResolvery
return localeResolver;
}

hole…

SpringBoot的拦截器

  1. 定义一个自定义拦截器;

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    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("/").forward(request,response);
    return false;
    }else {
    return true;
    }

    }
    }
  2. 在MvcConfig类下实现addInterceptors方法并注册相应的拦截器;

    1
    2
    3
    4
    5
    6
    7
    @Configuration
    public class MyMvcConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
    registry.addInterceptor(new LoginHandlerInterceptor());
    }
    }

SpringBoot的错误页面 404等

错误代码指定页面

对于错误404,在templates下创建error/404.html即可。

image

其他同理。

Servlet的Session

Java Servlet提供为每个session存储Map<String,Object>的功能;

每次有浏览器访问网站,JavaServlet会为浏览器生成一个JSESSIONID。

底层会存储JSESSIONID与Map的对应关系。

对于开发者,使用对象HttpSession可以直接为当前交互的用户存储Map数据。

注:Map存储在服务器,JSESSIONID存储在浏览器。

方法:

HttpSession 介绍
setAttribute(key,value) 为当前session的Map设置一个键值对。如:setAttribute(“username”,”qweasd”),会为session对应的Map中设置key为username值为qweasd的键值对。
invalidate() 使当前session无效化,并为浏览器删除cookies JSESSIONID。
….

其他

i18n

  • n. 国际化

  • internationalization单词的缩写。

  • i和n中间有18个字母。

zh_CN

格式:语言_国家

zh取自拼音zhongguo前两个字母。

CRUD

增删改查

 评论