SpringBoot+内嵌tomcat+jsp 实现修改jsp无需重启

发布于:2025-02-25 ⋅ 阅读:(13) ⋅ 点赞:(0)

springboot 项目中使用jsp需要在pom中加入下面这个依赖

<dependency>
    <groupId>org.apache.tomcat.embed</groupId>
    <artifactId>tomcat-embed-jasper</artifactId>
</dependency>

开发环境使用,生产环境慎用

找到类org.apache.jasper.servlet.JspServlet 给

1.在项目里面创建包路径org.apache.jasper.servlet

2.找到org.apache.jasper.servlet.JspServlet类,给里面的代码都拷贝出来

3.找到serviceJspFile方法进行如下改造:

 注释上面的wrapper 缓存逻辑,每次进入的时候都直接创建

  private void serviceJspFile(HttpServletRequest request,
                                HttpServletResponse response, String jspUri,
                                boolean precompile)
        throws ServletException, IOException {

//        JspServletWrapper wrapper = rctxt.getWrapper(jspUri);
//        if (wrapper == null) {
//            synchronized(this) {
//                wrapper = rctxt.getWrapper(jspUri);
//                if (wrapper == null) {
//                    // Check if the requested JSP page exists, to avoid
//                    // creating unnecessary directories and files.
//                    if (null == context.getResource(jspUri)) {
//                        handleMissingResource(request, response, jspUri);
//                        return;
//                    }
//                    wrapper = new JspServletWrapper(config, options, jspUri,
//                                                    rctxt);
//                    rctxt.addWrapper(jspUri,wrapper);
//                }
//            }
//        }
    JspServletWrapper wrapper = new JspServletWrapper(config, options, jspUri,
                                                    rctxt);
        try {
            wrapper.service(request, response, precompile);
        } catch (FileNotFoundException fnfe) {
            handleMissingResource(request, response, jspUri);
        }

    }