索引文件如何影响spring mvc项目?

时间:2014-08-28 20:19:06

标签: java spring spring-mvc thymeleaf

我有一个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 {

}

1 个答案:

答案 0 :(得分:0)

当您不使用控制器时,不使用Thymeleaf视图解析器。这意味着浏览器是翻译html文件的浏览器,它更加宽容,并且不需要HTML 5的严格性。在使用Controller时,您将被迫使用Thymeleaf视图解析器。在视图解析器中,您将模板模式设置为HTML5。此外,Thymeleaf要求您使用格式良好的XML,这意味着每个开放标记都需要一个结束标记。阅读Thymeleaf文档的1.2以获得进一步的说明。 http://www.thymeleaf.org/doc/usingthymeleaf.html