SpringBoot-页面控制

版权声明:来一来,看一看,有钱的捧个人场,没钱的你不得捧个人场 https://blog.csdn.net/wait_for_eva/article/details/82929468

国际化

  1. 文件配置
spring.messages.basename=i18m.test
  • classpath:默认指定文件路径为classpath
  • i18n:指定文件夹
  • test:国际化配置文件组
  1. 文件名称
    在这里插入图片描述
  • 配置名:test即为配置名
  • 国标名:语言+国家,例如en_US
  • 后缀名:同一properties

同名配置文件,允许有省略国标的默认配置文件,这将作为默认配置采用。

当检测到需要转化时自动采用配置的特化配置。

因此,默认配置必须存在,特化配置可以不必。

当找不到该采取的特化文件时,同一采用默认配置

  1. 文件内容
# test.properties
test.language=中文

# test_en_US.properties
test.language=English

# test_zh_CN.properties
test.language=中文
  • properties配置为keyvalue,同名配置文件中的key需要同一
  • 特化文件可以不配某些key,会自动采取默认配置中的值
  • 配置key应该全部能够在默认配置中找到,一般不要再特化文件中有独有配置
  • 配置名最好按照配置名+属性的方式进行配置,充当命名空间,调用方便且易于管理
  1. 内容引用
  • #{}取国际化属性
<h1 th:text="#{test.language}"></h1>
<!-- 规范配置名(配置名+属性)后,在调用时,能够一眼知道含义,且多配置中同名属性也能够很好区分-->
  1. 手动触发
  • 默认情况下,通过请求头中信息触发国际化显示切换*(浏览器设置语言属性)*
  • 也可以手动编码触发国际化切换
public class Resolver implements LocaleResolver {

    @Override
    public Locale resolveLocale(HttpServletRequest request) {
        Locale locale = Locale.getDefault();
        String localeString = request.getParameter("locale");
        if(!StringUtils.isEmpty(localeString)){
            String[] localeData = localeString.split("_");
            // 传入两个参数 语言 + 国家  zh_CN => zh CN
            locale = new Locale(localeData[0], localeData[1]);
        }
        return locale;
    }

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

    }
}
@Configuration
public class Config {
    @Bean
    LocaleResolver localeResolver(){
        // 注册自动生效
        return new Resolver();
    }
}

通过链接传参就可以实现国际化页面切换,不带参数默认采用操作系统语言。

当然,数据不一定来自于请求,这个就自我发挥了。.

页面路由

  1. 入口
  • 静态资源

配置了静态资源,可以直接对静态页面直接进行访问

  • @Controller+@RequestMapping
@Controller
public class MyController {
    @RequestMapping("/hello")
    public String hello(Map<String, Object> map){
        map.put("name","godme");
        return "hello";
    }
}

通过@Controller+@RequestMapping进行接口访问进行映射是很常用的方式。

但是其中经常包含了一些操作。

  • 统一映射

如果外部访问非静态文件的,但是又不需要进行操作的话。每次都要@RequestMapping添加映射就很麻烦。

而且在业务处理中混杂这种只比注释高级一丁点的东西,实在让人分心。

@Configuration
public class Config {
    @Bean
    WebMvcConfigurerAdapter webMvcConfigurerAdapter(){
        return new WebMvcConfigurerAdapter(){
            @Override
            public void addViewControllers(ViewControllerRegistry registry) {
                registry.addViewController("/index.html").setViewName("test");
            }
        };
    }
}
  • WebMvcConfigurerAdapter:mvc配置适配器,包含何种控制器的添加方法
  • addViewControllers:添加视图控制器
  • addViewController:设置浏览器地址栏访问地址,相当于RequestMapping
  • setViewName:设置映射路径,相当于return

返回的值依旧交给thymeleaf进行管理,会自动添加上前后缀。

记得放置在templates文件夹下,或者配置spring.thmeleaf.prefix.

  1. 重定向
@Controller
public class MyController {
    @RequestMapping("/index")
    public String index(){
        return "redirect:test";
    }
}
  • redirect::直接return前修饰,表示请求重定向
  1. 转发
request.getDispatcher("/index.html").forward(reqeust, resposne);

// return "forward:test"

访问: 浏览器直接访问(接口或静态页面)

跳转:逻辑处理后,返回新页面,由后台进行跳转操作

转发:把request请求交由新接口或页面进行处理,但是返回仍旧由该接口进行返回,地址栏地址不变

重定向:相当于提供新地址,让浏览器直接发起请求,地址栏发生变化

  1. 拦截器

逻辑

public class LoginInterceptor implements HandlerInterceptor{
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        if(!StringUtils.isEmpty(request.getParammeters("godme"))){
            return true;
        }
        return false;
    }
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, java.lang.Exception ex) throws Exception {

    }
}

HandlerInterceptor:拦截处理器

preHandle:中间可添加判断操作,决定是否进行拦截。true表示放行,false则会进行拦截

postHandle:preHandler返回true时启用,当preHandler执行完毕后执行

afterCompletion:preHandler返回true后启用,最后一步执行

注册

@Configuration
public class Config {
    @Bean
    WebMvcConfigurerAdapter webMvcConfigurerAdapter(){
        return new WebMvcConfigurerAdapter(){
            @Override
            public void addInterceptors(InterceptorRegistry registry) {
                registry.addInterceptor(new LoginInterceptor());
            }
        };
    }
}
  • WebMvcConfigurerAdapter:配置适配器,包含各种mvc配置方法
  • addInterceptors:添加拦截器

监听

 @Override
 public void addInterceptors(InterceptorRegistry registry) {
                registry.addInterceptor(new LoginInterceptor())//
                    .addPathPatterns("/**", "/")//
                    .excludePathPatterns("/index.html", "/");//
            }

addPathPatterns:添加监听路径,字符串变参可传入多个,表示浏览器访问路径

excludePathPatterns:从监听中移除指定路径,变参,可传入多个

/** 表示监听全部路径

补充

  1. 标签判断
<span th:text="${msg}" th:if="not #string.isEmpty(msg)"></span>

not:内置对象

string.isEmpty:内置方法,**#{}**进行调用

th:if:条件判断,优先级在th:text之前,条件不成立则不生成此标签

  1. 缓存刷新
  • 缓存设置
spring.thymeleaf.cache=false
# 不用缓存
  • 重编译

Ctrl+F9,重编译项目。

如果每次进行稍微的修改就必须重启项目,简直太消耗时间了。

通过这种办法,可以在不重启的情况下把新修改直接运行起来而不需要重启。

猜你喜欢

转载自blog.csdn.net/wait_for_eva/article/details/82929468