1.3 JSP的运行机制

JSP是服务器端技术,在服务器端,JSP引擎解释并执行JSP页面的代码,然后将执行结果以HTML或XML页面的形式发送给客户端,而在客户端却看不到JSP页面本身的代码,只能看到JSP页面执行后的输出结果。下面通过具体的实例来说明JSP的运行机制。

●首先新建一个Web项目,项目名为“Hello World”,具体新建Web工程的方法请查看第1.6.2节常用操作中的“新建项目”内容。

●修改WebRoot目录下的文件,查找到如下代码。

<body>
  This is my JSP page. <br>
</body>

将以上代码修改如下内容。

<body>
  <%out.println("Hello World!");%>
</body>

●最后把“Hello World!”项目打包发布(如何打包发布,请查看第1.7节打包和部署的相关内容),我们会看到如图1.1所示的结果。

图1.1 打包发布后运行结果

我们可以看到输出结果“Hello World!”,其中“<%”和“%>”中的部分为Java语言代码(服务器端的),而不是静态内容。通过这种方式就可以把Java代码嵌入到HTML页面中,并变成了动态的JSP页面。而我们查看客户端的index.jsp时,可以看到以下内容。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="http://localhost:8080/HelloWorld/">
<title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
   Hello World!
</body>
</html>

从表面上分析,JSP页面已经不再需要Java类,但实现上JSP是Servlet的一种特殊形式,每个JSP页面都相当于一个Servlet的实例。因为Web项目中每个JSP页面首先都会由Servlet容器生成对应的Servlet类,这样才能被服务器响应给客户端。JSP具体的运行机制如图1.2所示。

图1.2 JSP运行机制

图1.2所示的JSP流程如下。

■客户端(client)访问相应的JSP页面,并将访问请求发送到服务器端(Server)。

■服务器端接收到以“*.jsp”为扩展名的HTTP请求后,将这个请求交给一个JSP引擎,这个引擎是一个由Tomcat所提供的Servlet程序(org.apache.jsper.servlet.JspServlet)。

■当一个JSP页面第一次被访问时,JSP引擎会把该页面翻译成为一个Servlet源程序,再把这个源程序编译为“*.class”文件。

■最后,服务器将class文件交由Servlet容器加载到内存并执行,然后将执行后的HTML代码发送给客户端,因而我们看到客户端的代码与服务器的代码是不同的。