千家信息网

Spring Boot实践——SpringMVC视图解析

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,一、注解说明在spring-boot+spring mvc 的项目中,有些时候我们需要自己配置一些项目的设置,就会涉及到这三个,那么,他们之间有什么关系呢?首先,@EnableWebMvc=WebMv
千家信息网最后更新 2026年10月31日Spring Boot实践——SpringMVC视图解析

一、注解说明

  在spring-boot+spring mvc 的项目中,有些时候我们需要自己配置一些项目的设置,就会涉及到这三个,那么,他们之间有什么关系呢?
首先,@EnableWebMvc=WebMvcConfigurationSupport,使用了@EnableWebMvc注解等于扩展了WebMvcConfigurationSupport但是没有重写任何方法。

所以有以下几种使用方式:

  1. @EnableWebMvc+extends WebMvcConfigurationAdapter,在扩展的类中重写父类的方法即可,这种方式会屏蔽springboot的@EnableAutoConfiguration中的设置
  2. extends WebMvcConfigurationSupport,在扩展的类中重写父类的方法即可,这种方式会屏蔽springboot的@EnableAutoConfiguration中的设置
  3. extends WebMvcConfigurationAdapter,在扩展的类中重写父类的方法即可,这种方式依旧使用springboot的@EnableAutoConfiguration中的设置

具体哪种方法适合,看个人对于项目的需求和要把控的程度

在WebMvcConfigurationSupport(@EnableWebMvc)和@EnableAutoConfiguration这两种方式都有一些默认的设定
而WebMvcConfigurationAdapter则是一个abstract class

具体如何类内如何进行个性化的设置,可以参考以下文章:

Spring Boot:定制HTTP消息转换器
EnableWebMvc官方文档

  • 使用 @EnableWebMvc 注解,需要以编程的方式指定视图文件相关配置
