如果JSP变成Servlet,为什么有不同的生命周期方法,例如jspInit()
和init()
?
答案 0 :(得分:3)
与servlet jspInit
方法分离的init
的原因之一是实现JSP的servlet(由实现servlet容器的开发人员创建),另一个用于JSP代码(由应用程序开发人员使用)。如果JSP使用init方法,它可以覆盖servlet实现正在做的任何事情。使用单独的方法,JSP实现者可以从jspInit
获取代码并将其添加到生成的servlet的init
方法中。
答案 1 :(得分:2)
我会尝试以最简单的方式正确解释它(作为正确的@Nathan Hughes答案的补充):
从HTML与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容器调用jspInit()
方法。
那么问你的问题:jspInit()
不等于 init()
。