Servlet技术浅析(一)之GenericServlet抽象类
2017-01-03 14:42
423 查看
简介:
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 中主要的接口和类的类框图;
2.1、Servlet接口
Servlet API的核心是javax.servlet.Servlet接口,所有的Servlet类都必须实现这一接口。在Servlet接口中定义了5个方法,其中3个由Servlet容易调用,容器会在Servlet生命周期的不同阶段调用特定的方法。
1)init(ServletConfig config)方法 :负责初始化Servlet对象。容器在创建好Servlet对象后,就会调用该方法。
2)service(ServletRequest req , ServletResponse res)方法:负责响应客户的请求,为客户提供相应的服务。当容器接收到客户端要求方法特定Servlet对象的请求时,就会调用该Servlet对象的service()方法。
3)destroy()方法:负责释放Servlet对象占用的资源。当Servlet对象结束生命周期时,容器会调用此方法。
Servlet接口还定义了两个返回Servlet相关信息的方法。JavaWeb应用中的程序代码可以访问Servlet的这两个方法,从而获得Servlet的配置信息及其他相关信息。
1)getServletConfig(): 返回一个ServletConfig对象,在该对象中包含了Servlet的初始化参数信息。
2)getServletInfo():返回一个字符串,在该字符串中包含了Servlet的创建者、版本和版权等信息。
在Servlet API 中,javax.servlet.GenericServlet抽象类实现了Servlet接口,而javax.servlet.http.HttpServlet抽象类是GenericServlet类的子类。当用户开发自己的Servlet类时,可以选择扩展GenericServlet或HttpServlet类。下图展示了Servlet接口及其实现类的类框图
二、下面详细介绍各个类
1、GenericServlet抽象类为Servlet接口提供了通用实现,他与任何网络应用层协议无关。GenericServlet类除了实现Servlet接口,还实现了ServletConfig接口和Serializable接口。
先看javax.servlet.servlet接口源码:
GenericSerlvet抽象类源码如下:
补充:
GenericServlet类实现了Servlet接口和ServletConfig接口,GenericServlet类的主要身份是Servlet,此外,它还运用装饰设计模式,为自己附加了ServletConfig装饰身份(装饰者设计模式参见《设计模式之装饰者模式》)。在具体实现中,GenericServlet类包装了一个ServletConfig接口的实例,通过该实例来实现ServletConfig接口中的方法。
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 中主要的接口和类的类框图;
2.1、Servlet接口
Servlet API的核心是javax.servlet.Servlet接口,所有的Servlet类都必须实现这一接口。在Servlet接口中定义了5个方法,其中3个由Servlet容易调用,容器会在Servlet生命周期的不同阶段调用特定的方法。
1)init(ServletConfig config)方法 :负责初始化Servlet对象。容器在创建好Servlet对象后,就会调用该方法。
2)service(ServletRequest req , ServletResponse res)方法:负责响应客户的请求,为客户提供相应的服务。当容器接收到客户端要求方法特定Servlet对象的请求时,就会调用该Servlet对象的service()方法。
3)destroy()方法:负责释放Servlet对象占用的资源。当Servlet对象结束生命周期时,容器会调用此方法。
Servlet接口还定义了两个返回Servlet相关信息的方法。JavaWeb应用中的程序代码可以访问Servlet的这两个方法,从而获得Servlet的配置信息及其他相关信息。
1)getServletConfig(): 返回一个ServletConfig对象,在该对象中包含了Servlet的初始化参数信息。
2)getServletInfo():返回一个字符串,在该字符串中包含了Servlet的创建者、版本和版权等信息。
在Servlet API 中,javax.servlet.GenericServlet抽象类实现了Servlet接口,而javax.servlet.http.HttpServlet抽象类是GenericServlet类的子类。当用户开发自己的Servlet类时,可以选择扩展GenericServlet或HttpServlet类。下图展示了Servlet接口及其实现类的类框图
二、下面详细介绍各个类
1、GenericServlet抽象类为Servlet接口提供了通用实现,他与任何网络应用层协议无关。GenericServlet类除了实现Servlet接口,还实现了ServletConfig接口和Serializable接口。
先看javax.servlet.servlet接口源码:
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(); }
GenericSerlvet抽象类源码如下:
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; } //该方法实现接口<Servlet>中的ServletInfo,默认返回空字符串 public String getServletInfo() { return ""; } //唯一没有实现的抽象方法service(),仅仅在此声明。交由子类去实现具体的应用 //在后来的HttpServlet抽象类中,针对当前基于Http协议的Web开发,HttpServlet抽象类具体实现了这个方法 //若有其他的协议,直接继承本类后实现相关协议即可,具有很强的扩展性 public abstract void service(ServletRequest req, ServletResponse res) throws ServletException, IOException; /* ------------------------------------ 实现Servlet接口方法结束 ------------------------------------ */ /* --------------------------------------------- *以下四个方法实现了接口ServletConfig中的方法 实现ServletConfig接口开始 --------------------------------------------- */ //该方法实现了接口<ServletConfig>中的getServletContext方法,用于返回servleConfig对象中所包含的servletContext方法 public ServletContext getServletContext() { return getServletConfig().getServletContext(); } //获取初始化参数 public String getInitParameter(String name) { return getServletConfig().getInitParameter(name); } //实现了接口<ServletConfig>中的方法,用于返回在web.xml文件中为servlet所配置的全部的初始化参数的值 public Enumeration getInitParameterNames() { return getServletConfig().getInitParameterNames(); //获取在web.xml文件中注册的当前的这个servlet名称。没有在web.xml 中注册的servlet,该方法直接放回该servlet的类名。 //该方法实现了接口<ServleConfig>中的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); } }
补充:
GenericServlet类实现了Servlet接口和ServletConfig接口,GenericServlet类的主要身份是Servlet,此外,它还运用装饰设计模式,为自己附加了ServletConfig装饰身份(装饰者设计模式参见《设计模式之装饰者模式》)。在具体实现中,GenericServlet类包装了一个ServletConfig接口的实例,通过该实例来实现ServletConfig接口中的方法。
相关文章推荐
- Servlet技术浅析(二)之HttpServlet抽象类
- Servlet技术之GenericServlet抽象类(学习笔记)
- Servlet技术浅析(六)之-----JavaWeb应用的生命周期和Servlet的生命周期
- Servlet技术浅析(三)之-----ServletRequest接口和HttpServletRequest接口
- Servlet技术浅析(五)之-----ServletConfig接口和ServletContext接口
- Servlet技术浅析(九)之-----下载文件和上传文件
- Servlet技术浅析(七)之-----ServletContext与Web应用范围
- Servlet技术浅析(四)之-----ServletResponse接口和HttpServletResponse接口
- Servlet技术浅析(八)之-----浏览器缓存浅析
- 物联网NB-IoT与LoRa技术浅析
- 博为峰Java技术题 ——JavaEE Servlet 国际化Ⅰ
- J2EE的十三个技术——Servlet
- SafeSEN原理及绕过技术浅析
- SLB技术原理浅析
- Servlet中国际化技术
- SSD用户必学! 固态硬盘加速技术浅析(
- Xaml技术:浅析为什么说一个标签就是new一个对象?
- Servlet技术基础
- day05-GenericServlet与HttpServlet
- 浅析中国大数据技术与市场趋势