项目中有时候需要同时使用Jsp页面和Html静态页面,也可能是xml或者json
spring可以配置多个ViewResolver来处理不同类型的页面
?
例子如下,首先构建一个自己的ViewResolver
这个ViewResolver用来匹配html静态页面
如果没有匹配成功,则checkResource返回false,由其他优先级更低的ViewResolver继续尝试匹配
?
import java.io.File;
import java.util.Locale;
import org.springframework.web.servlet.view.InternalResourceView;
public class HtmlResourceView extends InternalResourceView {
@Override
public boolean checkResource(Locale locale) {
File file = new File(this.getServletContext().getRealPath("/") + getUrl());
return file.exists();// 判断该页面是否存在
}
}
?
?
Spring ApplicationContext
用addResourceHandlers把html静态页面的路径设为静态资源
然后配置两个ViewResolver
优先级较高的为刚才创建的htmlViewResolver将viewResolver.setOrder(0)
优先级较低的为映射jsp页面的jspViewResolver将viewResolver.setOrder(1)
?
@Configuration
@Profile(value = { "default" })
@EnableWebMvc
@ComponentScan(basePackages = "com.demo")
public class WebContext extends WebMvcConfigurerAdapter{
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
registry.addResourceHandler("/html/**").addResourceLocations("/html/");
}
@Bean
public ViewResolver htmlViewResolver(){
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(HtmlResourceView.class);
viewResolver.setPrefix("/html/");
viewResolver.setSuffix(".html");
viewResolver.setOrder(0);
return viewResolver;
}
@Bean
public ViewResolver jspViewResolver(){
InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
viewResolver.setViewClass(JstlView.class);
viewResolver.setPrefix("/jsp/");
viewResolver.setSuffix(".jsp");
viewResolver.setOrder(1);
return viewResolver;
}
}
?
?
Controller
假设返回new ModelAndView("homePage")
按照前面配置的两个ViewResolver
Spring会先匹配 /html/homePage.html
如果不存在,再匹配 /jsp/homePage.jsp
?
@RequestMapping(value = { "/" , "" }, produces = "text/html; charset=utf-8")
public ModelAndView visitHomePage(HttpServletRequest request) {
return new ModelAndView("homePage");
}
?
这样就可以在Spring中配置多个ViewResolver
按照优先级映射不同的页面文件
?
以上
?
原文:http://neverflyaway.iteye.com/blog/2298284