我遇到了我的映射问题。我有一个模板解析器,它具有以下配置:
@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
答案 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类似的可比解决方案,但是在春天提供静态资源的方法更为方便。