当前位置: 首页 > news >正文

Spring Boot管理Spring MVC

Spring Boot真正的核心功能是自动配置和快速整合,通常Spring Boot应用的前端MVC框架依然使用Spring MVC。Spring Boot提供的spring-boot-starter-web启动器嵌入了Spring MVC的依赖,并为Spring MVC提供了大量自动配置,可以适用于大多数Web开发场景。 除了使用自动配置所提供的功能,开发者也可以通过自定义配置类定制Spring MVC的配置。

Spring Boot为Spring MVC自动配置提供的特性

在Spring Boot项目中,一旦引入了Web依赖启动器spring-boot-starter-web,那么Spring Boot整合Spring MVC框架默认实现的一些XxxAutoConfiguration自动配置类就会自动生效,几乎可以在无任何额外配置的情况下进行Web开发。

Spring Boot为Spring MVC提供了自动配置,并在Spring MVC默认功能的基础上添加了以下特性。

(1)引入了视图解析器 ContentNegotiatingViewResolver和BeanNameViewResolver。

(2)为包括WebJars在内的静态资源提供支持。

(3)自动注册 Converter、GenericConverter和Formatter。

(4)支持使用HttpMessageConverters消息转换器。

(5)自动注册 MessageCodesResolver。

(6)支持静态项目首页index.html。

(7)支持定制应用图标favicon.ico。

(8)自动初始化Web数据绑定器ConfigurableWebBindingInitializer。

自定义Spring MVC配置

在Spring Boot应用中使用Spring MVC时,如果希望在为Spring MVC自动配置提供相关特性的同时,再增加一些自定义的Spring MVC配置,例如添加拦截器、视图控制器等,可以通过自定义WebMvcConfigurer类型的配置类来实现。

1.配置静态资源映射

通常Web应用中会需要使用静态资源,例如,JavaScript文件、CSS文件和HTML文件等。单独使用Spring MVC时,导入静态资源文件后,需要配置静态资源的映射,否则无法正常访问。Spring Boot中提供了默认的静态资源映射,当访问项目中任意的静态资源时,Spring Boot会默认从以下路径中从上往下进行查找:

(1)classpath:/META-INF/resources/

(2)classpath:/resources/

(3)classpath:/static/

(4)classpath:/public/

这个查找顺序可以通过源码查看:WebMvcAutoConfiguration--》搜索getStaticLocations--》进入该方法--》寻着轨迹就能找到。

修改静态资源存放位置:

spring.resources.static-locations=字符串数组

例如:

在chapter03项目中的 src/main/resources/static和 src/main/resources目录下分别创建main.html文件和index.html文件,并在项目启动后分别在浏览器中对这两个静态资源进行访问。

如果想访问非默认静态资源文件夹下的资源,可以通过配置类和配置文件2种方式实现自定义静态资源的映射。

(1)通过配置类实现静态资源映射

配置类需要实现WebMvcConfigurer接口,在重写该接口的addResourceHandlers()方法中指定资源访问路径和资源之间的映射关系。

(2)通过配置文件实现静态资源映射

Spring Boot在Spring MVC的自动配置中提供了对应的属性可以配置静态资源访问路径和资源的映射。

下面以通过配置类实现静态资源映射为例,演示配置静态资源映射。

(1)创建静态资源。

在src/main/resources目录下,创建文件夹backend,并在文件夹中创建HTML文件index.html和login.htm。

(2)配置静态资源映射。

在config子包下创建配置类WebMvcConfig,该配置类实现WebMvcConfigurer接口,并重写该接口的方法实现自定义Spring MVC的配置,具体如文件3-11所示。

