废话有点多。。大家谅解下啊,如果着急的话可以直接下拉到底部,上面是我的解决历程。。

这个问题一般是遇不到的,只怪我们项目是在奇葩。事情是这样的,我们先开发的项目要集成进去一个老项目,新项目用的是html,但是老项目用的是Jsp,而且老项目功能完善,只是前端有点问题。

问题有了,那总得解决是吧。现在有很多种办法:1、把Jsp改成Html;2、用request.getDispacter()去跳转;3、研究一下spring的视图解析器。

第一种:实在是比较麻烦,我这种懒的人不到万不得已是不会采用这种方式的。

第二种:比第一种还要麻烦,既要改后端,还要改前端,因为这样跳转,得用jsp的内置对象去获取传递参数了,果断舍去。

第三种:说到第三种,我们就不得不先说一下spring视图解析器的源码了。

protected View resolveViewName(String viewName, @Nullable Map<String, Object> model,Locale locale, HttpServletRequest request) throws Exception {if (this.viewResolvers != null) {for (ViewResolver viewResolver : this.viewResolvers) {View view = viewResolver.resolveViewName(viewName, locale);if (view != null) {return view;}}}return null;
}

在DispacterServlet中找到这个方法,可以看见spring是循环所有的视图解析器,然后返回解析结果不为空的视图。

因此,如果我们想要即返回jsp,又返回html,就必须要加一个Jsp的视图解析器。

经过网上的资料查找和作为程序员的经验以及源码(具体源码在哪我忘了),我们可以发现,一个视图解析器必须得包含前缀,后缀等东西,所以得出的代码如下:

    @Beanpublic InternalResourceViewResolver viewResolver() {InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();viewResolver.setPrefix("/WEB-INF/");viewResolver.setSuffix(".jsp");viewResolver.setOrder(0);viewResolver.setContentType("text/html;charset=UTF-8");return viewResolver;}

加上去之后呢启动项目,我们发现项目所有都当成jsp去跳转了。分析了一下,发现可能,是因为order的原因,因为前面DispacterServlet中的代码也说了,只要view不为空就会返回回去。然后我就再配了一个html视图解析器,没用默认的,并且我把优先级也修改了一下,代码如下。

@Beanpublic InternalResourceViewResolver htmlViewResolver() {InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();viewResolver.setPrefix("/");viewResolver.setSuffix(".html");viewResolver.setOrder(0);viewResolver.setContentType("text/html;charset=UTF-8");return viewResolver;}@Beanpublic InternalResourceViewResolver viewResolver() {InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();viewResolver.setPrefix("/WEB-INF/");viewResolver.setSuffix(".jsp");viewResolver.setOrder(1);viewResolver.setContentType("text/html;charset=UTF-8");return viewResolver;}

可是这样所有的都解析成html去了,我不得不再次跟了一下源码,发现即使没有页面,view依旧不为空,这样不就肯定都当成Html处理了么,我们现在需要一个能去检测是否有这个页面的东西。经过一番折腾之后,我们需要创建一个这样的类:

public class HandleResourceViewExists extends InternalResourceView {@Overridepublic boolean checkResource(Locale locale) {File file = new File(this.getServletContext().getRealPath("/") + getUrl());return file.exists(); //判断页面是否存在}
}

其实就是一个检查器,然后我们把我们的检查器设置到我们自定义解析器上面,最终的代码如下:

