JSP与servlet的区别

2023-05-16

一、了解Servlet的概念

Servlet定义:Servlet是基于Java技术的Web组件,由容器管理并产生动态的内容。Servlet引擎作为WEB服务器的扩展提供支持Servlet的功能。Servlet与客户端通过Servlet容器实现的请求/响应模型进行交互。

注意:Servlet不是从命令行启动的,而是由包含Java虚拟机的Web服务器进行加载

1)Servlet是按照Servlet规范编写的Java类。

2)Servlet应用请求/响应模型,扩展了服务器的功能。

Servlet是WEB应用程序中的一个组件。

Servlet是在JSP之前就存在的运行在服务端的一种Java技术,它是用Java语言编写的服务器端程序在JSP技术出

现之前,Servlet被广泛地应用来开发动态的Web应用程序

.如今在J2EE项目的开发中,Servlet仍然被广泛的使用。

Servlet是一种独立于平台和协议的服务器端的Java技术,可以用来生成动态的Web页面与传统的CGI(公共网关

接口)和许多其他类似CGI技术相比,Servlet具有更好的可移植性、更强大的功能,更少的投资,更高的效率,更好的安全性等特点

二、Servlet技术功能

Servlet通过创建一个框架来扩展服务器的能力,以提供在Web上进行请求和响应的服务。当客户机发送请求至服务器时,服务器可以将请求信息发送给Servlet,并让Servlet建立起服务器返回给客户机的响应

当启动Web服务器或客户机第一次请求服务时,可以自动装入Servlet,之后,Servlet继续运行直到其他客户机发出请求。Servlet的功能涉及范围很广

(1)创建并返回一个包含基于客户请求性质的动态内容的完整的HTML页面;

(2)创建可嵌入到现有HTML页面中的一部分HTML页面(HTML片段);

(3)与其他服务器资源(包括数据库和基于Java的应用程序)进行通信;

(4)用多个客户机处理连接,接收多个客户机的输入,并将结果传递到多个客户机上,例如,Servlet可以是多参与者的游戏服务器;

(5)当允许在单连接方式下传送数据的情况下,在浏览器上打开服务器至applet的新连接,并将该连接保持在打开状态;当允许客户机和服务器简单、高效地执行会话的情况下,applet也可以启动客户浏览器和服务器之间的连接,可以通过定制协议进行通信;

(6)将订制的处理提供给所有服务器的标准程序。

三、 Servlet技术特点

Servlet技术带给程序员最大的优势是它可以处理客户端传来的HTTP请求,并返回一个响应

Servlet是一个Java类,Java语言能够实现的功能,Servlet基本上都可以实现(图形界面除外)。总的来说,Servlet

技术具有以下特点

1.高效。在服务器上仅有一个Java虚拟机在运行,它的优势在于当多个来自客户端的请求进行访问时,Servlet为每个请求分配一个线程而不是进程。

2.方便。Servlet提供了大量的实用工具例程,例如处理很难完成的HTML表单数据、读取和设置HTTP头、处理Cookie和跟踪会话等。

3.跨平台。Servlet是用Java类编写的,它可以在不同的操作系统平台和不同的应用服务器平台下运行。

4.灵活性和可扩展性。采用Servlet开发的Web应用程序,由于Java类的继承性、构造函数等特点,使得其应用灵活,可随意扩展。

5.共享数据。Servlet之间通过共享数据可以很容易地实现数据库连接池。它能方便地实现管理用户请求,简化Session和获取前一页面信息的操作。而在CGI之间通信则很差。由于每个CGI程序的调用都开始一个新的进程,调用间通信通常要通过文件进行,因而相当缓慢。同一台服务器上的不同CGI程序之间的通信也相当麻烦。

6.安全。有些CGI版本有明显的安全弱点。即使是使用最新的标准和PERL等语言,系统也没有基本安全框架。而Java定义有完整的安全机制,包括SSL\CA认证、安全政策等规范。

四、 Servlet生命周期

跟客户端的Applet相似,Servlet(这里Servlet的概念又回到了最原始的含义)也遵循严格的生命周期。在每个Servlet实例的生命中有三种类型的事件,这三种事件分别对应于由Servlet引擎所唤醒的三个方法:

1.init()。当Servlet第一次被装载时,Servlet引擎调用这个Servlet的init()方法,只调用一次。如果某个Sevlet需要特殊的初始化需要。那么Servlet编写人员可以重写该方法来执行初始化任务。这是一个可选的方法。如果某个Servlet不需要初始化,那么默认情况下将调用它父类的init方法。系统保证,在init方法成功完成以前,是不会调用Servlet去处理任何请求的。

2.service()。这是Servlet最重要的方法,是真正处理请求的地方。对于每个请求,Servlet引擎将调用Servlet的service方法,并把Servlet请求对象和Servlet响应对象最为参数传递给它。

3.destroy()。这是相对于init的可选方法,当Servlet即将被卸载时由Servlet引擎来调用,这个方法用来清除并释放在init方法中所分配的资源。

Servlet的生命周期可以被归纳为以下几步:

