接了一个外包项目开发,有微信前端和后台管理二套界面,为了方便,把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>