springmvc的InternalResourceViewResolver自我理解
来源:互联网 发布:域名必须通过icp备案 编辑:程序博客网 时间:2024/04/29 01:23
org.springframework.web.servlet.view.InternalResourceViewResolver他的作用是在Controller返回的时候进行解析视图prefix 这个表示目录suffix 这个表示后缀@RequestMapping("/advertising") public String advertising(Model model ) { return "ta"; }}如上 ta就是查找到ta.jsp 然后往WEB-INF目录进行查找。而WEB-INF是对web来说是安全目录,是不能直接访问里面的资源的这个是一个springmvc的视图解析器
通常是用来配置jsp的
<bean id="jsp" class="org.springframework.web.servlet.view.InternalResourceViewResolver" > <property name="order" value="44" /> <property name="contentType" value="text/html"/> <property name="prefix" value="/WEB-INF/"/> <property name="suffix" value=".jsp"/> </bean>
但是我先除了配置jsp还想配置html的时候就会出现问题。如:
我WEB-INF下面有ta.html和tas.jsp
<mvc:view-controller path="/" view-name="ta"/>//注意是以这个为重点 <mvc:annotation-driven /> <mvc:default-servlet-handler/> <!-- 自动扫描(自动注入) --> <context:component-scan base-package="com.wwzuizz.**.controller"/> <mvc:resources mapping="/WEB-INF/**" location="/WEB-INF/"/> <bean id="html" class="org.springframework.web.servlet.view.InternalResourceViewResolver" > <property name="order" value="3344" /> <property name="prefix" value="/WEB-INF/"></property> <property name="suffix" value=".html"/> <property name="contentType" value="text/html"></property> </bean> <bean id="jsp" class="org.springframework.web.servlet.view.InternalResourceViewResolver" > <property name="order" value="44" /> <property name="contentType" value="text/html"/> <property name="prefix" value="/WEB-INF/"/> <property name="suffix" value=".jsp"/> </bean>
进行如上配置的时候,根据优先级它会先取jsp,然后在html。可是发现它只是检查一次而已,如如果是jsp的order比较低,则只会解析jsp,如果找不到就直接异常了。如果是html的order比较低,则只会解析html,如果找不到也会直接报异常。
我想要的效果是优先解析jsp,找不到再解析htnl。
查看源码UrlBasedViewResolver(InternalResourceViewResolver的父类)
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; }
发现这个方法,AbstractUrlBasedView.checkResource()是永远返回true的,也就是如果找不到,也会返回一个result,但是这个result是找不到的。public boolean checkResource(Locale locale) throws Exception { return true; }
为此只需要重写AbstractUrlBasedView这个类<mvc:view-controller path="/" view-name="ta"/> <mvc:annotation-driven /> <mvc:default-servlet-handler/> <!-- 自动扫描(自动注入) --> <context:component-scan base-package="com.wwzuizz.**.controller"/> <mvc:resources mapping="/WEB-INF/**" location="/WEB-INF/"/> <bean id="html" class="org.springframework.web.servlet.view.InternalResourceViewResolver" > <property name="order" value="3344" /> <property name="viewClass" value="com.wwzuizz.common.DefaultJstlView"/> <property name="prefix" value="/WEB-INF/"></property> <property name="suffix" value=".html"/> <property name="contentType" value="text/html"></property> </bean> <bean id="jsp" class="org.springframework.web.servlet.view.InternalResourceViewResolver" > <property name="order" value="44" /> <property name="viewClass" value="com.wwzuizz.common.DefaultJstlView"/> <property name="contentType" value="text/html"/> <property name="prefix" value="/WEB-INF/"/> <property name="suffix" value=".jsp"/> </bean>com.wwzuizz.common.DefaultJstlViewpublic class DefaultJstlView extends JstlView { @Override public boolean checkResource(Locale locale) throws Exception { File file = new File(this.getServletContext().getRealPath("/") + getUrl()); return file.exists();//判断该jsp页面是否存在 }}
这样子如果不存在就传递给下一个InternalResourceViewResolve;其实我很好奇order是在哪里实现的代码,我带入tomcat源码页找不到是哪里的这样子就可以做到
<mvc:view-controller path="/" view-name="ta"/>ta如果jsp解析不到,就作为html解析补充:
org.springframework.web.servlet.DispatcherServlet
如下视图解析的时候会for的去找 所以如果不为空就直接返回
@Nullableprotected 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;}
阅读全文
0 0
- springmvc的InternalResourceViewResolver自我理解
- springmvc中如何正确的解析视图InternalResourceViewResolver
- SpringMVC视图解析器InternalResourceViewResolver
- InternalResourceViewResolver
- InternalResourceViewResolver
- springmvc 使用InternalResourceViewResolver解析URL文件
- Springmvc视图解析器InternalResourceViewResolver问题分析
- Nsis的自我理解
- AngularJS的自我理解
- OutputFormat的自我理解
- Vuex的自我理解
- internalresourceviewresolver返回奇怪的视图
- spring的自我一点理解:
- 池"概念的自我理解
- 关于MVC的自我理解
- Activity生命周期的自我理解
- activity的一些自我理解
- 图解-自我理解的框架
- 基于CentOS搭建Docker环境
- scrapy TypeError: parse() missing 1 required positional argument: 'response'
- 运用筛法思想解决其他题目。选太子(select the prince)和幸运的编号
- SQLite学习1_Windows下安装配置SQLite和使用的教程(1)
- Java 并发工具包 java.util.concurrent 用户指南
- springmvc的InternalResourceViewResolver自我理解
- 安卓学习笔记(8)-外部存储的读写操作
- 整理了一份PHP开发中数组操作大全,包含有数组操作的基本函数、数组的分段和填充、数组与栈、数组与列队、回调函数、排序、计算、其他的数组函数等。
- nginx概念
- 顺序表应用4-2:元素位置互换之逆置算法(数据改进)
- 学习方法,认识Linux及创建虚拟机和安装CentOS7
- softmax回归
- git学习
- 笔记-朴素贝叶斯