浏览器请求服务器内的JSP文件时,服务器的Servlet容器会在第一次调用这个JSP文件时进行编译。编译完成后,该JSP实际是一个Servlet类,该Servlet产生对应的输出结果,把输出结果发送给Servlet容器,Servlet容器把这些结果以HTML文件形式发送给浏览器。
应注意,Servlet容器会在第一次调用JSP时进行编译,之后这个JSP会存在在内存中,之后再次调用无需编译(除非JSP文件有修改)。这个工作是由JSP引擎完成的。JSP引擎把客户端请求发送给JSP源文件,再把JSP源文件的相应发送给客户端。JSP引擎需要支持HTTP协议。JSP引擎在传递request和response对象之前,会通过JSP源文件创建一个类(Servlet类),并在调用时进行编译。
以下用例子说明:
在Tomcat的webapps下创建jsplearn目录,并创建helloworld.jsp文件。
helloworld.jsp内容如下:
<%@ page language="java" contentType="text/html;charset=utf-8"%>
<%@ page info="a hello wxample"%>
<html>
<head>
<title>理解JSP的原理</title>
</head>
<body>
<center>
<h1>
<%
int times = 10;
for(int i =0;i<times;i++){
out.println("HELLOWORLD");
out.println("<br>");
}
%>
</h1>
</center>
</body>
</html>
启动Tomcat后,访问路径为http://localhost:8080/jsplearn/helloworld.jsp
。
可以在浏览器内看到相应输出。在开发人员工具选项中,可以看到浏览器解析的HTML文件为:
<html>