我有一个spring mvc web应用程序项目,我正在使用spring工具套件,我正在使用maven添加我的依赖项和thymeleaf来查看我的视图。
我的项目是基于代码的方法配置的,我没有xml文件。
"我没有您可以使用"
配置的默认页面<welcome-file-list>
<welcome-file></welcome-file>
</welcome-file-list>
我的webapp文件夹中有一个index.html文件,我的所有css,js,ajax文件夹都在那里,我没有使用web-inf文件夹来放置我的.html文件
我的问题是,当我把这个网址http://localhost:8080/myapp/
时,我的应用程序应该转到该控制器负责的页面
@RequestMapping(value = "/")
public String home() {
logger.info("***HOME***");
return "home.jsp";
}
但它转到我的index.html页面而不是转到home.jsp,如果我为我的index.html页面创建一个这样的控制器
@RequestMapping(value = "/index")
public String showIndex() {
logger.info("***INDEX***");
return "index.html";
}
给了我以下错误:
&#34; HTTP 500 - 请求处理失败;嵌套异常是org.thymeleaf.exceptions.TemplateInputException:异常解析文档:template =&#34; index.html&#34;,第56行 - 第4列&#34;
我认为这个错误是因为我正在使用百日咳,并且在该行中我打开了<img>
标签而没有关闭</img>
标签。
我的问题是为什么我的index.html页面工作如果我不创建一个控制器并且它工作很精细,但如果我创建一个控制器,我想这样做不行。
我的配置类中只有一个viewResolver,并且是一个百里香视图解析器,如果我只有一个解析器,这个index.html如何显示没有问题
这是我的配置类
@EnableWebMvc
@ComponentScan(basePackages = {"com.abc.myapp"})
@Configuration
public class ConfigApp extends WebMvcConfigurerAdapter{
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
configurer.enable();
}
@Bean
public ServletContextTemplateResolver templateResolver() {
ServletContextTemplateResolver resolver = new ServletContextTemplateResolver();
resolver.setPrefix("/");
// resolver.setSuffix(".html");
resolver.setTemplateMode("HTML5");
resolver.setOrder(1);
resolver.setCacheable(false);
return resolver;
}
@Bean
public MessageSource messageSource() {
ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
messageSource.setBasenames("classpath:messages/messages");
messageSource.setUseCodeAsDefaultMessage(true);
messageSource.setDefaultEncoding("UTF-8");
messageSource.setCacheSeconds(0);// # -1 : never reload, 0 always reload
return messageSource;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine engine = new SpringTemplateEngine();
engine.setTemplateResolver(templateResolver());
engine.setMessageSource(messageSource());
return engine;
}
@Bean
public ThymeleafViewResolver thymeleafViewResolver() {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine());
resolver.setCache(false);
return resolver;
}
这是我的webInitializer类
public class InitiaApp extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { ConfigRoot.class };
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { ConfigApp .class };
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
和我的configRoot类
@Configuration
public class ConfiguracionRoot {
}
答案 0 :(得分:0)
当您不使用控制器时,不使用Thymeleaf视图解析器。这意味着浏览器是翻译html文件的浏览器,它更加宽容,并且不需要HTML 5的严格性。在使用Controller时,您将被迫使用Thymeleaf视图解析器。在视图解析器中,您将模板模式设置为HTML5。此外,Thymeleaf要求您使用格式良好的XML,这意味着每个开放标记都需要一个结束标记。阅读Thymeleaf文档的1.2以获得进一步的说明。 http://www.thymeleaf.org/doc/usingthymeleaf.html