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环境都提供了一个安全管理器,可以用于控制是否允许执行某项操作,例如网络文件的访问。缺省的,通过网络装载的所有servlet都是不可信的,它不许执行诸如访问网络服务或本地文件的操作。仅仅在java web server中创建的,或者在本地由服务器管理控制的,../servlet目录的servlet,才是完全可信的,并赋予所有的权限。
闽公网安备 35060202000074号