Servlet 原理概述

Servlet概述

1. Servlet 背景

早期的web应用主要用于浏览新闻等静态页面,用户通过HTTP协议请求服务 器上的静态页面,服务器上的web服务器软件接收到请求后,读取URI标示的资源,再加上消息报头发送给客户端浏览器,浏览器负责解析HTML,将结果呈现出来
后来用户需要一些交互操作,获取一些动态结果。如果基于HTTP协议实现服务器端软件增强功能太过复杂,所以需要一些扩展机制来实现用户想要的功能。早期使用的Web服务器扩展机制是CGI(Common Gateway Interface,公共网关接口)。使用这种方法,用户单击某个链接或输入网址来访问CGI程序,web服务器收到请求后,运行该CGI程序,对用户请求进行处理,紧接着将处理结果并产生一个响应,该响应被返回给web服务器,web服务器对响应进行包装,以HTTP响应的方式返回给浏览器。
CGI程序在一定程度上解决了用户需求。不过还存在一些不足之处,如CGI程序编写困难,响应时间较长,以进程方式运行导致性能受限。于是1997年,sun公司推出了Servlet技术,作为java阵营的CGI解决方案。

2. Servlet 原理

2.1 servlet通信

这里写图片描述

Tomcat将http请求接收并解析为HttpServletRequest对象,发送给Servlet
Tomcat将HttpServletResponse对象变成http响应,发送给浏览器

Servlet是一个基于Java技术的Web组件,运行在服务器端。
它由Servlet容器所管理,用于生成动态的内容。
Servlet是平台独立的Java类,编写一个Servlet,实际上就是按照Servlet规范编写一个Java类。

2.2 servlet容器

Servlet容器也叫做Servlet引擎,是Web服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于MIME的请求,格式化基于MIME的响应。

常用的MIME类型:text/html,application/pdf,video/quicktime,application /java,image/jpeg,application/jar,application/octet-stream,application/x- zip)

使用servlet容器来管理和运行servlet的原因:
- 通信支持: 利用容器提供的方法,你能轻松的让servlet与web服务器对话,而不用自己建立serversocket、监听某个端口、创建流等
- 多线程支持:容器会自动为它所接收的每个servlet请求创建一个新的java线程。
- 声明方式实现安全:利用servlet容器,你可以使用xml部署描述文件来配置和修改安全性,而不必将其硬编码写到servlet类代码中。
- JSP支持:servlet容器负责将jsp代码翻译为真正的java代码。

2.3 用与CGI程序相比,Servlet具有以下优点:
  • Servlet是单实例多线程的运行方式。每个请求在一个独立的线程中运行,而提供服务的Servlet实例只有一个。线程仅占用有限的系统资源,所以能响应更多的请求。
  • Servlet使用标准的API,被更多的Web服务器所支持。
  • Servlet使用Java语言编写,因此拥有Java程序语言的所有优点,包括容易开发和平台独立性,和有Java平台丰富的类库的支持。
  • Servlet容器给Servlet提供额外的功能,如错误处理和安全。

3. Servlet的使用

3.1 Servlet包

Java Servlet是运行在带有支持Java Servlet规范的解释器的web服务器上的Java类。
使用javax.servletjavax.servlet.http包创建 Java Servlet 就像任何其他的 Java 类一样已经被创建和编译。