中科院云平台架构师,专注于数字化、智能化,技术方向:云、Linux内核、AI、MES/ERP/CRM/OA、物联网、传感器、大数据、ML、微服务。
分类: Java
2006-03-18 17:23:14
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类装载工具装载,这意味着它们可以从远程目录装载(例如,信任的目录),与使用本地文件系统一样容易,这种方式提高了系统结构的灵活性,网络中服务的发布变得更加容易和快捷。
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,才是完全可信的,并赋予所有的权限。 Copyright 2003-2005 All Rights Reserved