JSP简介
JSP(Java Server Pages)一种Java servlet,主要实现Java
web应用程序的用户界面部分。标签通常以<%开头 以%>结束。
JSP是一种Java servlet,主要实现Java
web应用程序的用户界面部分,结合HTML、XML元素来编写。
JSP可以通过网页获取用户输入数据、访问数据库以及其它数据源,然后动态创建网页。
JSP与JavaScript相比,JavaScript很难与服务器交互,所以不能提供复杂的服务(访问数据库、图像处理)。
JSP结构
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AeBU60ul-1617925538821)(media/0fe4da520f46d487e238fc6250130adb.png)]
网络服务器需要一个JSP引擎(容器)来处理来自客户端的JSP页面的请求。
JSP处理流程
浏览器发送一个HTTP请求给服务器。
web服务器识别出这是一个对JSP网页的请求,将该请求交给服务器的JSP容器来处理。
JSP容器从磁盘中载入JSP文件,然后将其转换为Servlet,并且将所有的JSP元素转换成Java代码。
JSP容器将Servlet编译成可执行的类,并且将原始请求传递给Servlet引擎。
web服务器某组件会调用Servlet引擎,然后载入并执行Servlet类。之后Servlet产生HTML格式的输出嵌入HTTP
response中交给服务器。
web服务器以静态HTML网页形式将HTTP response返回给浏览器。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vnW26gLm-1617925538827)(media/8d400a1d79bf769296a3f586a292215e.png)]
JSP生命周期
JSP生命周期就是从创建到销毁的过程:1.编译阶段:servlet容器编译servlet源文件;2.初始化阶段:加载JSP对应的servlet类,创建实例,并调用方法;3.执行阶段:调用JSP对应的servlet实例的服务器方法;4.销毁阶段:调用与JSp对应的servlet销毁方法,然后销毁实例。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D7nPj02U-1617925538830)(media/ec3b3ae43f0928b39bdde49e0e3538ac.png)]
JSP编译:当浏览器请求JSP页面时,JSP容器会检查是否要编译这个页面,如果这个文件没有编译过或者上次编译被修改过,那么就会编译这个文件。
编译步骤:
1.解析JSP文件
2.将JSP文件转换为servlet
3.编译servlet
JSP初始化:容器载入JSP文件后,JSP容器调用jspInit方法。如果需要自行执行自定义的JSP初始化任务,则覆盖jspInit()方法就可以了。
public void jspInit( ){
//初始化代码
//可以初始化数据库连接,打开文件和创建查询
}
JSP执行:JSP容器将会调用_jspService()方法,该方法需要一个HttpServletReques对象和一个HttpServletResponse对象作为参数。
void _jspService(HttpServletReques a, HttpServletResponse b){
//服务器处理代码
}
JSP清理:JSP网页从容器中被移除,调用jspDestroy()方法等价于servlet中的销毁方法,你也可以自定义覆盖该方法。
public void jspDestory( ){
//清理代码
}
实例:
<%@pagelanguage=」java」contentType=」text/html」;charset=UTF-8」pageEncoding=」UTF-8」%>
<html>
<head>
<title>life.jsp</title>
</head>
<body>
<%!
priavte int initVar=0;
priavte int serviceVar=0;
priavte int destroyVar=0;
%>
<%!
public void jspInit( ){
initVar++;
System.out.println(「jspInit( ):JSP被初始化了」+initVar+」次」);
}
public void jspDestroy( ){
destroyVar++;
System.out.println(「jspDestroy( ):JSP销毁了」+destroy+」次」);
}
%>
<%
serviceVar++;
System.out.println(「_jspService():JSP共响应了」+serviecVar+」次请求」);
String content1=」初始化次数:」+initVar;
String content2=」响应客户请求次数:」+serviceVar;