当JSP执行完成时,是否会对在JSP页面中声明的所有变量进行垃圾回收?如果我在JSP中声明了许多占用内存的Hashtable,并且在JSP执行完成之前没有将变量设置为null,那么即使JSP执行完成后,对象是否仍然留在内存中?
(我没有将它们存储在持久变量中,例如session。只是在本地变量中。)
(我没有将它们存储在持久变量中,例如session。只是在本地变量中。)
当JSP页面的作用域未设置为会话时,JSP引擎在执行完成后会将其从内存中移除。然而,为了避免内存泄漏,您应该使用jspDestroy()方法释放内存。
如果您想准确了解 JSP 翻译成 Java 逻辑代码的内容,可以使用 Jasper 生成代码。(不同的 JSP 引擎可能会生成不同的输出,但变量范围等应符合规范。)您需要 Tomcat 和 Ant。
此示例批处理脚本将 test.jsp 的 Java 代码生成到 output 目录中:
@ECHO OFF
SETLOCAL EnableDelayedExpansion
SET ANT_HOME=C:\dev\apache-ant-1.7.1
SET TOMCAT_HOME=C:\Program Files\Apache Software Foundation\Tomcat 6.0
SET CLASSPATH="
FOR /r "%TOMCAT_HOME%\bin\" %%a IN (*.jar) DO SET CLASSPATH=!CLASSPATH!;%%a
FOR /r "%TOMCAT_HOME%\lib\" %%a IN (*.jar) DO SET CLASSPATH=!CLASSPATH!;%%a
SET CLASSPATH=!CLASSPATH!;%ANT_HOME%\lib\ant.jar"
MKDIR output
java org.apache.jasper.JspC -d .\output -webapp .\WebContent test.jsp
WebContent 是 Web 应用程序的根目录。生成的代码是一个 Servlet,将按照规范中定义的 Servlet 生命周期进行操作。