JSP和Servlet生命周期方法

如果JSP变成Servlet,为什么有不同的生命周期方法,例如jspInit()init()

我将尝试以最简单的方式正确解释它(作为正确的@Nathan Hughes答案的补充):

从HTML vs JAVA代码的角度来看,servlet更像是用JAVA包装的HTML。 它为处理多层体系结构中的应用程序层提供了强有力的支持。 另一方面,创建JSP以支持表示层的创建。 在初始化servlet期间,servletinit()方法只被调用一次。

所以第一点:Servlets在JSP之前就在这里。

现在来到JSP。 再次从HTML和JAVA的角度来看,JSP更像是用HTML包装的JAVA。

WEB CONTAINER执行JSP“源代码”到等效Servlet Java代码的转换。 然后编译这个翻译的java Servlet源代码, WEB CONTAINER处理Servlet的实现。 只是:

MyPage.jsp – >(翻译) – > MyPage_jsp.java – >(编译) – > MyPage_jsp.class – >(加载) – > Java Servlet

作为JSP生命周期初始化阶段的一部分,WEB CONTAINER调用jspInit()方法

所以对你的问题: jspInit() 不等于 init()

存在与servlet init方法分离的jspInit的原因之一是用于实现JSP的servlet(由实现servlet容器的开发人员创建),另一个用于JSP代码(由应用程序开发人员使用)。 如果JSP使用init方法,它可以覆盖servlet实现正在做的任何事情。 使用单独的方法,JSP实现者可以从jspInit获取代码并将其添加到生成的servlet的init方法中。