一、基本的servlet API
JavaEE关于Servlet的API主要有两个包:javax.servlet和javax.servlet.http。前者主要提供了Web容器能 够使用的servlet基本类和接口,后者主要包括和HTTP协议相关的servlet类和接口。对servlet的编程,主要是根据需要,继承这些类实 现需要的功能。
javax.servlet包和javax.servlet.http包的类和接口主要分以下几类:
1.servlet基本类
javax.servlet.Servlet
javax.servlet.http.HttpServlet
javax.servlet.SingleThreadModel
javax.servlet.GenericServlet
这些是servlet程序需要直接或间接继承的抽象类和接口。SingleThreadModel接口可以保证servlet在同一时间只处理一个客户请 求。
2.Web请求和响应类
javax.servlet.ServletRequest
javax.servlet.ServletResponse
javax.servlet.ServletInputStream
javax.servlet.ServletOutputStream
javax.servlet.HttpServletRequest
javax.servlet.HttpServletResponse
3.和Web容器联系
javax.servlet.ServletConfig
ServletConfig接口使Web容器在servlet初始化时(一般是web服务器启动并载入Web应用时)能够和servlet进行联系。 Servlet可以通过该接口取得初始变量和servlet名称等。
4.和Web应用联系
javax.servlet.ServletContext
这个接口是Servlet和Web应用进行连接,使用servlet和Web程序在运行时能够传递数据。Servlet之间也可以通过这个接口共享数据。 ServletContext是包含在ServletConfig中的,它和ServletConfig的主要不同是:ServletContext有更 多方法,主要是在servlet运行时使用,而ServletConfig主要是在servlet启动时从Web容器中得到。
5.和其他Web资源的共同作用
javax.servlet.http.RequestDispatcher
RequestDispather支持servlet和JSP,其他servlet或Web资源之间的调用。这样当servlet需要引入其他 servlet、JSP或HTML内容时,可以更灵活地控制它们之间的逻辑关系。
6.错误异常类
javax.servlet.ServletException
javax.servlet.UnavailableException
7.其他附属类
javax.servlet.http.HttpUtils
javax.servlet.http.Cookie
前者提供servlet的一些帮助功能,后者是对应HTTP的Cookie。
二、主要servlet类和接口的使用方法
1.javax.servlet.Servlet接口
这个接口定义了servlet初始化、进行服务和终止服务的基本方法,这个些方法都和servlet的生命周期有关。 javax.servlet.Servlet将被HttpServlet和GenericServlet所实现。一般编程者在其中通过继承 HttpServlet间接使用了javax.servlet.Servlet的方法,比如init(),service(),destroy()。
2.javax.servlet.GenericServlet类
该类定义了一个通用的servlet类。它的用法和HTTP协议无关,主要用来方便编程者自己开发其他Web协议的servlet程序。 GenericServlet实现了上面的Servlet和ServletConfig接口,它提供了包括Servlet生命周期方法的一些常用方法。继 承这个类的servlet需要填定其service()方法。它的init()、destroy()方法和javax.servlet.Servlet的 同名方法基本一样。另外,它加入了getInitParameter()等方法。
3.javax.servlet.http.HttpServlet类
HttpServlet是最常用的Servlet类,编程者需要继承这个抽象类并填充其有关doXXX方法。另外在编程时注意各个方法的线程关系,避免当 多个Web请求到来时,servlet会产生错误。它的service()方法一般不需要被替代,它会调用和用户请求对应的doXXX等方法。在一般 servlet中,使用最多的是doGet和doPost方法,没有必要重写doOptions和doTrace方法。
4.javax.servlet.SingleThreadModel接口
Web容器保证实现SingleTheadModel接口的servlet运行在单线程模式下,也就是保证其service()方法不会使用多线程。 Web容器有两种方法可以实现这一功能。一种是创建并管理多个servlet实例,每个实例在同一时间单独处理一个请求;另一种是让请求依照顺序被一个 servlet处理。
5.javax.servet.ServletConfig接口
ServletConfig接口能够使Web容器在servlet初始化时向servlet传递一些设置信息。设置信息是在servlet之外定义的,如 在Web容器中配置描述文件web.xml内指定的初始化变量。在servet进行配置可以带来很大的灵活性。
6.javax.servlet.ServletRequest接口和javax.servlet.ServletResponse接口
这两个接口定义了来自客户端的请求和向客户端发送的响应。Web容器根据客户请求建立ServetRequest对象和ServletResponse对 象并作为参数传递给servlet的service()方法。
可以从ServletRequest中获得请求参数(即url后的&var1=value1...)、请求属性(attributes)、和输入 流。另外,它还可以得到Web协议信息(如getRemoteAddr(),getRemoteHost(),GetServetName()等)。
当Web容器通过ServletResponse接口向客户传递响应数据时,数据的格式主要可以有二进帛类型和文本类型。如果在servlet中需要发送 二进制数据,servlet要用getOutputStream()取得的ServletOutputStream对象;如果需要发送文本数据,要用 getWriter()取得PrinterWriter对象。Servlet可以通过setContentType()设置响应数据的字符集(注:此设置 应在getWriter方法获得PrinterWriter对象前取得)。
7.javax.servlet.ServletInputStream接口和 javax.servlet.ServletOutputStream接口
SetvletInputStream用于从ServletRequest中获取数据输入流;ServletOutputStream用于向 ServletResponse中写数据流。
8.javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletReponse 接口
这两个接口分别继承自ServletRequest,ServletResponse,它们提供了处理HTTP请求和响应的多种方法。在servlet编 程中这两个接口作为参数传递给doGet,doPost等方法。可以从这两个方法中获得和设置HTTP头信息。
9.javax.servlet.http.HttpSession接口
HttpSession提供了会话的管理机制。它可以用来识别一个用户和一系列Web请求的关联关系。同时HttpSession可以用来记载用户的一些 特定信息。在Web容器中,常用的实现会话的方式有通过cookie或重写URL等。HttpSession编程接口代表在HTTP客户和Web服务器之 间创建的会话。使用这个接口的方法可以查询和管理关于会话的信息。