(1) 装载Servlet,这一项操作一般是动态执行的。然而,Servlet通常会提供一个管理的选项,用于在Servlet启动时强制装载和初始化特定的Servlet

(2) Server创建一个Servlet实例

(3) Server调用Servlet的init方法

(4) 一个客户端请求到达Server

(5) Server创建一个请求对象

(6) Server创建一个响应对象

(7) Server激活Servlet的service方法,传递请求和响应对象作为参数

(8) service方法获得关于请求对象的信息,处理请求,访问其他资源,获得需要的信息

(9) service方法使用响应对象的方法。将响应传回Server,最终到达客户端。Service方法可能激活其他方法以处理请求。如doGet,doPost或其他程序员自己开发的方法

(10) 对于更多的客户端请求,Server创建新的请求和响应对象,仍然激活此servlet的service方法,将这两个对象作为参数传递给它,如此重复以上的循环,但无需再次调用init方法,Servlet一般只初始化一次

(11) 当Server不再需要Servlet时,比如当Server要关闭时,Server调用Servlet的destroy


六 、Servlet与JSP区别

简单的说,SUN首先发展出SERVLET,其功能比较强劲,体系设计也很先进,只是,它输出HTML语句还是采用了老的CGI方式,是一句一句输出,所以,编写和修改HTML非常不方便。 后来SUN推出了类似于ASP的镶嵌型的

JSP,把JSP TAG镶嵌到HTML语句中,这样,就大大简化和方便了网页的设计和修改。新型的网络语言如ASP,PHP,JSP都是镶嵌型的SCRIPT语言。

1、JSP在本质上就是SERVLET,但是两者的创建方式不一样.

2、Servlet完全是JAVA程序代码构成,擅长于流程控制和事务处理,通过Servlet来生成动态网页很不直观.

3、JSP由HTML代码和JSP标签构成,可以方便地编写动态网页.

4、Servlet在Java代码中可以通过HttpServletResponse对象动态输出HTML内容。

5、JSP是在静态HTML内容中嵌入Java代码,然后Java代码在被动态执行后生成HTML内容。

因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页.在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层.

1、JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。

2、JSP编译后是“类servlet”。

3、Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP是Java和HTML组合成一个扩展名为.jsp的文件。

4、JSP侧重于视图,Servlet主要用于控制逻辑。

七、Servlet代码结构

该Servlet处理的是get请求,如果读者不理解HTTP,可以把它看成是当用户在浏览器地址栏输入URL、单击Web页面中的链接、提交没有指定method的表单时浏览器所发出的请求

2.jpg-600

Servlet也可以很方便地处理post请求。post请求是提交那些指定了method=“post”的表单时所发出的请求。若要

创建一个Servlet,则应使创建的类继承HttpServlet类,并覆盖doGet()、doPost()方法之一或全部。doGet()和doPost()方法都有两个参数,分别为HttpServletRequest类型和HttpServletResponse类型

HttpServletRequest提供访问有关请求的信息的方法,例如表单数据、HTTP请求头等。HttpServletResponse除了提供用于指定HTTP应答状态(200,404等)、应答头(Content-Type,Set-Cookie等)的方法之外,最重要的是它提供了一个用于向客户端发送数据的PrintWriter对于简单的Servlet来说,它的大部分工作是通过println()方法生成向客户端发送的页面

注意:

doGet()方法和doPost()方法抛出两个异常,因此必须在声明中包含它们。另外还必须导入java.io包(要用到PrintWriter等类)、javax.servlet包(要用到HttpServlet等类)以及javax.servlet.http包要用到(HttpServlet Request类和HttpServletResponse类)。

doGet()和doPost()这两个方法是由service()方法调用的,有时可能需要直接覆盖service()方法,比如Servlet要处理Get和Post两种请求时,如果要开发一个可以处理HTTP请求的Servlet程序,则肯定要继承HttpServlet类,

而且在自定义的Servlet类中还要重写HttpServlet类中提供的doGet()方法。Servlet程序本身也是按照请求和应答的方式进行的,所以在doGet()方法中定义了两个参数,即HttpServletRequest和HttpServletResponse,用来接收和回应用户的请求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JSP与servlet的区别 的相关文章

