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代码发送给客户端,因而我们看到客户端的代码与服务器的代码是不同的。