Spring配置多个ViewResolver
项目中有时候需要同时使用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
按照优先级映射不同的页面文件
以上
Struts2整合Spring方法及原理 http://www.linuxidc.com/Linux/2013-12/93692.htm
基于 Spring 设计并实现 RESTful Web Services http://www.linuxidc.com/Linux/2013-10/91974.htm
Spring-3.2.4 + Quartz-2.2.0集成实例 http://www.linuxidc.com/Linux/2013-10/91524.htm
使用 Spring 进行单元测试 http://www.linuxidc.com/Linux/2013-09/89913.htm
运用Spring注解实现Netty服务器端UDP应用程序 http://www.linuxidc.com/Linux/2013-09/89780.htm
Spring 3.x 企业应用开发实战 PDF完整高清扫描版+源代码 http://www.linuxidc.com/Linux/2013-10/91357.htm