Servlet API已经被大多数基于Java的Web服务器支持,这意味着当使用ServletAPI时,可以继续Java的许多优点:不但代码不存在内存漏洞和难以发现的指针Bug,而且还可以运行在许多不同的服务器提供的平台上。
1.Javax.Servlet的主要功能
servlet采用常见的接受请求和生成响应的编程模型,该模型使用了一系列的分布式系统编程工具箱,这包括从远程过程调用到向Web服务器发出HTTP请求等。
Servlet编程其实非常简单,主要就是实现一个Servlet接口,例如:
import javax.servlet.*;
public class MyServlet extends GenericServlet{
public void service(
ServletRequest request;
ServletRespose response;
) throws ServletException,IOEXception
{
......
}
}
service方法内可以操作request和response参数,这里封装了客户机发送的数据,提供了对参数的访问,并答应Servlet报告各种状态(包括错误信息),通常,Servlet通过输入流得到大多数参数,并使用输出流发送它们的响应。
ServletInputStream in=request.getInputStream();
ServletOutputStream out=response.getOutputStream();
这些输入/输出流可以使用多种不同格式的数据,例如:Applet和Servlet可以使用对象序列化(object serialization)交换数据,或者Html、图象格式等。
2.Servlet及其环境
由于Servlet是一种Java对象,它们由特定的实例数据组成,这意味着正在执行的Servlet是运行在服务器内部的独立的应用程序。
在初始化期间,Servlet访问一些特定的Servlet配置数据,这答应相同Servlet类的不同实例可以用不同的数据来初始化,并当作不同名字的Servlet来治理。在初始化期间提供的数据中,包括了每个实例在哪里保存它们自己的状态。
Servlet还可以利用ServletContext对象与它们自己的环境进行交互。
3.使用模式
Servlet可以使用下面几种模式,然而,不同是所有的服务器环境支持所有这些模式:
(1)基本的模式是以请求/响应协议为核心。
(2)服务器可以用过滤链(filter chains)链接多个Servlet.
(3)Servlet可以支持特定的协议,例如HTTP.
(4)在基于HTTP的应用程序中,Servlet是一个基于CGI扩展的完全的(且更高效)替代品。
(5)在基于HTTP的应用程序中,Servlet还可以作为HTML的服务器端来包含动态地生成的Web文档。
4.主要的Servlet方法
Servlet总是动态地被装载,尽管在服务器启动时,服务器通常提供一个治理选项来强制装载和初始化特定的Servlet。Servlet使用普通Java类装载工具装载,这意味着它们可以从远程目录装载(例如,信任的http://user/Servlet目录),与使用本地文件系统一样轻易,这种方式提高了系统结构的灵活性,网络中服务的发布变得更加轻易和快捷。
Servlet被装载之后,其生命周期涉及三个主要方法:
(1)Servlet通过调用init方法被服务器激活,假如Servlet的开发者需要,可以执行一些内在的设置,这样无需每个请求都设置一次,例如初始化其他网络服务的session或者访问它们拥有的数据(存储在数据库或文件中)。
(2)当初始化后,Servlet处理许多请求,为每一个客户请求生成一个service调用,这些请求可能是并行的,这答应Servlet调整多个客户的行为,类的静态状态可以用于在请求中共享数据。
(3)Servlet对象将一直处理请求,除非服务器调用destroy方法显式地关闭Servlet,Servlet类还是一个有效的垃圾收集器。
5.安全性
Servlet必须访问发出请求的客户的有关信息,当使用安全协议时,例如SSL,可以相当可靠地认证对方的身份。
Servlet拥有Java的大多数优点,例如不答应违规访问内存及类型,这样,有缺陷的Servlet不会导致服务崩溃,而这在大多数C语言的服务器环境中经常发生。
与当前任何其他的服务器扩展API不同,Java Servlet提供了强大的安全策略支持,这是因为所有的Java环境都提供了一个安全治理器,可以用于控制是否答应执行某项操作,例如网络文件的访问。