1.Spring Boot 整合Spring Mvc进行Web开发时提供了很多的自动化配置,但在实际开发中还需要开发者对一些功能进行拓展实现
2.功能拓展实现
(1)注册视图管理器
接下来使用SpringBoot整合Spring Mvc进行Web开发,实现简单的页面跳转功能,这里将使用SpringBoot提供的WebMvcConfigurer接口编写自定义配置,并对MVC框架功能进行拓展
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
/**
* 实现 WebMvcConfigurer接口,扩展MVC 功能
*/
@Configuration
public class TestMvcConfig implements WebMvcConfigurer {
//添加视图管理
@Override
public void addviewControllers(ViewControllerRegistry registry){
//请求GoPage1映射路径或者page1页面都会自动映射到page1页面
registry.addViewController("/GoPage1").setViewName("page1");
registry.addViewController("/page1.html").setViewName("page1");
}
TestMvcConfig 实现了接口 WebMvcConfig gurer的addViewControllers(View ControllerRegistryregistry)方法。
在addViewControllers()方法内部,使用ViewControllerRegistry的addViewController()方法分别定义了"/GoPage1"和"/page1.html"的请求控制,
并使用 setViewName("page1")方法将路径映射为 login.html 页面。
(2)注册自定义拦截器
WebMvcConfigurer接口提供了许多MVC开发相关方法,例如,添加拦截器方法,addInterceptors()、添加格式化器方法addFormatters()等
接下来创建一个自定义拦截器
@Component
public class TestInterceptor implements HandlerInterceptor
@Override
public boolean preHandle(HttpServletRequest request,HttpServletResponse response
Object handler) throws Exception {
//用户请求/admin开头路径时,判断用户是否登录
String uri =request.getRequesturI();
Object loginUser =request.getsession().getAttribute("loginUser"
if (uri.startsWith("/admin") && null == loginUser) {
response.sendRedirect("/toLoginPage");
return false;
}
return true;
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response,
Object handler, @Nullable ModelAndView modelAndView)throws Exception {
//向request域中存放当前年份用于页面动态展示
request.setAttribute("currentYear",Calendar.getInstance().get(Calendar.YEAR));
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse
response, Object handler, @Nullable Exception ex) throws Exception {
}
}
(3)然后再自定义配置类TestMvcConfig中,重写addInterceptors()重写addInterceptors()方法注册自定义的拦截器
示例代码如下:
@Autowired
private TestInterceptor testInterceptor;//添加拦截器管理
@Override
public void addinterceptors(InterceptorRegistry registry){
registry.addInterceptor(testInterceptor)
.addPathPatterns("/**")
.excludePathPatterns("/page1.html");
}
上述代码中,先使用@Autowired 注解引入自定义的 MyInterceptor拦截器组件,
然后重写其中的addInterceptors()方法注册自定义的拦截器。在注册自定义拦截器时,使用
addPathPatterns("/**")方法拦截所有路径请求, excludePathPatterns("/page1.html")方法对
“/page1.html”路径的请求进行了放行处理。