本文章已收录于:

版权声明:本文为博主原创文章,未经博主允许不得转载。
再做页面静态化处理时,有时候我们需要 两种或者两种以上的视图解析方式,比如 jsp,html,json,jstl,ftl等等,显然默认的 springmvc 只配置一种视图解析方式是满足不了我们的,但是放心,springmvc提供了配置多视图解析的方式:
比如:一种视图解析用来 解析 freemarker静态化后的html,另一种视图解析用来解析 jsp(jstl)
网上好多方式都有提到用 order 来设置解析器的优先级,但经试验,优先级低的还是生效不了,不知道是否有其他的解决方法?最终查看源码才发现原来springmvc 只给我们提供了 待我们重写的方法,看源码:
- /*** Eclipse Class Decompiler plugin, copyright (c) 2012 Chao Chen (cnfree2000@hotmail.com) ***/
- package org.springframework.web.servlet.view;
- import java.util.Locale;
- import org.springframework.beans.factory.InitializingBean;
- public abstract class AbstractUrlBasedView extends AbstractView implements
- InitializingBean {
- private String url;
- protected AbstractUrlBasedView() {
- }
- protected AbstractUrlBasedView(String url) {
- this.url = url;
- }
- public void setUrl(String url) {
- this.url = url;
- }
- public String getUrl() {
- return this.url;
- }
- public void afterPropertiesSet() throws Exception {
- if ((isUrlRequired()) && (getUrl() == null))
- throw new IllegalArgumentException("Property 'url' is required");
- }
- protected boolean isUrlRequired() {
- return true;
- }
- <span style="background-color: rgb(255, 255, 204);">public boolean checkResource(Locale locale) throws Exception {
- return true;
- }</span>
- public String toString() {
- StringBuilder sb = new StringBuilder(super.toString());
- sb.append("; URL [").append(getUrl()).append("]");
- return sb.toString();
- }
- }
/*** Eclipse Class Decompiler plugin, copyright (c) 2012 Chao Chen (cnfree2000@hotmail.com) ***/
package org.springframework.web.servlet.view;
import java.util.Locale;
import org.springframework.beans.factory.InitializingBean;
public abstract class AbstractUrlBasedView extends AbstractView implements
InitializingBean {
private String url;
protected AbstractUrlBasedView() {
}
protected AbstractUrlBasedView(String url) {
this.url = url;
}
public void setUrl(String url) {
this.url = url;
}
public String getUrl() {
return this.url;
}
public void afterPropertiesSet() throws Exception {
if ((isUrlRequired()) && (getUrl() == null))
throw new IllegalArgumentException("Property 'url' is required");
}
protected boolean isUrlRequired() {
return true;
}
<span style="background-color: rgb(255, 255, 204);">public boolean checkResource(Locale locale) throws Exception {
return true;
}</span>
public String toString() {
StringBuilder sb = new StringBuilder(super.toString());
sb.append("; URL [").append(getUrl()).append("]");
return sb.toString();
}
}
所以怎么做就很明确了:
第一步:新建一个html的解析器并继承 InternalResourceView 后重写 checkResource
- package com.izhbg.typz.common.springmvc.view;
- import java.io.File;
- import java.util.Locale;
- import org.springframework.web.servlet.view.InternalResourceView;
- /**
- *
- * @ClassName: HtmlResourceView
- * @author caixl
- * @date 2016-6-8 上午11:01:41
- *
- */
- public class HtmlResourceView extends InternalResourceView {
- @Override
- public boolean checkResource(Locale locale) {
- File file = new File(this.getServletContext().getRealPath("/") + getUrl());
- return file.exists();// 判断该页面是否存在
- }
- }
package com.izhbg.typz.common.springmvc.view;
import java.io.File;
import java.util.Locale;
import org.springframework.web.servlet.view.InternalResourceView;
/**
*
* @ClassName: HtmlResourceView
* @author caixl
* @date 2016-6-8 上午11:01:41
*
*/
public class HtmlResourceView extends InternalResourceView {
@Override
public boolean checkResource(Locale locale) {
File file = new File(this.getServletContext().getRealPath("/") + getUrl());
return file.exists();// 判断该页面是否存在
}
}
第二步:在xml配置文件中 指定解析器的 viewClass为该解析类
- <!-- 定义HTML文件的位置 -->
- <bean id="htmlviewResolver"
- class="org.springframework.web.servlet.view.InternalResourceViewResolver">
- <property name="viewClass" value="com.izhbg.typz.common.springmvc.view.HtmlResourceView"/>
- <property name="order" value="0" />
- <property name="prefix" value="/cms/"/>
- <property name="suffix" value=".html" />
- <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" />
- <property name="prefix" value="/views/"/>
- <property name="suffix" value=".jsp"/>
- </bean>
<!-- 定义HTML文件的位置 -->
<bean id="htmlviewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="com.izhbg.typz.common.springmvc.view.HtmlResourceView"/>
<property name="order" value="0" />
<property name="prefix" value="/cms/"/>
<property name="suffix" value=".html" />
<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" />
<property name="prefix" value="/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
源码可参考 开源项目:https://github.com/izhbg/typz
-
顶
- 3
-
踩
- 0
参考知识库
关闭
核心技术类目
全部主题
Hadoop
AWS
移动游戏
Java
Android
iOS
Swift
智能硬件
Docker
OpenStack
VPN
Spark
ERP
IE10
Eclipse
CRM
JavaScript
数据库
Ubuntu
NFC
WAP
jQuery
BI
HTML5
Spring
Apache
.NET
API
HTML
SDK
IIS
Fedora
XML
LBS
Unity
Splashtop
UML
components
Windows Mobile
Rails
QEMU
KDE
Cassandra
CloudStack
FTC
coremail
OPhone
CouchBase
云计算
iOS6
Rackspace
Web App
SpringSide
Maemo
Compuware
大数据
aptech
Perl
Tornado
Ruby
Hibernate
ThinkPHP
HBase
Pure
Solr
Angular
Cloud Foundry
Redis
Scala
Django
Bootstrap
3楼 mj5lucky 2017-03-09 19:37发表 [回复] [引用] [举报]-
-
好,不错
2楼 RisonGao 2017-03-02 16:46发表 [回复] [引用] [举报]-
-
youyong
1楼 qq_25430869 2016-10-22 04:59发表 [回复] [引用] [举报]-
-
感谢!
网上类似文章很多,很多复制的没什么用。