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的次数就增加一次:
- Java后台之路(12)-JSP
- Java后台之路(13)-JSP
- Java后台之路(14)-JSP
- java web之路 jsp jsp:setProperty
- 后台之路(一):java基础回顾
- Java后台之路(04)-JDBC
- Java后台之路(01)-MySql
- Java后台之路(02)-MySql
- Java后台之路(03)-MySql
- Java后台之路(05)-XML
- Java后台之路(06)-Tomcat
- Java后台之路(08)-Servlet
- Java后台之路(07)-HTTP
- Java后台之路(09)-Servlet
- Java后台之路(10)-Cookie
- Java后台之路(11)-HttpSession
- Java后台之路(17)-AJAX、Listener
- Java后台之路(18)-MyBatis
- GitHub中Java项目导入eclipse报错selection cannot be launched
- 调试时报错Thread::Current() != GetDebugThread()
- 新版SunlightDB发布: 当区块链遇到数据库
- 【Ubuntu】命令行安装deb安装包
- 2017-06-13共享时出现错误,没有启动服务器服务,此时尚未创建共享资源”的解决办法
- Java后台之路(12)-JSP
- 【Netty入门】Netty的线程模型
- c++真狗屎系列:char *str = "abcde"; 与 char str[] ="abcde"; 有何区别?
- 安装python 神经网络环境总结
- sql查询近期记录问题
- Tomcat7_控制台日志输出到文件
- JAVA布局模式:GridBagConstraints
- 线程等待和启动相关
- kotlin基础