本文目的是,让视图解析器优先去项目下找jsp,找不到再去WEB-INF下面找。
首先,注册2个视图解析器,一个去外面,一个去里面找。
<bean id="viewResolver0" class="com.cmst.springexpand.UdInternalResourceViewResolver">
<property name="order" value="1"/>
<property name="viewClass" value="com.cmst.springexpand.UdInternalResourceView"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="order" value="2"/>
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp"/>
</bean>
然后自定义一个视图:
public class UdInternalResourceView extends InternalResourceView {
private static String projectPath=getProjectPath();
@Override
public boolean checkResource(Locale locale) throws Exception {
String url=this.getUrl();
boolean flag= Files.exists(Paths.get(projectPath+url));
return flag;
}
public static String getProjectPath(){
if (StringUtils.isEmpty(projectPath)){
String p= Thread.currentThread().getContextClassLoader().getResource("").getPath();
projectPath= p.split("WEB-INF")[0];
if (projectPath.startsWith("/"))
projectPath=projectPath.substring(1);
}
return projectPath;
}
}
自定义一个解析器:
public class UdInternalResourceViewResolver extends InternalResourceViewResolver{
public void setViewClass(String viewClass) {
try {
super.setViewClass(Class.forName(viewClass));
} catch (ClassNotFoundException e) {
}
}
}
最后就可以使用了:
@RequestMapping("/hello")
public ModelAndView test(){
ModelAndView modelAndView=new ModelAndView();
modelAndView.setViewName("index");
return modelAndView;
}
@RequestMapping("/hello1")
public ModelAndView test2(){
ModelAndView modelAndView=new ModelAndView();
modelAndView.setViewName("index1");
return modelAndView;
}