jsp是如何工作的?

2022-09-01 18:02:31

我想知道JSP是否被编译过?我之所以问这个问题,是因为每当我在Web服务器上部署我的Java EE应用程序时,我只在编译时在WEB-INF文件夹中看到那些servlet和beans类文件,而不是JSP,所以它是如何工作的,以及逻辑流和正常请求/响应周期的大局是什么。


答案 1

基本上:

  • 在 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容器的工作目录中,所以它是“不可见的”。还要记住,这是“概念上”发生的事情,在这个工作流程中可以进行一些优化。


答案 2

是的,它们是编译的!

较旧的编译器甚至生成java和类文件。

看起来使用较新的编译器(至少从Sun JDK 6 update 30开始),它们可以在内存中执行所有字节码生成,因此您在应用程序或目录中看不到任何痕迹。worktemp