JSP概述
JSP全名是Java Server Pages,它是建立在Servlet规范之上的动态网页开发技术。在JSP文件中,HTML代码与Java代码共同存在,其中,HTML代码用来实现网页 中静态内容的显示,Java代码用来实现网页中动态内容的显示。为了与传统HTML有所区别,JSP文件的扩展名为 .jsp 。
JSP技术所开发的Web应用程序是基于Java语言的,它可以用一种简捷而快速的方法从Java程序生成Web页面,其使用上具有如下几点特征:
-
跨平台:
由于JSP是基于Java语言的,它可以使用Java API,所以它也是跨平台的,可以应用于不同的系统中,如Windows、Linux等。当从一个平台一直到另一个平台时,JSP和JavaBean的代码并不需要重新编译,这是因为Java的字节码时与平台无关的,这也应验了Java语言“一次编译,到处运行” 的特点。 -
业务代码相分离:
在使用JSP技术开发Web应用时,可以将界面的开发与应用程序的开发分离开。开发人员使用HTML来设计界面,使用JSP标签和脚本来动态生成页面上的内容。在服务器端,JSP引擎(或容器)负责解析JSP标签和脚本程序,生成所请求的内容,并将执行结果以HTML页面的形式返回到浏览器。 -
组件重用:
JSP中可以使用JavaBean编写业务组件,也就是使用一个JavaBean封装业务处理代码或者作为一个数据存储模型,在JSP页面中,甚至在整个项目中,都可以重复使用这个JavaBean,同时,JavaBean也可以应用到其他Java应用程序中。 -
预编译:
预编译就是在用户第一次通过浏览器访问JSP也i按时,服务器将对JSP页面代码进行编译,并且仅执行一次编译。编译好的代码将被保存,在用户下一次访问时,会直接执行编译好的代码。这样不仅节约了服务器的CPU资源,还大大的提升了客户端的访问速度。
创建一个HelloWorld.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
My First JSP
</body>
</html>
可以看出,新创建的JSP文件与传统的HTML文件几乎没有什么区别,唯一的区别是默认创建时,页面代码上方多了一条page指令,并且该文件的后缀名是jsp,而不是html。JSP文件必须发布到Web容器中的某个Web应用中才能看出效果。
JSP运行原理
JSP的工作模式是请求/响应模式,客户端首先发出HTTP请求,JSP程序收到请求后进行处理并返回结果。在一个JSP文件第一次被请求时,JSP引擎(容器)把该JSP文件转换成为一个Servlet,而这个引擎本身也是一个Servlet。JSP的运行过程如下图所示。
JSP的运行过程具体如下:
- 客户端发出请求,请求访问JSP文件。
- JSP容器先将JSP文件转换成一个Java源文件(Java Servlet 源程序),在转换过程中,如果发线JSP文件中存在任何语法错误,则中断转换过程,并向服务器和客户都返回出错信息。
- 如果转换成功,则JSP容器将生成的Java源文件编译成相应的字节码文件 *.class 。该 class 文件就是一个Servlet,Servlet容器会像处理其他Servlet一样来处理它。
下面简单介绍一下JSP所生成的Servlet代码:
以HelloWorld.jsp为例,当用户第一次访问HelloWorld.jsp 页面时,该页面会先被JSP容器转换为一个名称为HelloWorld_jsp.java 的源文件,然后将源文件白你以为一个名称为 HelloWorld_jsp.class 字节码文件。
如果项目发布在Tomcat的webapps目录中,源文件和 .class 文件可以在 “Tomcat安装目录/work/Catalina/localhost/项目名/org/appache/jsp“ 下找到,如下图所示:
上图中,地址栏的路径多了org\apache\jsp,这是由于JSP文件转换成类文件时会带有包名,该包名为org.apache.jsp。从图中还可以看出,HelloWorld.jsp 已经被转换为源文件和 .class 文件。打开 HelloWorld_jsp.java文件,可查看串货后的源代码,其主要代码如下:
从上面的代码可以看出,HelloWorld.jsp 文件转换后的源文件没有实现Servlet接口,但继承了org.apache.jasper.runtime.HttpJspBase 类。在Tomcat源文件中查看HttpJspBase类的源代码,具体如下所示:
从HttpJspBase源代码中可以看出,HttpJspBase类是HttpServlet的一个子类,由此可见,HelloWorld_jsp 类就是一个 Servlet。
结
论
:
J
S
P
就
是
S
e
r
v
l
e
t
。
\color{red}{结论:JSP就是Servlet。}
结论:JSP就是Servlet。