目录

1.1 概述
  1.1.1 什么是 JSP? 
  1.1.2 JSP 的优点 
1.2 工作原理
  1.2.1 JSP 和 Servlet的区别 
  1.2.2 JSP 工作原理 
1.3 生命周期
参考资料

1.1 概述

1.1.1 什么是 JSP?

JSP 全称是 Java Server Pages,是一种动态网页开发技术
它与 PHP、ASP、ASP.NET 等语言类似,运行在服务端的语言。
JSP 是一种 Java Servlet,主要用于实现 Java Web 应用程序的用户界面部分。

JSP 技术以 Java 语言作为脚本,它使用JSP标签在HTML网页中插入Java代码。标签通常以<%开头以%>结束。 

JSP文件后缀名为(*.jsp)。
JSP开发的WEB应用可以跨平台使用,既可以运行在Linux上也能运行在Window上。 

1.1.2 JSP 的优点

与 ASP 相比:

动态部分用 Java 编写,所以更加强大易用
可以移植到多种不同的服务器和操作系统

与 PHP 相比:

更好的工具支持

与 Servlet 相比:

创建 HTML 更方便

与 Javascript 相比:

虽然JavaScript可以在客户端动态生成HTML,但是很难与服务器交互,因此不能提供复杂的服务,比如访问数据库和图像处理等等。

1.2 工作原理

1.2.1 JSP 和 Servlet的区别

JSP 是一种 Servlet,但是它与 HttpServlet 的工作方式不太一样:

HttpServlet 是先编译后部署:先将源代码编译为 class 文件,然后部署到服务器下
JSP 是先部署后编译:先部署代码,然后编译为 class 文件。JSP 会在客户端第一次请求 JSP 文件时被编译为 HttpJspPage 类。该类会被服务器临时存放在服务器工作目录里面。

由于 JSP 只在客户端第一次请求时被编译,所以第一次请求 JSP 时会感觉比较慢。

1.2.2 JSP 工作原理

以下步骤表明了Web服务器是如何使用JSP来创建网页的:
就像其他普通的网页一样,您的浏览器发送一个HTTP请求给服务器。
Web服务器识别出这是一个对JSP网页的请求,并且将该请求传递给JSP引擎。通过使用URL或者.jsp文件来完成。
JSP引擎从磁盘中载入JSP文件,然后将它们转化为servlet。这种转化只是简单地将所有模板文本改用println()语句,并且将所有的JSP元素转化成Java代码。
JSP引擎将servlet编译成可执行类,并且将原始请求传递给servlet引擎。
Web服务器的某组件将会调用servlet引擎,然后载入并执行servlet类。在执行过程中,servlet产生HTML格式的输出并将其内嵌于HTTP response中上交给Web服务器。
Web服务器以静态HTML网页的形式将HTTP response返回到您的浏览器中。
最终,Web浏览器处理HTTP response中动态产生的HTML网页,就好像在处理静态网页一样。

以上提及到的步骤可以用下图来表示:

1.3 生命周期

JSP 也是一种 Servlet,运行时只有一个实例,它也有生命周期。

以下是JSP生命周期中所走过的几个阶段:

编译阶段:servlet容器编译servlet源文件,生成servlet类
初始化阶段:加载与JSP对应的servlet类,创建其实例,并调用它的初始化方法
执行阶段:调用与JSP对应的servlet实例的服务方法
销毁阶段:调用与JSP对应的servlet实例的销毁方法,然后销毁servlet实例

很明显,JSP生命周期的四个主要阶段和servlet生命周期非常相似,下面给出图示: 

JSP生命周期代码实例

[JSP]JSP 简介-编程之家
<%@ page contentType=”text/html; charset=GB2312″ %>
<html><head><title>life.jsp</title></head><body>

<%! 
  private int initVar=0;
  private int serviceVar=0;
  private int destroyVar=0;
%>
  
<%!
  public void jspInit(){
    initVar++;
    System.out.println(“jspInit(): JSP被初始化了”+initVar+”次”);
  }
  public void jspDestroy(){
    destroyVar++;
    System.out.println(“jspDestroy(): JSP被销毁了”+destroyVar+”次”);
  }
%>

<%
  serviceVar++;
  System.out.println(“_jspService(): JSP共响应了”+serviceVar+”次请求”);

  String content1=”初始化次数 : “+initVar;
  String content2=”响应客户请求次数 : “+serviceVar;
  String content3=”销毁次数 : “+destroyVar;
%>

<h1><%=content1 %></h1>
<h1><%=content2 %></h1>
<h1><%=content3 %></h1>

</body></html>
复制代码

参考资料

Java Web 整合开发

http://www.w3cschool.cc/jsp/jsp-tutorial.html