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开始),它们可以在内存中执行所有字节码生成,因此您在应用程序或目录中看不到任何痕迹。work
temp