0

我的地图有问题。我有一个具有以下配置的模板解析器:

    @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

我正在使用 thymeleaf 和 spring 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

4

2 回答 2

0

要访问没有控制器的页面(就像 Layout 一样),请使用 th:substituteby="path/to/registration" 。并尝试它。它将根据请求呈现registration.html。

于 2015-01-02T14:13:26.583 回答
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 类似的解决方案,但在春季提供静态资源的方式更方便。

于 2015-01-03T10:55:42.657 回答