Javax.servlet API的特征

本文介绍了Servlet API,它被多数基于Java的Web服务器支持,具有诸多优点。阐述了Servlet的主要功能、环境、使用模式、主要方法等,还提及了其安全性、生成HTML的方式、与HTTP的关系及性能特征,如可并行运行,无需为每个请求创建新进程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  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方法所面对的所有客户请求,它们都有机会共享数据和通讯资源,并充分利用系统缓存的优点。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值