我想知道JSP是否曾经编译过吗?我之所以要问的原因是因为每当我在Web服务器上部署Java EE应用程序时,在编译时,它们只会在WEB- INF文件夹中看到那些servlet和bean类文件,但看不到JSP,因此它是如何工作的,正常的请求/响应周期的逻辑流程和概况如何?
基本上:
在您的Servlet容器中,JSP Servlet映射到任何以.jsp(通常)结尾的URL
.jsp
当.jsp请求这些URL 之一时,请求将转到JSP servlet。然后,该servlet检查JSP是否已经编译。
如果尚未编译JSP,则JSP Servlet会将JSP转换为实现该Servlet接口的某些Java源代码。然后,它将此Java源代码编译为.class文件。该.class文件通常位于该应用程序的servlet容器的工作目录中的某个位置。
Servlet
.class
一旦JSP servlet从JSP源代码编译了servlet类,它就将请求转发到该servlet类。
关键是,除非您专门预编译JSP,否则所有这些操作都将在运行时发生,并隐藏在servlet容器的工作目录中,因此它是“不可见的”。还请记住,这是“概念上”发生的事情,在此工作流程中可以进行几种优化。