jsp文件是如何运行的原理?

    技术2025-09-17  6

    第一步:

    HTTP服务器将jsp文件内容【编辑】为一个Servlet接口的实现类,因为HTTP规范中,服务器能调用的动态资源文件必须是一个Servlet接口的实现类。

    第二步:

    HTTP服务器将Servlet接口实现类编译为class文件。(.calss)

    第三步:

    HTTP服务器负责创建这个class的实例对象,这个实例对象就是Servlet实例对象。

    第四步:

    HTTP服务器通过这个Servlet实例对象调用_jspServlet这个方法,将jsp文件内容写入到响应体中。

    那么HTTP服务器【编辑】和【编译】jsp文件所产生的文件在哪里呢?

    以windows为例: 然后访问响应的JSP地址,会动态生成到这个路径下面,然后进去org\apache\jsp 下面的work文件夹 打开就可以看到了! 我们如果要验证这个执行的流程,可以将Java文件拖入到idea中,事实上,你会发现Tomcat生成的这个index.jsp.java类是继承HttpJspBase这个类。这个时候就会有小伙伴出现了疑问,不是说HTTP服务器能调用的动态资源文件必须是一个Servlet接口的实现类吗? 为什么这里只是继承一个类?

    其实是这个样子的,先上图: 大家可以看到这个类首先是一个抽象类,然后它继承HttpServlet,HttpServlet又是GenericServlet的一个子类,GenericServlet最终实现了Servlet接口。

    // 随便拿一个Servlet类举例,首先它是继承HttpServlet public class OneServlet extends HttpServlet { ...... } // HttpServlet又继承GenericServlet public abstract class HttpServlet extends GenericServlet { ...... } // GenericServlet最终实现了Servlet接口 public abstract class GenericServlet implements Servlet, ServletConfig, Serializable { ...... }

    打消疑问后,你就可以看看这个类是如何将jsp文件的内容写入到响应体里,然后在交给浏览器展示。

    Processed: 0.010, SQL: 9