springmvc的InternalResourceViewResolver 配置
时间:2021-08-06
本文章向大家介绍springmvc的InternalResourceViewResolver 配置,主要包括springmvc的InternalResourceViewResolver 配置使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
springmvc的InternalResourceViewResolver 配置
springmvc的InternalResourceViewResolver 配置
1、视图解析InternalResourceViewResolver
org.springframework.web.servlet.view.InternalResourceViewResolver
InternalResourceViewResolver类的作用:
InternalResourceViewResolver会将视图名解析为JSP文件。另外,如果在你的JSP页面中使用了JSP标准标签库 (JavaServer Pages Standard Tag Library,JSTL)的 话,InternalResourceViewResolver能够将视图名解析为JstlView形式的JSP文件,从而将JSTL本地化和资源bundle变量暴露给JSTL的格式化(formatting)和信息(message)标签。
Spring提供了两个JSP标签库,一个用于表单到模型的绑定,另一个提供了通用的工具类特性。
考虑一个简单的场景,假设逻辑视图名为home。通用的实践是将JSP文件放到Web应用的WEB-INF目录下,防止对它的直接访问。如果我们将所有的JSP文件都放在“/WEB-INF/views/”目录下, 并且home页的JSP名为home.jsp,那么我们可以确定物理视图的路径 就是逻辑视图名home再加上“/WEB-INF/views/”前缀和“.jsp”后缀。如下图所示:
2、参数
prefix 这个表示目录 例:
<property name="prefix" value="/WEB-INF/JSP/"/>
suffix 这个表示后缀 例:
<property name="suffix" value=".jsp"/>
order 这个表示视图解析器的执行顺序,按值从小到大的顺序执行 例:
<property name="order" value="1"/>
3、单格式的视图解析(jsp)
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/page/" /> <property name="suffix" value=".jsp" />
4、多格式的视图解析(jsp)
<!-- 配置Html试图解析器 --> <bean id="htmlViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="order" value="0" /> <property name="viewClass" value="com.jack.common.spring.HtmlResourceView" /> <property name="prefix" value="/WEB-INF/html/" /> <property name="suffix" value=".html"></property> <property name="contentType" value="text/html;charset=UTF-8"></property> </bean> <!-- Jsp视图解析器 --> <bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="order" value="1" /> <!-- 如果配置的有html视图解析器,不能用jstl的那个 --> <!-- <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" /> --> <property name="viewClass" value="org.springframework.web.servlet.view.InternalResourceView" /> <property name="prefix" value="/WEB-INF/page/" /> <property name="suffix" value=".jsp"></property> </bean>
可以发现htmlViewResolver视图解析器的viewClass值有些奇怪,这是因为我们需要新建一个html的解析器,
该解析器要继承 InternalResourceView 并且重写 checkResource方法,代码:
import org.springframework.web.servlet.view.InternalResourceView; import java.io.File; import java.util.Locale; public class HtmlResourceView extends InternalResourceView { @Override public boolean checkResource(Locale locale) throws Exception { File file = new File(this.getServletContext().getRealPath("/")+getUrl()); return file.exists(); } }
由于UrlBasedViewResolver(InternalResourceViewResolver的父类)的loadView方法,代码:
protected View loadView(String viewName, Locale locale) throws Exception { AbstractUrlBasedView view = this.buildView(viewName); View result = this.applyLifecycleMethods(viewName, view); return view.checkResource(locale)?result:null; } public boolean checkResource(Locale locale) throws Exception { return true; }
发现这个方法,AbstractUrlBasedView.checkResource()是永远返回true的,也就是如果找不到,也会返回一个result,但是这个result是找不到的。
为此需要重写AbstractUrlBasedView这个类,更改checkResource方法。
————————————————
版权声明:本文为CSDN博主「小明同学——」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文地址:https://www.cnblogs.com/codefarmer-zb/p/15110535.html
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- Android登录注册功能 数据库SQLite验证
- CMQ消费者报错,无法获取本机ip地址问题排查
- 腾讯云TKE-Metrics-Server案例: TKE中自建Metrics-Server问题
- (建议收藏)关于JS事件循环, 这一篇就够啦
- TensorFlow2 开发指南 | 02 回归问题之汽车燃油效率预测
- 腾讯云TKE-Ingress案例: TKE-Ingress与Nginx-Ingress共存
- 玩转Kotlin 彻底弄懂Lambda和高阶函数
- leetcode之仅仅反转字母
- 3分钟短文:Laravel的“南天门”,过滤掉七七八八的数据
- 【1024,Serverless】maimai_DX 查分器
- TRTC/MLVB/IM案例:SDK用户日志提取与管理的一种实现方案
- 从 1 到 0 构建博客项目(3) --LNMP--WordPress
- 4. Validator校验器的五大核心组件,一个都不能少
- leetcode之罗马数字转整数
- B站签到-云函数