    @Beanpublic InternalResourceViewResolver htmlViewResolver() {InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();viewResolver.setPrefix("/");viewResolver.setViewClass(HandleResourceViewExists.class); //设置检查器viewResolver.setSuffix(".html");viewResolver.setOrder(0);viewResolver.setContentType("text/html;charset=UTF-8");return viewResolver;}@Beanpublic InternalResourceViewResolver viewResolver() {InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();viewResolver.setViewClass(HandleResourceViewExists.class); //设置检查器viewResolver.setPrefix("/WEB-INF/");viewResolver.setSuffix(".jsp");viewResolver.setOrder(0);viewResolver.setContentType("text/html;charset=UTF-8");return viewResolver;}

Springboot配置多个视图解析器,项目同时有jsp和html相关推荐

  1. Spring MVC配置多个视图解析器(FreeMarker,JSP)

    Spring MVC配置多个视图解析器(FreeMarker,JSP) Spring MVC开发过程中,有时候需要多个视图解析器策略来解析视图名称,出现这个情况怎么解决? 通过"order& ...

  2. Spring MVC 中自定义视图 @Component 及 配置 多个视图解析器 Excel视图

    首先我们建立一个自己的View实现View接口.要注意在类上面加上@Component的注解,因为看BeanNameViewResolver的源码知道,是直接从ioc容器里面拿的根据名字拿的视图,所以 ...

  3. 精通SpringBoot——第二篇:视图解析器,静态资源和区域配置

    今天让我们来看看另一个重要的类:WebMvcAutoConfigurationAdapter.先来看看它的声明: @Configuration @Import(EnableWebMvcConfigur ...

  4. springmvc同时配置html和jsp视图解析器

    首先说一下环境:jdk1.8+tomcatt8.5.35+mysql5.7.24+springmvc5.1.3 方式一: 使用freemaker作为html的视图解析器,InternalResourc ...

  5. springmvc多个视图解析器管理跳转资源

    springmvc多个视图解析器管理跳转资源 项目结构 第一步:将所有资源交由springmvc管理 <servlet><servlet-name>springmvc</ ...

  6. springmvc视图解析器_SpringMVC视图及REST风格

    什么是视图解析器? springMVC用于处理视图最重要的两个接口是ViewResolver和View. ViewResolver的主要作用是把一个逻辑上的视图名称解析成一个真的的视图,而Spring ...

  7. 开发 Spring 自定义视图和视图解析器

    Spring 视图和视图解析器简介 什么是 Spring 视图和视图解析器 Spring MVC(Model View Controller)是 Spring 中一个重要的组成部分,而 Spring ...

  8. SpringMVC-配置JSP视图解析器

    一.介绍 (1)Tomcat中提供了JSPServlet负责处理JSP文件. (2)SpringMVC默认有请求转发视图(forward:)和重定向视图(redirect:),我们可以利用请求转发视图 ...

  9. 详解Spring MVC 4之ViewResolver视图解析器

    所有的We MVC框架都有一套它自己的解析视图的机制,Spring MVC也不例外,它使用ViewResolver进行视图解析,让用户在浏览器中渲染模型.ViewResolver是一种开箱即用的技术, ...

最新文章

  1. 循环中 动态参数 传div 层_【转载】黄学杰等:铌元素在锂离子电池中的应用
  2. 网易智慧企业春招开幕:同心战疫,共盼花开
  3. ITK:使用多线程过滤图像
  4. Spring简介-Spring的优势
  5. js ejs for语句的第二种遍历用法
  6. C# Winfrom DataGridView DataSource绑定数据源后--解决排序问题
  7. php jwt token 解析,JSON Web Token(JWT)入坑详解
  8. mysql数据库的笔试题_MySQL数据库常见面试题
  9. python requests模块post_python requests模块提交中文数据
  10. asp.net服务器控件开发-学习之路(一)
  11. (十八)其他数据库对象,视图,序列
  12. 离散Hopfield神经网络的联想记忆—数字识别
  13. 业余草尚硅谷Java视频教程_SpringBoot视频教程免费下载
  14. go 学习笔记之解读什么是defer延迟函数
  15. 车载PHY的唤醒与睡眠的正确姿势
  16. st188脉搏传感器工作原理_各种传感器工作原理动态图,拿走不谢~
  17. 从c++到java+android
  18. 2022年互联网直播行业研究报告
  19. Pytorch将多维张量转换为一维
  20. mmdetection - config配置文件之datasets

热门文章

  1. 2022-2028中国物联网车队管理市场现状研究分析与发展前景预测报告
  2. 禁用VScode ESlint
  3. PP66 EEPPPPMM SSyysstteemm AAddmmiinniissttrraattiioonn GGuuiiddee 16 R1
  4. 绝地求生吃鸡李云龙最全语音包大全500多mp3下载
  5. 由12306.CN谈谈网站性能技术http://coolshell.cn/articles/6470.html
  6. 京东 京东健康二面 14分钟视频面试
  7. 利用promise.race来实现请求超时埋点功能
  8. 使用GEE计算多种时序植被指数/建筑指数/水体指数
  9. freebasic 制作dll并导出函数
  10. 微信小程序 swoole简单聊天室