一、JSP工作原理
JSP文件是一种Servlet,其工作方式是先部署源代码后编译为.class文件。服务端在客户端第一次请求JSP文件的时候被编译成Servlet,由Servlet处理客户端的请求。具体流程如下:
简述下在Intellij Idea中Tomcat项目的工作过程,项目名称为Demo2017:
Intellij Idea在第一此发布Tomcat项目的时候,会在.IntelliJIdea2016.3\system\tomcat文件目录中生成一个tomcat工作目录Tomcat_7_0_73_Demo2017。该目录下包含了conf、logs和work三个目录。
此时客户端第一次访问Tomcat项目中的index.jsp,此时,Tomcat首先会将index.jsp转换成index_jsp.java,并将该文件放入目录:work\Catalina\localhost\
demo2017\org\apache\jsp(demo2017为自己设置的虚拟目录)然后,Tomcat会将index_jsp.java编译生成index_jsp.class,生成Servlet实例。最后返回响应
需要注意的是,JSP只会在客户端第一次请求的时候被编译,因此第一次请求会比较慢,
二、Include指令
语法:
<%@ include file="filepath" %>
Include指令可以在JSP程序中插入多个外部文件(如:JSP\HTML\java程序\甚至是文本)。在转换成Servlet实例之前,include指令会将相应的文件包含进include指令所在文件,最后一并转换成.java为文件,编译生成一个.class文件,一起执行。
Include指令的实际作用是将file所指的文件的Java代码包含进include指令所在的文件的Java代码当中,因此在使用include指令时要注意文件与被包含文件不能定义相同的变量,避免命名冲突。
假设includeCommand.jsp中使用include指令包含了一个date.jsp文件,在work工作目录下,Tomcat会生成一个includeCommand_jsp.java和一个includeCommand_jsp.class文件
三、Include动作
语法:
<jsp:include page="filepath" flush="false"/>
Include动作用于客户端请求时引入指定文件。如果引入的文件是JSP文件,则先编译该JSP文件,然后再把编译结果引入Include动作所在文件。
同样的情况,如果在includeAction.jsp中使用include指令包含一个文件date.jsp,在work工作目录下,Tomcat会生成includeAction_jsp.java、includeAction_jsp.class、date_jsp.java、date_jsp.class
在includeAction_jsp.java中使用
org.apache.jasper.runtime.JspRuntimeLibrary.include(request, response, “date.jsp”, out, false)来引入date.jsp文件。