认识Servlet

一、什么是Servlet

Servlet是一个基于Java技术的Web组件,用来扩展以请求/响应为模型的服务器的能力,提供动态内容。Servlet与平台无关,可被编译成字节码,动态地载入并有效地扩展主机的处理能力。Servlet被容器管理,能被编译成字节码被Web服务调用。容器也被称之为引擎,是支持Servlet功能的Web服务的扩展。Servlet之间的通信是通过客户端请求被容器执行成request/response对象进行的。

Servlet容器是Web服务器或应用服务器的一部分,服务器能够支持网络的请求/响应,基于请求解析MIME,基于响应格式化MIME。Servlet容器是Servlet的运行环境,管理和维护Servlet的整个生命周期。Servlet容器必须支持HTTP协议,负责处理客户请求、把请求传送给适当的Servlet并把结果返回给客户。

二、Servlet的基本流程

Servlet的基本流程为:

(1)客户端向Web服务器发起一个HTTP请求。

(2) Web服务器接收该请求,并交给Servlet容器。Servlet容器可以在主机的同一个进程、不同的进程或其他的Web服务主机的进程中启动来处理这个请求。

(3)Servlet容器根据Servlet的配置文档确定需要调用的Servlet,并把request对象、response对象传给它。

(4) Servlet通过request对象获取客户请求信息和其他相关信息,并用特定的方法处理请求,生成送回给客户端的数据。Servlet处理完请求后把要返回的信息放入response对象。

(5) Servlet完成了请求的处理后,Servlet引擎就会刷新response,并把控制权返还给Web服务器。

如图:在这里插入图片描述

三、Servlet的技术特点

Servlet是用Java编写的,所以它与平台无关。这样,Java编写一次就可以在任何平台上运行,同样可以在服务器上实现。Servlet还有一些CGI脚本所不具备的独特优点:

(1)Servlet是持久的。Servlet只需Web服务器加载一次,而且可以在不同请求之间保持服务(例如一次数据库连接)。与之相反,CGI脚本是短暂的、瞬态的。每一次对CGl脚本的请求,都会使Web服务器加载并执行该脚本。一旦这个CGI脚本运行结束,它就会被从内存中清除,然后将结果返回到客户端。CGI脚本的每一次使用,都会造成程序初始化过程(例如连接数据库)的重复执行。

(2)Servlet是可扩展的。由于Servlet是用Java编写的,它就具备了Java的所有优点。Java是健壮的、面向对象的编程语言,它很容易扩展以适应用户的需求。Servlet自然也具备了这些特征。

(3)Servlet是安全的。从外界调用一个Servlet的唯一方法就是通过Web服务器。这提供了高水平的安全性保障,尤其是在用户的Web服务器有防火墙保护的时候。

四、Servlet与JSP的关系和区别

-----Servlet与JSP的关系

Servlet是服务器端运行的一种Java应用程序。当浏览器端有请求则将其结果传递给浏览器。在JSP中使用到的所有对象都将被转换为Servlet或者非Servlet的Java对象,然后被执行,所以执行JSP实际上与执行Servlet是一样的。简单地说,JSP实际上是为了让Servlet的开发显得相对容易而采取的脚本语言形式,JSP中的内置对象与Servlet API对应关系如图:
在这里插入图片描述

-----Servlet和JSP的区别

(1)编程方式不同:JSP是为了解决Servlet中相对困难的编程技术而开发的技术,因此,JSP在程序的编写方面比Servlet要容易得多。Servlet严格遵循Java语言的编程标准,而JSP则遵循脚本语言的编制标准。

(2)Servlet必须在编译以后才能执行:JSP并不需要另外进行编译,JSP容器会自动完成这一工作,而Servlet在每次修改代码之后都需要编译完才能执行。

(3)运行速度不同:由于JSP容器将JSP程序编译成Servlet的时候需要一些时间,所以JSP的运行速度比Servlet要慢一些,不过,如果JSP文件能毫无变化地重复使用,它在第一次以后的调用中运行速度就会和Servlet一样了。这是因为JSP容器接到请求以后会确认传递过来的JSP是否有改动,如果没有改动的话,将直接调用JSP编译过的Servlet类,并提供给客户端解释执行;如果JSP文件有所改变,JSP容器将它重新编译成Servlet,然后再提交给客户端。

(4)Servlet用来写业务逻辑层是很强大的,但是对于写表示层就很不方便。JSP则主要是为了方便写表示层而设计的。

五、Servlet的工作原理

Servlet是javax.Servlet包中HttpServlet类的子类,运行在Web服务器的Servlet容器里,这个Servlet容器从属于Java虚拟机,可以根据Servlet的生命周期的规范,负责执行Servlet对象的初始化、运行和卸载等动作。Servlet在容器中从创建到删除的过程被称为Servlet的生命周期。

如图:
在这里插入图片描述
当多个客户请求一个Servlet时,引擎为每个客户启动一个线程,那么Servlet类的成员变量被所有的线程共享。init()方法只在Servlet第一次被请求加载的时候被调用一次,当有客户再请求Servlet服务时,Web服务器将启动一个新的线程,在该线程中,调用service()方法响应客户的请求。在各个阶段中,服务阶段是最重要的阶段,service()方法才是真正处理业务的阶段。

六、Servlet常见接口和类

Servlet是创建Web应用程序的基本模块,Servlet API包含两个包: javax.Servlet和javax.Servlet.http。javax.Servlet包含用于JSP页面的javax.Servlet.jsp包和用于JSP定制标记的javax.Servlet.jsp.tagext包。

Servlet的类和接口根据作用分类如图:
在这里插入图片描述

内容和图片参考《JSP应用与开发技术》(第三版)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值