JSP--概述及运行原理详解

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的运行过程具体如下:

  1. 客户端发出请求,请求访问JSP文件。
  2. JSP容器先将JSP文件转换成一个Java源文件(Java Servlet 源程序),在转换过程中,如果发线JSP文件中存在任何语法错误,则中断转换过程,并向服务器和客户都返回出错信息。
  3. 如果转换成功,则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。} JSPServlet

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值