栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

007-Spring MVC ViewResolver视图解析器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

007-Spring MVC ViewResolver视图解析器

在002-Spring MVC流程解析中我们提到Spring Boot中默认添加了如下的视图解析器。

既然是多个,那么肯定是有顺序的。所有的ViewResolver都实现了Ordered接口,在Spring中实现了这个接口的类都是可以排序的。在ViewResolver中是通过order属性来指定顺序的,默认都是最大值。值越大,排序在越后。

我们知道ViewResolver返回View对象,ViewResolver按顺序执行,如果返回的View为null,则执行下一个ViewResolver,如果不为null,则不再往下执行。如果所有ViewResolver都执行完,但View还是为null则抛出异常。所以在某些情况下,类似的ViewResolver处理器,排在后面的将不会生效。

AbstractCachingViewResolver

该抽象类有个setCache方法,用于设置是否缓存视图。(缓存视图可以提高应用的响应效率)。默认是true。但某些时候缓存会造成问题,比如开发阶段,我们需要禁用缓存。

UrlbasedViewResolver

此视图解析器中包含几个重要的概念

  • “redirect:”:重定向
  • “forward:”:请求转发
package com.yyoo.springmvc.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/demo1")
public class Demo1Controller {

    @RequestMapping("/redirect")
    public String redirect(){
        // 会跳转到我们上一篇文章的地址,而且浏览器的url地址也变为下面的地址了
        return "redirect:https://blog.csdn.net/forlinkext/article/details/119354262";
    }

    @RequestMapping("/forward")
    public String forward(){
        // 会跳转到我们的Application中定义的地址,最后页面返回HelloWorld,而且浏览器url地址不变
        return "forward:/";
    }

}

关于redirect和forward的区别,相信大家在学习servlet的时候就了解了。示例中只有大概的说明。

InternalResourceViewResolver

解析JSP 和 JSTL视图


    
    
    
    

Spring Boot环境下InternalResourceViewResolver是默认加入的视图解析器,在application.properties设置如下属性即可

spring.mvc.view.prefix=/
spring.mvc.view.suffix=.jsp

注意你的jsp文件要放在webapp目录下。目录结构如下:

FreeMarkerViewResolver

本文不深入讲解FreeMarker,需要的可以查FreeMarker官网https://freemarker.apache.org/
pom文件中引入如下依赖

        
            org.springframework.boot
            spring-boot-starter-freemarker
        

我们示例是用的spring boot,直接配置一下内容即可

# 模板文件放置的位置
spring.freemarker.template-loader-path=classpath:/webapp/
# 模板文件的后缀
spring.freemarker.suffix=.ftl

template-loader-path的默认值为classpath:/templates/

注意Freemarker的模板文件地址如下图:

Controller代码如下:

    @RequestMapping("freemarkerPage")
    public String freemarkerPage(Model model, @RequestParam String name){

        Map data = new HashMap<>();
        data.put("name",name);
        model.addAllAttributes(data);
        return "freemarkerPage";
    }

model用于设置模板数据,返回值是String类型,表示模板文件的路径。

我们也可以返回ModelAndView对象。实际上最终都是返回ModelAndView对象。

freemarkerPage.ftl模板页面内容

freemarker页面:${name}

访问页面

访问如下链接http://localhost:8080/demo1/freemarkerPage?name=%E5%BC%A0%E4%B8%89

ThymeleafViewResolver

本文不深入讲解Thymeleaf,需要的可以查Thymeleaf官网https://www.thymeleaf.org/documentation.html
pom文件中引入如下依赖

        
            org.thymeleaf
            thymeleaf-spring5
        

由于我们的spring是spring5,所以引入的是thymeleaf-spring5。

properties配置
# thymeleaf模板配置
spring.thymeleaf.prefix=classpath:/webapp/
spring.thymeleaf.suffix=.html

template-loader-path的默认值为classpath:/templates/

Controller方法
    @RequestMapping("thymeleafPage")
    public String thymeleafPage(Model model, @RequestParam String name){

        Map data = new HashMap<>();
        data.put("name",name);
        model.addAllAttributes(data);

        return "thymeleafPage";
    }
thymeleafPage.html模板内容



    
    thymeleaf page



Welcome to our grocery store!

访问测试页面

访问如下链接http://localhost:8080/demo1/thymeleafPage?name=%E4%B8%AD%E6%96%87
结果如下:

我们示例中同时使用了多种模板引擎,而且模板文件地址都一样,如果要区分,我们在配置模板地址的时候可以使用不同的文件夹来区分即可。

除了jsp、freemarker、thymeleaf以外,老牌的模板引擎还有velocity。以上都是SpringMVC直接返回相应页面的情况。

本文介绍了Spring MVC直接返回Html页面的情况,这是在没有前后端分离的时候,常见的视图处理方式。但我们目前常使用的方式是前后端分离,通过json对象的方式响应给前端请求。我们将在下一章介绍。

上一篇:006-Spring MVC参数验证2-分组验证
下一篇:待续

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/275845.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号