在没有请求映射的情况下在Spring和Thymeleaf中提供html文件

时间:2015-01-01 22:35:09

标签: java html spring thymeleaf static-html

我遇到了我的映射问题。我有一个模板解析器,它具有以下配置:

    @Bean(name="templateResolver")
    public ServletContextTemplateResolver getServletContextTemplateResolver() {
        ServletContextTemplateResolver templateResolver = new ServletContextTemplateResolver();
        templateResolver.setPrefix("/WEB-INF/views/");
        templateResolver.setSuffix(".html");
        templateResolver.setTemplateMode("HTML5");
        templateResolver.setCharacterEncoding("UTF-8");
        templateResolver.setCacheable(false);
        return templateResolver;
    }

    @Bean(name="templateEngine")
    public SpringTemplateEngine getTemplateEngine() {
        SpringTemplateEngine templateEngine = new SpringTemplateEngine();
        templateEngine.setTemplateResolver(getServletContextTemplateResolver());
        return templateEngine;
    }

    @Bean(name="viewResolver")
    public ThymeleafViewResolver getThymeleafViewResolver() {
        ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
        viewResolver.setTemplateEngine(getTemplateEngine());
        viewResolver.setOrder(1);
        viewResolver.setCharacterEncoding("UTF-8");
        return viewResolver;
    }

我有一个项目结构:

-WEB-INF
--views
---home.html
---registration.html

我使用百里香和弹簧4.0。对于家庭,我在我的控制器中添加了以下requestMapping:

@RequestMapping(value = "/", method = RequestMethod.GET)
public String start(Model model) {
    return "home";
}

我没有针对registration.html的请求映射。

在我的home.html中,我有以下链接(百里香锚标记):

        <a href="registration.html" th:href="@{/registration.html}" th:text="#{navigation.registration}">Registration</a>

我已经在/ myapp下的tomcat中绑定了我的应用程序,当我进入/ myapp时,我得到了home.html页面(我有一个请求映射),但是当我进入/myapp/registration.html时,我得到了404.

我必须做什么,在不将每个页面添加到控制器的情况下提供此类静态html文件?可能吗?我试过静态资源,但它没有用。

我还尝试将视图目录级别移动,因此我有结构:

-WEB-INF
-views
--home.html
--registration.html

我能够进入/myapp/views/registration.html,但我无法进入/myapp/registration.html

2 个答案:

答案 0 :(得分:0)

要访问不带控制器的页面(与布局一样),请使用th:substituteby =“path / to / registration”。并尝试它。它将根据请求呈现registration.html。

答案 1 :(得分:0)

您打算在myapp的根目录下获取registration.html是什么意思?您的解决方案是映射这些请求的正常行为。如果要提供静态内容,可以使用以下操作:例如: 用xml:

<mvc:resources mapping="/views/**" location="/views/" />

带有注释和套餐中的其他类:

@Configuration
@EnableWebMvc
public class WebConfig extends WebMvcConfigurerAdapter {
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/views/**").addResourceLocations("/views/");
    }
}

然后你也可以使用你提到的控制器类。静态页面可在/views/yourpage.html下访问。这是与你的/views/registration.html类似的可比解决方案,但是在春天提供静态资源的方法更为方便。