Javax.servlet API的特征

 
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 ,才是完全可信的,并赋予所有的权限。
    然而,使用数字签名并放进 JAR 文件的 Servlet 是可信的,并可以被安全管理器赋予了更多的权利。在执行码上的数字签名描述了该代码是哪个组织签署并为其担保的。
    其他语言中的扩展 API ,例如, C 或者脚本语言,即使它们允许对代码进行数字签名,也无法支持如此精细的访问控制。这意味着 100% Java 的扩展( extensions )从根本上比其他况争方案更加安全,包括 ActiveX
今天,大多数 ISP Internet Service Providers )还不能接受来自它们的客户的服务器扩展,这是因为它们无法保护自己,或者不能保护它们的客户不受到使用本地 C 代码或 CGI 工具创建的扩展的攻击。然而, 100% Java Servlet 创建的扩展可以有效地防止数据被恶意地篡改。配合数字签名的使用, ISP 可以保证,当它们使用由客户提供的 Servlet 来扩展它们的服务器时,不用担心由于不恰当编程所造成的种种危险。
 
6. 对于生成 HTML
    许多 Servlet 将直接生成 HTML 格式的文本,标准的、国际化的 Java 格式输出类(例如 Java.io.PrintWrite )可以容易地做到。
    当然,也可以使用其他的 Java HTML 生成方法,例如,一些多语言站点更喜欢维护特定的本地化 HTML 模板文件,并使用本地化的信息目录来充填这些模板。另外,许多站点通常会开发 HTML 生成包来生成动态的 Web 页。
    在完全支持 Servlet Web 服务器中, Servlet 还可能被服务器调用,使用服务器端包含的功能,预处理 Web 页。这种预处理请求被放在 .shtml 文件中,通过特定的 HTML 语法来向 Web 服务器描述。
    通常 Servlet 可以从许多地方接受输入的参数:
1 )请求的输入流中,可能来自一个 Applet
2 )请求的 URI 中。
3 )自自其他的 Servlet 或网络服务。
4 )使用从 HTML 表格传递来的参数。
这些参数用于生成 HTML 格式的响应,为了获得响应要返回的数据, Servlet 通常会访问一个或多个数据库,或者 Servlet 已经配置的其他数据。
 
7. HTTP 有关的 Servlet
    使用 HTTP 协议的 Servlet 支持所有的 HTTP 方法,包括 GET POST HEAD 等等。它们将请求重定向到其它位置,还可以发送 HTTP 错误信息。它们可以得到标准的 HTTP 表单传递的参数,包括 HTTP 要执行和描述请求目的的 URI ,例如:
String method = request.getMethod();
String uri = request.getRequestURI();
 
String name = request.getParameter(”name”);
String phone = request.getParameter(”phone”);
String card = request.getParameter(“creditcard”);
 
    javax.servlet.http.httpServlet 类是实现 HttpServlet 的基类,它处理 HTTP 的细节,例如:缓存管理以及其他的子协议,分派方法并处理许多协议的错误情况。实现一个 HttpServlet 就和定义 doGet doPost 方法一样容易。
对于 HttpServlet ,请求和响应数据总是以 MIME 格式提供, Servlet 指定响应的数据类型,之后就按照设定的格式编码数据,这样, Servlet 可以接收任意类型的输入数据,并返回表单中请求的数据。例如: HTML ,图形格( JPG MPEG )或者特定应用程序使用的数据格式。
 
8. 性能特征
    Servlet 最突出的特征之一就是对于每一个请求不需要像 CGI 那样单独创建一个新的进程,在大多数环境中,许多 Servlet 可以并行运行在与服务器相同的进程中。这是因为 Servlet 仅仅要求轻量级的、现成的上下文转换,即使是 Fast-CGI ,每个请求都涉及重量级的进程上下文的转换,由于在大多数环境中, Servlet 可以处理许多已经始化的客户请求,这些初始化的开销由许多方法分担,对于该 Service 方法所面对的所有客户请求,它们都有机会共享数据和通讯资源,并充分利用系统缓存的优点。
 

你可能感兴趣的:(Javax.servlet API的特征)