报错:would dispatch back to the current handler URL [xxx] again
表示控制器返回视图给模板引擎,模板引擎没有找到对应的模板。控制器又再度拦截了请求。发生死循环

将Freemarker的模板根路径配置到,jar包同目录
spring.freemarker.template-loader-path=/
给模板引擎 指定多路径
通常不使用,性能不好,毕竟要多匹配一次
//未模板引擎 指定多路径
@Bean
public FreeMarkerConfigurer freeMarkerConfigurer(){
FreeMarkerConfigurer configurer = new FreeMarkerConfigurer();
configurer.setTemplateLoaderPaths("/","classpath:/templates/");
return configurer;
}
addResourceHandlers
定义的是控制器的资源路径,即直接转发,不经过模板引擎的请求
request.getRequestDispatcher("/1.html").forward(request,response);
直接转发性能更好,不经过模板引擎性能差一倍左右
调用其它Servlet处理请求
//初始化默认servlet
RequestDispatcher requestDispatcher = sce.getServletContext().getNamedDispatcher("default");
GlobalConfig.defaultServlet = requestDispatcher;
try {
//使用默认servlet完成转发
GlobalConfig.defaultServlet.forward(request,response);
} catch (Exception e) {
log.error("转发资源失败【"+url+"】");
throw new RuntimeException("转发资源失败【"+url+"】");
}
启用Tomcat默认的Servlet
1.配置文件的形式
server.servlet.register-default-servlet=true
2.继承DefaultServlet

本文探讨了在Spring框架中遇到的模板引擎找不到对应模板导致的死循环问题。讲解了如何配置Freemarker的模板根路径,以及设置多个模板加载路径的影响。同时,提到了使用`addResourceHandlers`定义控制器资源路径直接转发的方式,对比了直接转发与模板引擎的性能差异。此外,还介绍了如何启用和配置Tomcat的默认Servlet,确保请求正确处理。
20万+

被折叠的 条评论
为什么被折叠?



