Skip to main content
 首页 » 编程设计

spring-boot之解析模板 "index"时出错,模板可能不存在或可能无法被任何已配置的模板解析器访问

2024年12月31日20me-sa

之前有人问过这个问题,但我没有解决我的问题,而且我得到了一些奇怪的功能。
如果我把我的 index.html静态目录中的文件,如下所示:

我在浏览器中收到以下错误:

在我的控制台中:

[THYMELEAF][http-nio-8080-exec-3] Exception processing template "login":  
Exception parsing document: template="login", line 6 - column 3 
2015-08-11 16:09:07.922 ERROR 5756 --- [nio-8080-exec-3] o.a.c.c.C.[.[.[/]. 
[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet]  
in context with path [] threw exception [Request processing failed; nested  
exception is org.thymeleaf.exceptions.TemplateInputException: Exception  
parsing document: template="login", line 6 - column 3] with root cause 
 
org.xml.sax.SAXParseException: The element type "meta" must be terminated by  
the matching end-tag "</meta>". 
但是,如果我将 index.html 文件移动到模板目录中,我的浏览器会出现以下错误:


我添加了我的 View 解析器:
@Controller 
@EnableWebMvc 
public class WebController extends WebMvcConfigurerAdapter { 
 
    @Override 
    public void addViewControllers(ViewControllerRegistry registry) { 
        registry.addViewController("/index").setViewName("index"); 
        registry.addViewController("/results").setViewName("results"); 
        registry.addViewController("/login").setViewName("login"); 
        registry.addViewController("/form").setViewName("form"); 
    } 
 
    @RequestMapping(value="/", method = RequestMethod.GET) 
    public String getHomePage(){ 
        return "index"; 
    } 
 
    @RequestMapping(value="/form", method=RequestMethod.GET) 
    public String showForm(Person person) { 
        return "form"; 
    } 
 
    @RequestMapping(value="/form", method=RequestMethod.POST) 
    public String checkPersonInfo(@Valid Person person, BindingResult bindingResult) { 
 
        if (bindingResult.hasErrors()) { 
            return "form"; 
        } 
        return "redirect:/results"; 
    } 
 
    @Bean 
    public ViewResolver getViewResolver() { 
        InternalResourceViewResolver resolver = new InternalResourceViewResolver(); 
        resolver.setPrefix("templates/"); 
        //resolver.setSuffix(".html"); 
        return resolver; 
    } 
 
    @Override 
    public void configureDefaultServletHandling( 
            DefaultServletHandlerConfigurer configurer) { 
        configurer.enable(); 
    } 
 
} 
网络安全配置文件
@Configuration 
@EnableWebMvcSecurity 
public class WebSecurityConfig extends WebSecurityConfigurerAdapter { 
 
    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
        http 
                .authorizeRequests() 
                .antMatchers("/", "/index").permitAll() 
                .anyRequest().authenticated() 
                .and() 
                .formLogin() 
               .loginPage("/login") 
                .permitAll() 
                .and() 
                .logout() 
                .permitAll(); 
    } 
 
    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
        auth 
                .inMemoryAuthentication() 
                .withUser("user").password("password").roles("USER"); 
    } 
} 
索引.html
<!DOCTYPE html> 
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"> 
<meta> 
    <meta> charset="UTF-8"> 
    <title></title> 
</head> 
<body> 
 
<h1>Welcome</h1> 
 
<a href="../../login.html"><span>Click here to move to the next page</span></a> 
 
</body> 
 
</html> 
此时我不知道发生了什么。谁能给我一些建议?
更新
我在 index.html 中遗漏了一个错字,但我仍然遇到相同的错误
<!DOCTYPE html> 
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"> 
<head> 
    <meta> charset="UTF-8"> 
    <title></title> 
</head> 
<body> 
 
<h1>Welcome</h1> 
 
<a href="../../login.html"><span>Click here to move to the next page</span></a> 
 
</body> 
 
</html> 

请您参考如下方法:

在控制台中告诉您这是与登录冲突。我认为你也应该在 index.html 中声明 thymeleaf 。就像是:

<html xmlns="http://www.w3.org/1999/xhtml"  
    xmlns:th="http://www.thymeleaf.org"  
    xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3" 
    xmlns:layout="http://www.ultraq.net.nz/thymeleaf/layout"> 
     
<head> 
<meta charset="utf-8" /> 
<meta http-equiv="X-UA-Compatible" content="IE=edge" /> 
<title>k</title>  
</head>