随机推荐

  • Deep Fashion衣服时尚数据集

    数据集简介 官方介绍 xff1a http mmlab ie cuhk edu hk projects DeepFashion html DeepFashion数据库 xff0c 这是一个大型服装数据库 xff0c 它有几个吸引人的特性 x
  • sql表中drop table和delete table的区别

    问题 xff1a 使用阿里云的maxcompute产品发现有中间表的产生 xff0c 需要删除 删表是一个比较危险的操作 xff0c 这次给了个机会就想尝试下 xff0c 记得在mysql表中有两种操作 xff0c drop与delete
  • 部署yolov5环境并编译cv_bridge(Jetson Xavier NX)

    1 安装anaconda 在浏览器中找到anaconda官网并下载相关文件 使用以下命令进行安装 xff1a bash Anaconda3 2022 05 Linux aarch64 sh 安装完成后 xff0c 重新打开中断 xff0c
  • 九、PyQt5多线程编程

    xff08 三 xff09 多线程编程 如果一次只完成一件事情 xff0c 那是一个不错的想法 xff0c 但事实上很多事情都是同时进行的 xff0c 所以在Python中为了模拟这种状态 xff0c 引入了线程机制 xff0c 简单地说
  • int和Integer的区别

    int和Integer的区别 1 Integer是int的包装类 xff0c int则是java的一种基本数据类型 2 Integer变量必须实例化后才能使用 xff0c 而int变量不需要 3 Integer实际是对象的引用 xff0c
  • 一起做激光SLAM[六]isam于SLAM位姿因子图优化的使用

    本节目标 xff1a 学习gtsam与isam在二位位姿pose2和三维位姿pose3上的使用 xff0c 并将isam用于位姿的因子图优化 预期效果 xff1a 将ICP匹配带来的瞬间位移变成对之前累积误差的消除 蓝色ICP无图优化 xf
  • java.lang.ClassNotFoundException问题的解决

    作者 xff1a 朱金灿 来源 xff1a https blog csdn net clever101 调试运行一个java项目出现错误 xff0c 错误信息如下 xff1a 严重 Error configuring application
  • Python 获取当前路径(文件及所在文件夹,正斜线)

    参考博客 xff1a http www cnblogs com wind wang p 5822192 html 更多路径读取请参照上述博客 xff08 使用Python 2 x版本 xff09 xff0c 这里只挑出个人认为最直接 常用的
  • 设置 Android Studio 显示 Local Changes 标签页

    参考 xff1a 2020版本idea version control 不见了 解决办法 新版的 jetbrains idea 的 Git 窗口就是之前的 Version Control 窗口 xff0c 但是默认不显示 Local Cha
  • 【C++】C++11 vector 之 emplace_back() 使用场景简单剖析

    emplace 关键字是 C 43 43 11 的一个新特性 emplace back 和 push abck 的区别是 xff1a push back 在向 vector 尾部添加一个元素时 xff0c 首先会创建一个临时对象 xff0c
  • 【C++】nomember named ‘to_string‘ in namespace ‘std’

    在使用 Android Studio 编写 C 43 43 代码时 xff0c 出现如下错误 xff1a nomember named 39 to string 39 in namespace 39 std 39 原因 xff1a 这是因为
  • 【CMake】Make 命令无法正常执行

    问题 在 Linux 系统上使用 CMakeLists txt 编译 C 43 43 项目时 xff0c 执行 cmake 命令之后 xff0c 再执行 make 命令出现了 make 命令不生效的问题 具体的现象是 xff1a cmake
  • 【ProtoBuf】ProtoBuf 通过 proto 文件生成 cc/h 文件

    参考 xff1a protobuf ProtoBuf 通过 proto 文件生成 cc h 文件的步骤如下 xff08 Linux 下 xff09 xff1a 先通过 protobuf 源文件编译出 protoc 可执行文件 span cl
  • 【C++】C++ 单例模式总结(5种单例实现方法)

    本文对 C 43 43 的单例模式进行简单介绍和实现 参考 xff1a C 43 43 线程安全的单例模式总结 xff08 强烈建议阅读原文 xff0c 本文相当于做了总结 xff0c 留作学习 xff0c 并添加了一种新的单例方法 std
  • 【C++】epoll + socket 网络编程实现一个简单的 server

    文章目录 服务端客户端 本着学习 epoll 的态度 xff0c 本文使用 epoll 43 socket 实现了一个简单的 server xff0c 可以接收多个客户端的连接并与之通信 话不多说 xff0c 直接上代码 xff0c 完整的
  • 【已解决】Mac 无法使用 GDB 进行调试的问题

    问题 Mac 初次使用 GDB 进行调试时 xff0c 会出现 xff1a gdb run Starting program usr local bin fabnacci Unable to find Mach task port for
  • 【Git】解决 git pull 提示 Permission denied (publickey) 的问题

    问题 在使用 ssh keygen 创建 github 秘钥时没有使用默认文件 xff0c 而是自定义了 xxx github 的秘钥文件 xff0c 然后将公钥添加到 github 上 之后发现每次 Mac 开机后使用 git pull
  • 【保研复习】数据结构复习笔记

    基于王道数据结构进行的保研面试复习 文章目录 数据结构绪论数据结构1 逻辑结构线性结构线性表栈队列 非线性结构树图集合 xff08 无序 xff09 2 存储结构顺序存储链式存储索引存储散列存储 3 数据的运算 算法特点效率度量时间复杂度空
  • MAVLINK 请求参数和接收参数

    if decodeState 61 61 1 之后是放在mavlink消息解析后面 请求返回参数配置列表 void MavDebug on pushButton 3 clicked mavlink message t msg mavlink
  • JSP与servlet的区别

    一 了解Servlet的概念 Servlet定义 xff1a Servlet是基于Java技术的Web组件 xff0c 由容器管理并产生动态的内容 Servlet引擎作为WEB服务器的扩展提供支持Servlet的功能 Servlet与客户端