/** * Web MVC 配置适配器 * @ClassName: WebAppConfigurer  * @Description:  * @author OnlyMate * @Date 2018年8月28日 下午2:39:31   *  * WebAppConfigurer extends WebMvcConfigurerAdapter 在Spring Boot2.0版本已过时了,用官网说的新的类替换 * */@Configurationpublic class WebAppConfigurer implements WebMvcConfigurer {    /**     * springmvc视图解析     * @Title: viewResolver      * @Description: TODO     * @Date 2018年8月28日 下午4:46:07      * @author OnlyMate     * @return     */    @Bean    public InternalResourceViewResolver viewResolver(){        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();        viewResolver.setPrefix("/WEB-INF/views/");        viewResolver.setSuffix(".jsp");        // viewResolver.setViewClass(JstlView.class); // 这个属性通常并不需要手动配置,高版本的Spring会自动检测        return viewResolver;    }    /**     * SpringBoot设置首页     */    @Override    public void addViewControllers(ViewControllerRegistry registry) {        WebMvcConfigurer.super.addViewControllers(registry);        registry.addViewController("/").setViewName("index");        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);    }}
  • 使用 @EnableAutoConfiguration 注解,会读取 application.properties 或 application.yml 文件中的配置

视图

## 视图spring.mvc.view.prefix=/WEB-INF/views/spring.mvc.view.suffix=.jsp

或

spring:    http:        encoding:            charset: UTF-8            enabled: true            force: true    messages:        encoding: UTF-8    profiles:        active: dev    mvc:        view:            prefix: /WEB-INF/views/            suffix: .jsp

二、模版引擎

  Spring boot 在springmvc的视图解析器方面就默认集成了ContentNegotiatingViewResolver和BeanNameViewResolver,在视图引擎上就已经集成自动配置的模版引擎,如下:

  1. FreeMarker
  2. Groovy
  3. Thymeleaf
  4. Velocity (deprecated in 1.4)
  5. Mustache

JSP技术spring boot 官方是不推荐的,原因有三:

  1. 在tomcat上,jsp不能在嵌套的tomcat容器解析即不能在打包成可执行的jar的情况下解析
  2. Jetty 嵌套的容器不支持jsp
  3. Undertow

而其他的模版引擎spring boot 都支持,并默认会到classpath的templates里面查找模版引擎,这里假如我们使用freemarker模版引擎

  1. 现在pom.xml启动freemarker模版引擎视图
    org.springframework.boot    spring-boot-starter-freemarker
  1. 定义一个模版后缀是ftp,注意是在classpath的templates目录下

  2. 在controller上返回视图路径
@Controllerpublic class HelloWorldController {    private Logger logger = LoggerFactory.getLogger(HelloWorldController.class);    @Value("${question}")    private String question;    @Value("${answer}")    private String answer;    @Value("${content}")    private String content;    @ResponseBody    @RequestMapping("/hello")    public String index() {        return "hello world";    }    @ResponseBody    @RequestMapping(value="/hello1")    public String index1() {        return question + answer;    }    @ResponseBody    @RequestMapping(value="/hello2")    public String index2() {        return content;    }    @RequestMapping(value="/hello3")    public String index3(Model model) {        try {            model.addAttribute("question", question);            model.addAttribute("answer", answer);        } catch (Exception e) {            logger.info("HelloWorldController ==> index3 method: error", e);        }        return "/hello";    }}

如果使用@RestController,默认就会在每个方法上加上@Responsebody,方法返回值会直接被httpmessageconverter转化,如果想直接返回视图,需要直接指定modelAndView。

public class HelloWorldController{    private Logger logger = LoggerFactory.getLogger(HelloWorldController.class);    @Value("${question}")    private String question;    @Value("${answer}")    private String answer;    @Value("${content}")    private String content;    @RequestMapping("/hello3")    public ModelAndView hello3() {        try {        model.addAttribute("question", question);        model.addAttribute("answer", answer);    } catch (Exception e) {        logger.info("HelloWorldController ==> index3 method: error", e);    }        return new ModelAndView("hello");    }}
  1. 配置首页
/** * Web MVC 配置适配器 * @ClassName: WebAppConfigurer  * @Description:  * @author OnlyMate * @Date 2018年8月28日 下午2:39:31   *  * WebAppConfigurer extends WebMvcConfigurerAdapter 在Spring Boot2.0版本已过时了,用官网说的新的类替换 * */@Configurationpublic class WebAppConfigurer implements WebMvcConfigurer {/**     * SpringBoot设置首页     */    @Override    public void addViewControllers(ViewControllerRegistry registry) {        WebMvcConfigurer.super.addViewControllers(registry);        registry.addViewController("/").setViewName("index");        registry.setOrder(Ordered.HIGHEST_PRECEDENCE);    }}
  1. 访问 http://localhost:8088/springboot

虽然,jsp技术,spring boot 官方不推荐,但考虑到是常用的技术,这里也来集成下jsp技术

  1. 首先,需要在你项目上加上webapp标准的web项目文件夹
  2. 配置jsp的前缀和后缀
    参考头部 '注解说明'
  3. 在controller中返回视图
    同freemaker的第三步

  4. 配置首页
    同freemaker的第四步

  5. 访问 http://localhost:8088/springboot

注意

  如果出现freemarker模版引擎和jsp技术同时存在的话,springmvc会根据解析器的优先级来返回具体的视图,默认,FreeMarkerViewResolver的优先级大于InternalResourceViewResolver的优先级,所以同时存在的话,会返回freemarker视图

视图 配置 引擎 模版 方法 方式 技术 注解 项目 首页 优先级 官方 文件 版本 过时 同时 后缀 容器 适配器 UTF-8 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 亿人帮互联网科技有限公司 苏州找大状互联网科技有限公司 科技与互联网 互联网与科技金融数据 互联网金融公司科技 互联网金融科技平台 互联网科技视频素材 互联网科技教育视频 呼和浩特新华互联网科技学院 链环科技传统企业怎么转型互联网 深圳育鹏互联网科技有限公司招聘 民营互联网公司国防科技 乌鲁木齐新华智原互联网科技学校 晋城互联网科技 合肥互联网科技公司公章图片 富国互联网金融科技混合基金 有人说阿里系是互联网科技企业 互联网科技包装股份有限公司上市 互联网科技手抄报图片 易租星互联网科技有限公司 鸠鸠互联网科技 互联网科技上市公司 广州善班互联网科技 互联网科技有限公司 翻译 海南购全球互联网科技 栖莱科技互联网股份有限公司 宝灵互联网科技有限公司 辽宁互联网新科技 乌苏新华互联网科技做什么的 互联网硬科技公司
0