本文共 6059 字,大约阅读时间需要 20 分钟。
简介:
servlet最常用的几个对象:
1、请求对象(ServletRequest和HttpServletRequest):Servlet从该对象中,获取来自客户端的请求信息。
2、响应对象(ServletResponse和HttpServletResponse):Servlet通过该对象来生成响应结果。
3、Servlet配置对象(ServletConfig):当容器初始化一个Servlet对象时,会向Servlet提供一个ServletConfig对象,Servlet通过该对象来获取初始化参数信息及ServletContext对象。
4、Servlet上下文对象(ServletContext):Servlet通过该对象来访问容器为当前Web应用提供的各种资源。
一、Servlet API:
1、Servlet API主要由两个java包组成:javax.servlet和javax.servlet.http;
1)在javax.servlet包中定义了Servlet接口和相关的通用接口和类;
2)在javax.setvlet.http包中主要定义了与http协议相关的HttpServlet类、HttpServletRequest接口和HttpServletResponse接口。
下图显示了Servlet API 中主要的接口和类的类框图;
package javax.servlet; //Tomcat源码版本:6.0.20 import java.io.IOException; public interface Servlet { //负责初始化Servlet对象。容器一旦创建好Servlet对象后,就调用此方法来初始化Servlet对象 public void init(ServletConfig config) throws ServletException; //方法负责响应客户的请求,提供服务。当容器接收到客户端要求访问特定的servlet请求时,就会调用Servlet的service方法 public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException; /* *Destroy()方法负责释放Servlet 对象占用的资源,当servlet对象结束生命周期时,servlet容器调用此方法来销毁servlet对象. **/ public void destroy(); /* 说明:Init(),service(),destroy() 这三个方法是Servlet生命周期中的最重要的三个方法。 **/ /* *返回一个字符串,在该字符串中包含servlet的创建者,版本和版权等信息 **/ public String getServletInfo(); /* GetServletConfig: 返回一个ServletConfig对象,该对象中包含了Servlet初始化参数信息 **/ public ServletConfig getServletConfig(); }
package javax.servlet; import java.io.IOException; import java.util.Enumeration; //抽象类GenericServlet实现了Servlet接口的同时,也实现了ServletConfig接口和Serializable这两个接口 public abstract class GenericServlet implements Servlet, ServletConfig, java.io.Serializable { //私有变量,保存 init()传入的ServletConfig对象的引用 private transient ServletConfig config; //无参的构造方法 public GenericServlet() { } /* ------------------------------------ 以下方法实现了servlet接口中的5个方法 实现Servlet接口方法开始 ------------------------------------ */ /** *实现接口Servlet中的带参数的init(ServletConfig Config)方法,将传递的ServletConfig对象的 * 引用保存到私有成员变量中, * 使得GenericServlet对象和一个ServletConfig对象关联. * 同时它也调用了自身的不带参数的init()方法 **/ public void init(ServletConfig config) throws ServletException { this.config = config; this.init(); //调用了无参的 init()方法 } //无参的init()方法 public void init() throws ServletException { } //空实现了destroy方法 public void destroy() { } //实现了接口中的getServletConfig方法,返回ServletConfig对象 public ServletConfig getServletConfig() { return config; } //该方法实现接口中的ServletInfo,默认返回空字符串 public String getServletInfo() { return ""; } //唯一没有实现的抽象方法service(),仅仅在此声明。交由子类去实现具体的应用 //在后来的HttpServlet抽象类中,针对当前基于Http协议的Web开发,HttpServlet抽象类具体实现了这个方法 //若有其他的协议,直接继承本类后实现相关协议即可,具有很强的扩展性 public abstract void service(ServletRequest req, ServletResponse res) throws ServletException, IOException; /* ------------------------------------ 实现Servlet接口方法结束 ------------------------------------ */ /* --------------------------------------------- *以下四个方法实现了接口ServletConfig中的方法 实现ServletConfig接口开始 --------------------------------------------- */ //该方法实现了接口 中的getServletContext方法,用于返回servleConfig对象中所包含的servletContext方法 public ServletContext getServletContext() { return getServletConfig().getServletContext(); } //获取初始化参数 public String getInitParameter(String name) { return getServletConfig().getInitParameter(name); } //实现了接口 中的方法,用于返回在web.xml文件中为servlet所配置的全部的初始化参数的值 public Enumeration getInitParameterNames() { return getServletConfig().getInitParameterNames(); //获取在web.xml文件中注册的当前的这个servlet名称。没有在web.xml 中注册的servlet,该方法直接放回该servlet的类名。 //该方法实现了接口 中的getServletName方法 public String getServletName() { return config.getServletName(); } /* --------------------------------------------- 实现ServletConfig接口结束 --------------------------------------------- */ public void log(String msg) { getServletContext().log(getServletName() + ": "+ msg); } public void log(String message, Throwable t) { getServletContext().log(getServletName() + ": " + message, t); } }