Java后台之路(12)-JSP

来源:互联网 发布:如何恢复手机数据恢复 编辑:程序博客网 时间:2024/06/14 02:05

JSP简介及原理

JSP同样是由SUN公司定义的一种用于开发动态Web的技术。JSP最大的特点就是像写HTML一样,但不仅仅像HTML那样是静态的,JSP是动态的,它允许开发人员在HTML中插入Java代码为用户提供动态数据,所以这样认为JPS=HTML+Java。

我们应该有这样的问题?

  • 浏览器访问jsp页面时web服务器如何调用并执行一个jsp页面?
  • web服务器如何将jsp中的html标签发送给客户端?
  • web如何执行jsp中的java代码?

我们带着这些疑问来探讨一下jsp吧。

jsp之所以可以被web服务器执行并且返回给客户端,是因为jsp本质上就是servlet。为什么这么说呢?首先我们新建一个项目,index.jsp在Tomcat下可以看到,index.jsp文件被转换成了两个文件,index_jsp.class和index_jsp.java,我们查看.java文件可以知道这个类继承自HttpJspBase,而HttpJspBase又继承自HttpServlet,从而可以知道jsp文件运行时本质上就是Servlet。


JSP生命周期

1. JSP编译

当浏览器请求这个页面的时候,jsp引擎首先去检查是否需要编译这个文件,如果该文件没有被编译过或者编译过之后改变了,那么会重新编译jsp文件。
编译的三个步骤:解析jsp文件、将jsp文件转换为servlet、编译servlet。

2. JSP初始化

容器载入jsp文件后,会在请求之前调用jspInit()方法,所以如果我们需要执行自定义jsp文件的初始化任务时,只需要重写jspInit()方法即可。

public void jspInit(){}

和Servlet一样,jsp也只初始化一次,所以我们一般在此操作初始化数据库连接、打开文件、创建表等操作。

3. JSP执行

一个客户端请求,就会执行一次_jspService()方法。

public void _jspService(HttpServletRequest request,                        HttpServletRespone respone){}

_jspService()方法在每个request中被调用一次并且负责产生与之相对应的response,并且它还负责产生所有7个HTTP方法的回应,比如GET、POST、DELETE等等。

4. JSP清理

JSP生命周期的销毁阶段描述了当一个JSP网页从容器中被移除时所发生的一切。
jspDestroy()方法在JSP中等价于servlet中的销毁方法。当您需要执行任何清理工作时复写jspDestroy()方法,比如释放数据库连接或者关闭文件夹等等。

public void jspDestroy(){}

我们结合jsp的生命周期写一个简单的jsp示例。

<%@ page language="java" contentType="text/html; charset=UTF-8"    pageEncoding="UTF-8"%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html>  <head>    <title>index.jsp</title>  </head>  <body>  <%!    private int iCount = 0;    // 初始化次数    private int sCount = 0;    // 请求次数    private int dCount = 0;    // 销毁次数   %>   <%!    public void jspInit(){        iCount++;        System.out.println("jspInit()执行了" + iCount + "次");    }    public void jspDestroy(){        dCount++;        System.out.println("jspDestroy()执行了" + dCount + "次");    }    %>   <%    sCount++;    System.out.println("jspService()执行了" + sCount + "次");    String content1 = "初始化了" + iCount + "次";    String content2 = "响应客户端请求" + sCount + "次";    String content3 = "销毁次数" + dCount + "次";    %>   <h1>简单jsp示例</h1>   <p><%=content1 %></p>   <p><%=content2 %></p>   <p><%=content3 %></p>  </body></html>

执行结果如下,F5每刷新一次sCount的次数就增加一次:

这里写图片描述


原创粉丝点击