自动装配
xxxxAutoConfiguration…向容器中自动装配组件
xxxxProperties:自动装配类,装配配置文件中自定义的一些内容
我们根据源头打开spring.factories的配置文件 , 看到了很多自动配置的文件;这就是自动配置根源所在!
要解决的问题:
- 导入静态资源
- 首页
- jsp,模板引擎Thymeleaf
- 装配扩展SpringMVC
- 增删改查
- 拦截器
- 国际化
静态资源
优先级从上到下
“classpath:/META-INF/resources/”,
“classpath:/resources/”,
“classpath:/static/”,
“classpath:/public/”,
“/” :当前项目的根目录
在templates目录下的所有页面,只能通过controller来跳转
thymeleaf模板引擎
th:可以绑定html的属性(使用表达式)
1.变量表达式${}
2.选择或星号表达式*{}
3.文字国际化表达式#{}
4.URL表达式@{}
server.port=8088
#关闭thymeleaf模板引擎的缓存
spring.thymeleaf.cache=false
#配置访问路径
server.servlet.context-path=/hzy
配置扩展MVC视图解析器(需要Thymeleaf模板)
@Configuration
public class MyMvcConfig implements WebMvcConfigurer {
@Override
public void addViewControllers(ViewControllerRegistry registry) {
registry.addViewController("/").setViewName("index");//访问首页
registry.addViewController("/index").setViewName("index");
}
}
项目的基本目录结构—templates存放页面(模板引擎),static存放js/css/img等静态资源
国际化
i18s
#配置国际化文件的真实位置
spring.messages.basename=i18n.login
使用#{}
自定义国际化解析器
<a class="btn btn-sm" th:href="@{/index(l='zh_CN')}">中文</a>
<a class="btn btn-sm" th:href="@{/index(l='en_US')}">English</a>
package com.hzy.config;
import org.springframework.web.servlet.LocaleResolver;
import org.thymeleaf.util.StringUtils;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
//国际化解析
public class MyLocaleResolver implements LocaleResolver {
// 解析请求
@Override
public Locale resolveLocale(HttpServletRequest httpServletRequest) {
String language=httpServletRequest.getParameter("l");
Locale locale=Locale.getDefault();//如果没有就使用默认的
// 如果请求的链接携带了国际化的参数
if(!StringUtils.isEmpty(language)){
String[] split=language.split("_");
locale=new Locale(split[0],split[1]);
}
return locale;
}
@Override
public void setLocale(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Locale locale) {
}
}
@Bean
public LocaleResolver localeResolver(){
return new MyLocaleResolver();
}
拦截器
配置没有登录时不能通过路由访问其他页面,如果访问其他页面跳转到index登录页面
配置拦截器
package com.hzy.config;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
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("message","没有权限,请先登录");
request.getRequestDispatcher("/index").forward(request,response);
return false;
}else{
return true;
}
}
}
在扩展MVC中使用拦截器
.addPathPatterns("/")表示访问哪些页面拦截
.excludePathPatterns("/","/index","/user/login","/css/","/js/","/img/")表达访问哪些页面不拦截
使用拦截器
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new LoginHandlerInterceptor()).addPathPatterns("/**")
.excludePathPatterns("/","/index","/user/login","/css/**","/js/**","/img/**");
}