jsp是如何工作的?
我想知道JSP是否被编译过?我之所以问这个问题,是因为每当我在Web服务器上部署我的Java EE应用程序时,我只在编译时在WEB-INF文件夹中看到那些servlet和beans类文件,而不是JSP,所以它是如何工作的,以及逻辑流和正常请求/响应周期的大局是什么。
我想知道JSP是否被编译过?我之所以问这个问题,是因为每当我在Web服务器上部署我的Java EE应用程序时,我只在编译时在WEB-INF文件夹中看到那些servlet和beans类文件,而不是JSP,所以它是如何工作的,以及逻辑流和正常请求/响应周期的大局是什么。
基本上:
在 servlet 容器中,JSP servlet 映射到以(通常)结尾的任何 URL。.jsp
当请求其中一个 URL 时,该请求将转到 JSP servlet。然后,此 servlet 检查是否已编译 JSP。.jsp
如果尚未编译 JSP,则 JSP servlet 会将 JSP 转换为实现该接口的某个 Java 源代码。然后,它将此 Java 源代码编译为一个文件。此文件通常位于 Servlet 容器的应用程序工作目录中的某个位置。Servlet.class.class
一旦 JSP servlet 从 JSP 源代码编译了 servlet 类,它就只是将请求转发给这个 servlet 类。
问题是,除非你专门预编译你的JSP,否则所有这些都发生在运行时,并隐藏在servlet容器的工作目录中,所以它是“不可见的”。还要记住,这是“概念上”发生的事情,在这个工作流程中可以进行一些优化。
是的,它们是编译的!
较旧的编译器甚至生成java和类文件。
看起来使用较新的编译器(至少从Sun JDK 6 update 30开始),它们可以在内存中执行所有字节码生成,因此您在应用程序或目录中看不到任何痕迹。worktemp