JSP和Servlet生命周期方法
如果JSP变成Servlet,为什么有不同的生命周期方法,例如jspInit()
和init()
?
我将尝试以最简单的方式正确解释它(作为正确的@Nathan Hughes答案的补充):
从HTML vs JAVA代码的角度来看,servlet更像是用JAVA包装的HTML。 它为处理多层体系结构中的应用程序层提供了强有力的支持。 另一方面,创建JSP以支持表示层的创建。 在初始化servlet期间,servlet的init()
方法只被调用一次。
所以第一点: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
方法中。