controller freemarker 踩坑小记

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

报错: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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值