接了一个外包项目开发,有微信前端和后台管理二套界面,为了方便,把2个系统放在了一个工程里面,但是前端开发技术方有了分歧,最后决定后台用velocity,微信用jsp,那么就需要修改一下spring-mvc的配置。
1、重写InternalResourceView方法,主要为了高级别的解析器解析不到的时候,抛给低级别的解析器。
package com.studio.core.access;
import java.io.File;
import java.util.Locale;
import org.springframework.web.servlet.view.InternalResourceView;
/**
* 自定义视图解析(通过配置实现多视图整合,如jsp,velocity )
* @author liuhy
*
*/
public class JspResourceView extends InternalResourceView {
@Override
public boolean checkResource(Locale locale) {
System.out.println(this.getServletContext().getRealPath("/") +"++"+ getUrl());
File file = new File(this.getServletContext().getRealPath("/") + getUrl());
return file.exists();// 判断该页面是否存在
}
}
2、order级别设置解析器的优先级,先按jsp解析,解析不到文件,在vm解析。
<bean id="velocityViewResolver"
class="com.supply.network.melody.common.web.velocity.resolver.FixedVelocityLayoutViewResolver">
<property name="order" value="10" />
<property name="suffix" value=".vm" />
<property name="prefix" value="screen/" />
<property name="layoutUrl" value="layout/default_layout.vm" />
<property name="exposeSpringMacroHelpers" value="true" />
<property name="dateToolAttribute" value="dateTool" />
<property name="numberToolAttribute" value="numberTool" />
<property name="toolboxConfigLocation" value="WEB-INF/classes/conf/vm-toolbox.xml" />
<property name="contentType" value="${web.contentType}"></property>
<property name="exposeRequestAttributes" value="true"></property>
</bean>
<bean id="jspViewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="com.studio.core.access.JspResourceView"/>
<property name="contentType" value="${web.contentType}"></property>
<property name="order" value="1" />
<property name="prefix" value="/WEB-INF/views/front/" />
<property name="suffix" value=".jsp" />
</bean>