前言
前面说到Servlet的由来、工作流程及创建等,这篇文章继续说下servlet的API。
正文
一、概览-Servlet API中主要的接口和类
二、Servlet 接口
要编写一个Servlet,需要实现javax.servlet.Servlet接口,该接口定义了5个方法
//1、Servlet容器通过ServletConfig 参数向Servlet传递配置信息
public void init(ServletConfig config) throws ServletException
//2、处理客户端的请求
public void service(ServletRequest req,ServletResponse res) throws ServletException,java.io.IOException
//3、 释放Servlet 对象的资源,随后该对象会被java的垃圾收集器所回收
public void destory()
//4、ServletConfig对象包含了Servlet的初始化参数,传递给init方法
public ServletConfig getSevletConfig()
//5、该方法返回关于Servlet的信息
public java.lang.string getServletInfo()
三、ServletResquest 和 ServletResoponse 接口
Servlet 由 Servlet 容器来管理,当客户请求到来时,容器创建一个ServletRequest 对象,封装请求数据,同时创建一个ServletResponse对象,封装响应数据。Servlet利用ServletRequest对象处理客户端发来的请求数据,利用ServletResponse对象发送响应数据。
这两种对象常用的方法在这里就不做介绍了,用到了可以去查看API 文档。
四、ServletConfig 接口
Servlet 容器使用ServletConfig对象在Servlet初始化期间向它传递配置信息,一个Servlet只能有一个ServletConfig对象。
// 返回名字为name 的初始化参数的值,该初始化参数在web.xml配置文件中进行配置
public java.lang.String getInitParameter(java.lang.String name)
// 返回Servlet所有初始化参数的名字的枚举集合
public java.util.Enumeration getInitParameterNames()
// 返回Servlet上下文对象的引用
public ServletContext getServletContext()
//返回Servlet 实例的名字,这个名字是在Web应用程序的web.xml配置文件中指定的
public java.lang.String getServletName()
五、GenericServlet 类
为了简化Servlet 的编写,在javax.servlet包中提供了一个抽象的类GenericServlet,她给出了除service()方法外的其他4个方法的简单实现。GenericServlet类定义了一个通用的、不依赖于具体协议的Servlet,它实现了Servlet接口和ServletConfig接口。
public abstract class GenericServlet extends java.lang.Object implements Servlet,ServletConfig,java.io.Serializable
如果我们要编写一个通用的Servlet,只需要从GenericServlet类继承,并实现其中的抽象方法service()。
在GenericServlet类中,定义了两个重载的init()方法:
public void init(ServletConfig config) throws ServletException
public vid init() throws ServletException
第一个init()方法是Servlet接口中init()方法的实现。在这个方法中,首先讲ServletConfig 对象保存在一个transient实例变量中(用transient关键字标记的成员变量不参与序列化过程),然后调用第二个不带参数的init()方法。
六、HttpServlet
为了快递开发应用于HTTP协议的Servlet 类,Sun公司在javax.servlet.http 包中提供了一个抽象的类HttpServlet,它继承自GenericServlet类,用于创建适合web站点的HTTP Servlet.
public abstract class HttpServlet extends GenericServvlet implements java.io.Serializable
在HttpServlet类中提供了两个重载的service()方法:
public void service(ServletRequest req,ServletResponse res) throws ServletException,java.io.IOException
protected void service(HttpServletRequest req,HttpServletResponse res) throws ServletException,java.io.IOException
第一个service()方法是GenericServlet类中service()方法的实现,这个方法中,首先将req和res对象转换为HttpServletRequest(继承自ServletRequest 接口)和HttpServletResponse(继承自ServletResponset 接口)类型,然后调用第二个service() 方法,对客户请求进行处理。
七、HttpServletRequest 和 HttpServletResponse接口
HttpServletRequest中的方法 | 描述 |
---|---|
getContextPath() | 返回请求上下文的部分 |
getCookies() | 返回客户端在此次请求中发送的所有Cookie对象 |
getHeader(String name) | 返回名字为name的请求报头的值 |
getMethod() | 返回此次请求所使用的HTTP方法的名字 |
getQueryStrig() | 返回请求URL中在路径后面的查询字符串 |
HttpServletResponse中的方法 | 描述 |
---|---|
addCooke(Cookie cookie) | 增加一个Cookie到响应中 |
addHeader(String name,String value)() | 用给出的name和value 增加一个响应报头到响应中 |
contaisHeader(String name) | 判断以name为名字的响应报头是否已经设置 |
sendRedirect(String location) | 发送一个临时的重定向响应到客户端,让客户端访问新的URL |
setStatus(int sc) | 为响应设置状态代码 |
总结
感谢您的阅读,在一次次http 请求和响应中不断熟悉以上内容,下期再会!