Java 无法打开ServletContext资源[/templates/show.xsl]
我有一个spring boot+thymeleaf应用程序,所以我基本上不使用xml文件进行配置。经典的html模板对我来说很好,但我在使用xsl时遇到了麻烦。我遵循了本教程,但最终得到了Java 无法打开ServletContext资源[/templates/show.xsl],java,spring-mvc,xslt,spring-boot,thymeleaf,Java,Spring Mvc,Xslt,Spring Boot,Thymeleaf,我有一个spring boot+thymeleaf应用程序,所以我基本上不使用xml文件进行配置。经典的html模板对我来说很好,但我在使用xsl时遇到了麻烦。我遵循了本教程,但最终得到了java.io.FileNotFoundException:无法打开ServletContext资源[/templates/show.xsl] 这就是我的配置类的外观 @Configuration @EnableWebMvc public class MvcConfiguration extends WebMv
java.io.FileNotFoundException:无法打开ServletContext资源[/templates/show.xsl]
这就是我的配置类的外观
@Configuration
@EnableWebMvc
public class MvcConfiguration extends WebMvcConfigurerAdapter {
private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
"classpath:/META-INF/resources/", "classpath:/resources/",
"classpath:/static/", "classpath:/public/" };
@Bean
@Description("Thymeleaf template resolver serving HTML 5")
public ClassLoaderTemplateResolver htmlTemplateResolver() {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setPrefix("templates/");
templateResolver.setCacheable(false);
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode("HTML5");
templateResolver.setCharacterEncoding("UTF-8");
return templateResolver;
}
@Bean
@Description("Thymeleaf template resolver serving XML")
public ClassLoaderTemplateResolver xmlTemplateResolver() {
ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
templateResolver.setPrefix("templates/");
templateResolver.setCacheable(false);
templateResolver.setSuffix(".xml");
templateResolver.setTemplateMode("XML");
templateResolver.setCharacterEncoding("UTF-8");
return templateResolver;
}
@Bean
@Description("Thymeleaf template engine with Spring integration")
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.addTemplateResolver(htmlTemplateResolver());
templateEngine.addTemplateResolver(xmlTemplateResolver());
return templateEngine;
}
@Bean
@Description("Thymeleaf view resolver")
public ViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
viewResolver.setCharacterEncoding("UTF-8");
return viewResolver;
}
@Bean
public ViewResolver getXSLTViewResolver(){
XsltViewResolver xsltViewResolver = new XsltViewResolver();
xsltViewResolver.setOrder(1);
xsltViewResolver.setSourceKey("xmlSource");
xsltViewResolver.setViewClass(XsltView.class);
xsltViewResolver.setViewNames(new String[] {"show"});
xsltViewResolver.setPrefix("templates/");
xsltViewResolver.setSuffix(".xsl");
return xsltViewResolver;
}
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
if (!registry.hasMappingForPattern("/webjars/**")) {
registry.addResourceHandler("/webjars/**").addResourceLocations(
"classpath:/META-INF/resources/webjars/");
}
if (!registry.hasMappingForPattern("/**")) {
registry.addResourceHandler("/**").addResourceLocations(
CLASSPATH_RESOURCE_LOCATIONS);
}
}
}
我试图从controller重定向到xsl模板,如下所示:
@RequestMapping(value="/form", method=RequestMethod.POST, params="action=show")
public ModelAndView show(@ModelAttribute Team team) throws MarshalException {
Source source = new StreamSource(new ByteArrayInputStream(xmlService.getXmlStream(team).toByteArray()));
// adds the XML source file to the model so the XsltView can detect
ModelAndView model = new ModelAndView("show");
model.addObject("xmlSource", source);
return model;
}
这就是我的项目文件的外观。
如果您能给我一些建议,我将不胜感激。谢谢如果您使用的是spring boot,则无需提及任何配置设置,如TemplateMode、前缀、后缀等。spring boot会根据默认设置自动配置模板。 不要在@configuration class或application.properties文件中提及任何配置。
试试这个,它对我有用。将前缀更改为
classpath:/templates/
。另外,为什么要手动配置百里香叶,并禁用SpringBootWebMVC自动配置?我建议删除百里香叶配置并删除@EnableWebMvc
,因为spring boot已经为您配置了所有这些。这些都是我尝试使其正常工作后留下的,classpath:/templates/
非常有魅力,谢谢:)