介绍Servlet
今天,我们都意识到创建动态网页的必要性。动态网页就是网页内容会随着时间变化,或者内容会根据请求参数的不同而变化。如果你使用java编程,很幸运的是有一种使用Java生成动态网页的方式-Java Servlet。但是,在这之前,我们先来理解服务端需要的扩展。
什么是Java Servlet
Java Servlet是指在Java-enabled的web服务器或应用服务器上运行的Java程序。它们用于处理来web服务器接收的请求,处理请求,产生响应,把响应返回给web服务器。
Java Servlet的特性
Java Servlet的特性包括:
- 工作在服务端
- 可以处理来自web服务器的复杂的请求
Java Servlet的架构
Java Servlet的架构可以用下面的图描述:
Java Servlets的执行
Java Servlets的执行通常包括6个步骤:
- 客户端把请求发送到web服务器。
- web服务器收到请求。
- web服务器把请求发送给对应的servlet。
- servlet处理请求,产生输出格式的响应。
- servlet把响应返回给web服务器。
- web服务器把响应返回给客户端,客户端把响应显示在网页中。
现在,让我们讨论下为什么需要服务端的扩展。
服务端的扩展
服务端的扩展只是用于生成动态网页的技术。实际上,为了给动态网页提供一个生产车间,动态网页需要一个容器或者web服务器。为了实现这种需求,各个web服务器提供商提出了API形式的解决方案。
这些API可以让我们写出可以和服务器一起工作的程序。同样,Java Servlet 也是Java Platform Enterprise Edition(制定使用Java创建动态网页技术的标准)的API组件之一。
Java Servlet并不是实现动态网页唯一的技术。Java Servlet类似于其它的web服务器扩展,例如Common Gateway Interface(CGI)和Hypertext Preprocessor(PHP)。可是,Java Servlet更受欢迎,因为它解决了CGI的一些限制,例如,低性能和低扩展性。
什么是CGI(Common Gateway Interface)
CGI实际上是一个外部的用任何语言比如C、C++编写的程序,负责处理客户端的请求,生成动态内容。
在CGI程序中,当客户端请求动态网页时,web服务器执行下面的操作:
- 它首先找到处理这个动态网页请求的CGI应用程序。
- 然后,新建一个进程用户处理这个请求。
- 在这个新进程中运行CGI程序,并传入请求的信息。
- 从CGI进程中获取响应数据。
- 销毁进程,准备HTTP响应,返回给客户端。
所以,使用CGI,服务器必须为每一个请求创建和销毁进程。很容易理解这种方式在处理小量用户请求时是没有问题的,但是,随着用户量的增加,服务器的工作负载会增加,相应的,处理请求的时间也会增加。
Java Servlet和CGI的区别
Servlet | CGI(Common Gateway Interface) |
---|---|
Servlets可移植,高效 | CGI不可移植 |
Servlets可以共享数据 | CGI不可共享数据 |
Servlets可以直接跟web服务器通信 | CGI不可以直接跟web服务器通信 |
Servlets轻量级 | CGI重量级 |
Servlets可以操作cookies | CGI不可以操作cookies |
Servlets APIs
Servlets由2个包组成:
- javax.servlet(基础)
- javax.servlet.http(高级)
包里包括的类:
组件 | 类型 | 包 |
---|---|---|
Servlet | Interface | javax.servlet.* |
ServletRequest | Interface | javax.servlet.* |
ServletReponse | Interface | javax.servlet.* |
GenericServlet | class | javax.servlet.* |
HttpServlet | class | javax.servlet.http* |
HttpServletRequest | interface | javax.servlet.http* |
HttpServletResponse | interface | javax.servlet.http* |
Filter | Interface | javax.servlet.* |
ServletConfig | Interface | javax.servlet.* |
Java Servlet 的有点
- 由于Servlets不像CGI,为每一个请求开启一个进程,它运行的更快。
- Servlets由Java编写,它是平台无关的。
- Servlets是服务端的组件,它可以继承web服务器提供的安全保证。
- Servlets由Java编写,它可以使用Java平台提供的基础设施,比如,JDBC访问数据库。
Servlet 容器
Servlet容器,也被称为Servlet引擎,是一套为Servlet搭建的运行时环境。简单来说,它是构建在Web服务器之上,管理着Servlet,处理Web客户端请求的系统。
Servlet容器提供的服务包括:
- 网络服务:加载Servlet类。加载源可以是本地文件系统,远程文件系统,或者其它网络服务。容器提供网络服务包括请求和响应的发送。
- 解码和编码MIME-based信息:提供编解码MIME-based信息。
- 管理Servlet:管理Servlet的生命周期。
- 资源管理:管理动态和静态资源,例如:HTML,Servlet,JSP页面。
- 安全服务:提供资源访问的鉴权。
- Session管理:维护Session。
总结
Java Servlet是处理业务逻辑和处理复杂网络请求的关键组件,帮助开发动态网站。下面是我们这篇文章讨论过的要点:
- Java Servlets 致力于服务端程序的开发,处理动态内容,创建健壮和交互性的网站。
- Servlets 使我们的web程序更加响应快速。因为,它不需要为每一个请求创建和销毁进程。