Jsp和Servlet有什么区别?

发布于2021-12-17 18:13:03
3个回答
admin
网友回答2021-12-17

JSP简介

JSP是一种建立在Servlet规范功能之上的动态网页技术。和ASP类似,它们都是在通常的网页文件中嵌入脚本代码,用于产生动态内容,不过JSP文件中嵌入的是Java代码和JSP标记。

JSP文件在用户第一次请求时,会被编译成Servlet,然后再由这个Servlet处理用户的请求,所以JSP也可以看成是运行时的Servlet。既然JSP也是Servlet,那么我们为什么还要使用JSP呢?或者说JSP和Servlet的区别是什么呢?

? Servlet是Java对CGI的回应。它们在服务器上执行和解释浏览器的请求,承担客户端和其他应用程序之间的中间层的角色。Servlet主要是把动态的内容混合到静态的内容中以产生HTML。

? JSP页面在HTML元素中嵌入Java脚本代码和JSP标记,使得文件长度变短,格式更加清晰。另一方面,JSP把静态和动态的内容分离开来,实现了内容和表示的分离。

? 使用JSP,不需要单独配置每一个文件,只要扩展名是.jsp,JSP容器(也是Servlet容器)就会自动识别,将其转换为Servlet为客户端服务。术语Web容器和JSP容器是同义的

JSP的运行机制

我们先来看一个简单的JSP文件:

Hello

这个JSP页面向客户端输出“Hello World!”。我们把这个页面复制到%CATALINA_ HOME%webappsROOT目录下,启动Tomcat,打开浏览器,在地址栏中输入http://localhost: 8080/hello.jsp,看到“Hello World!”的输出后,你可以转到%CATALINA_HOME%workCatalinalocalhost目录,在ROOTorgapachejsp目录下,可以看到两个文件:“hello_jsp.java”和“hello_jsp.class”,这两个文件就是在我们访问hello.jsp文件时,由JSP容器生成的,整个过程如下图所示。




JSP文件的指定过程

JSP容器管理JSP页面生命周期的两个阶段:转换阶段(translation phase)和执行阶段(execution phase)。当有一个对JSP页面的客户请求到来时,JSP容器检验JSP页面的语法是否正确,将JSP页面转换为Servlet源文件,然后调用javac工具类编译Servlet源文件生成字节码文件,这一阶段是转换阶段。接下来,Servlet容器加载转换后的Servlet类,实例化一个对象处理客户端的请求,在请求处理完成后,响应对象被JSP容器接收,容器将HTML格式的响应信息发送到客户端,这一阶段是执行阶段。

从整个过程中我们可以知道,当第一次加载JSP页面时,因为要将JSP文件转换为Servlet类,所以响应速度较慢。当再次请求时,JSP容器就会直接执行第一次请求时产生的Servlet,而不会再重新转换JSP文件,所以其执行速度和原始的Servlet执行速度几乎就相同了。在JSP执行期间,JSP容器会检查JSP文件,看是否有更新或修改。如果有更新或修改,JSP容器会再次编译JSP或Servlet;如果没有更新或修改,就直接执行前面产生的Servlet,这也是JSP相对于Servlet的好处之一。

JSP容器在后台针对hello.jsp生成的Servlet源文件中有如下代码:

public final class hello_jsp extends org.apache.jasper.runtime.HttpJspBase{...}

HttpJspBase类是Tomcat提供的实现了HttpJspPage接口的类,而HttpJspPage接口继承自javax.servlet.jsp.JspPage接口(JSP 规范中定义,JSP页面转换后的Servlet类必须实现JspPage接口),JspPage接口又继承自javax.servlet.Servlet接口。

结论:JSP本质上还是Servlet。

admin
网友回答2021-12-17

jsp编译后形成servlet类,本质上它还是servlet。由于servlet在做页面展示需要将html信息作为输出信息,维护成本太高,开发难度很大,美工和程序员很难配合,因此产生了jsp技术。jsp主要是在html中嵌入java代码,这使得美工和程序员可以有效的配合。但是jsp还是难以拜托维护难度高弊病,且缺乏面向对象的编程思想。

admin
网友回答2021-12-17

Jsp是一种动态网页开发技术,它使用Jsp标签在HTML网页中插入Java代码。标签通常以结束。Jsp标签有多种功能,比如访问数据库、记录用户选择信息、访问JavaBeans组件等,还可以在不同的网页中传递控制信息和共享信息。Jsp本质上是Servlet的一种简易形式,Jsp经编译后就变成了Servlet,是Servlet的扩展。由于jvm只能识别Java类,不能识别Jsp代码,Web容器会将Jsp的代码编译成jvm能够识别的Java类,然后再由Servlet负责响应用户请求。

Servlet是一种服务器端的Java应用程序,它运行于服务器的jvm中,由Web容器加载和管理,用于生成动态Web内容,负责处理客户端请求,能够依靠服务器的支持向浏览器提供显示内容。在数通畅联AEAI DP开发平台的交互机制中,就是通过DispatchServlet来响应浏览器上请求,再调用对应Handler中的prepareDisplay方法,然后查询对应的信息放到PageBean中,最后将PageBean放到request中转发到Jsp页面来显示结果集。

Servlet和Jsp的区别:

  1. Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML中分离开来;而Jsp是Java和HTML组合成一个扩展名为.jsp的文件。
  2. Jsp侧重于视图,Servlet更侧重于控制逻辑,在MVC架构模式中,Jsp适合充当视图(view)而Servlet适合充当控制器(controller)。
  3. Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到。
数通畅联专注于企业IT架构、SOA综合集成、数据治理分析领域,感谢您的阅读与关注。

回到
顶部