import  org.springframework.context.annotation.Configuration;
import  org.springframework.web.servlet.config.annotation.
ResourceHandlerRegistry;
import  org.springframework.web.servlet.config.annotation.
WebMvcConfigurer;
@Configuration
public  class  WebMvcConfig implements  WebMvcConfigurer {@Overridepublic  void  addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/backend/**").addResourceLocations("classpath:/backend/");}}

 (3)测试程序效果。启动项目,在浏览器中访问backend文件夹下的index.html。

2.配置视图控制器

使用Spring MVC默认的配置进行开发时,如果仅实现无业务逻辑的页面跳转,也需要创建Controller类,然后定义方法跳转到页面,操作比较麻烦。对此,可以在视图控制器中添加自定义的映射,直接将请求映射为视图。

下面通过案例演示在视图控制器中配置请求和视图的映射,具体如下。

(1)配置视图控制器映射信息。在文件3-11中重写WebMvcConfigurer接口的addViewControllers()方法,在该方法中添加访问路径和视图的映射。

@Override
public void addViewControllers(ViewControllerRegistry registry) {/*如果在thymeleaf中会出错,因为配置了前缀和后缀,*视图名"/backend/login.html"加上前缀后缀后,这个地址肯定不存在,*直接写逻辑视图名即可*/	    //registry.addViewController("/backend/toLoginPage").setViewName("/backend/login.html");//registry.addViewController("/backend").setViewName("/backend/index.html");//在thymeleaf环境下访问模板页面registry.addViewController("/backend/toLoginPage2").setViewName("login");registry.addViewController("/backend").setViewName("index");
}

(2)测试程序效果。启动项目,在浏览器中访问http://localhost:8080/backend/toLoginPage2。

总结:只适合较为简单的无参数get请求跳转,对于有参数或者需要业务处理的跳转需求,最好采用传统方式。

3.配置拦截器

拦截器可以根据请求的URL对请求进行拦截,主要应用于登录校验、权限验证、乱码解决、性能监控和异常处理等方面。在Spring Boot项目中配置拦截器也非常简单,只需要定义拦截器和注册拦截器即可。 

拦截过程

下面通过案例演示在Spring Boot项目中配置拦截器。

(1)定义拦截器。创建interceptor子包,在该包下创建拦截器类,该类实现了 HandlerInterceptor接口,并重写了接口的preHandle()方法,具体如文件3-12所示。

@Component
public class LoginInterceptor implements HandlerInterceptor {@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {// 获取请求路径String requestURI = request.getRequestURI();// 获取登录用户Object loginUser = request.getSession().getAttribute("loginUser");// 如果请求路径是"/backend"开头的,并且用户没有登录,//那么将请求重定向到登录页面或者内部转发if (requestURI.startsWith("/backend") && loginUser == null) {response.sendRedirect("/toLoginPage");//request.getRequestDispatcher("/toLoginPage").forward(request,response);return false;}return true;}}

(2)注册拦截器。

在文件3-11中重写WebMvcConfigurer接口的addInterceptors()方法,在该方法中添加拦截器。

    @Autowiredprivate LoginInterceptor loginInterceptor;@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(loginInterceptor).addPathPatterns("/**").excludePathPatterns("/toLoginPage");}

(3)效果测试

重启项目,启动成功后,在浏览器上访问http://localhost:8080/backend

动手试一试

不拦截静态资源,比如图片,css 。

相关文章:

  • 【CRF系列】第7篇:CRF实战——经典工具与Python库应用
  • SPA 收入支出/技师提成自动统计系统——仙盟共创平台——未来之窗
  • 21源码剖析——初始化——加载核心配置文件
  • 基于YOLOv9的课堂行为检测系统
  • ubuntu开机自启动
  • Godot学习-创建简单动画
  • 开始学习USB——第一步
  • 在Windows中某个盘中创造虚拟环境
  • 跨站脚本(XSS) 的详细分类、对比及解决方案
  • 购买电脑时,主要需要关注以下核心配置,它们直接影响性能、使用体验和价格。根据需求(办公、游戏、设计、编程等),侧重点会有所不同。看看Deepseek的建议
  • MyBatis-Plus 通过 ID 更新数据为NULL总结
  • AIStarter新版本发布:模型与插件高效管理工具,助力AI开发内容
  • 数据结构与算法——栈和队列
  • 如何高效的处理海量数据?
  • mapbox基础,加载视频到地图
  • 贪心算法day11(用最少数量的箭引爆气球)
  • python脚本补充
  • 十二,<FastApi>中间件
  • GCC 使用说明:常用参数详解与最佳实践
  • 66.加1
  • wordpress 站长统计/软文广告500字
  • 网站响应速度验收/阿里云官网首页
  • 吉林中岩峰建设有限公司网站/网站运营主要做什么工作
  • 动态web网站怎么做/新闻稿代写
  • angularjs 网站开发/百度推广关键词怎么设置好
  • wordpress主题cms博客/安卓优化大师下载安装到手机