首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Servlet Source Analysis (一)

2012-09-12 
Servlet Source Analysis (1)在分析Servlet容器源码前,贴出来两个问题,问问大家!嘿嘿...1.我们在使用Servl

Servlet Source Analysis (1)
在分析Servlet容器源码前,贴出来两个问题,问问大家!嘿嘿...

1.我们在使用Servlet的时候都要自己写类继承自HttpServlet,而HttpServlet又继承自GenericServlet,GenericServlet实现了Servlet, ServletConfig。到HttpServlet的时候,
所有的抽象方法全部实现了,且HttpServlet类中没有定义抽象方法,但是HttpServlet类还设计成了抽象的类, --->
public abstract class HttpServlet extends GenericServlet
    implements java.io.Serializable

我想问,为什么要这么设计成抽象的?那么,就引入了一个问题,为什么抽象的类不可以实例化?

2.如果我们在Servlet容器启动的时候,在启动的过程中加入点自己的东西,需要覆写init()方法。GenericServlet中实现了init()方法,

public void init(ServletConfig config) throws ServletException{ this.config = config; this.init(); }public void init() throws ServletException  {   }

可是,如果我们覆写第一个init()方法,在子类中没有显示的调用super.init(config)话,会出现NullPointerException异常。也就是ServletConfig为空,所以通常我们都覆写init()无参方法。
既然能出现异常,为什么不把init(ServletConfig config)的方法签名设计为private的呢?
1 楼 maosheng 2012-01-05   因为GenericServlet implements Servlet
而Servlet中定义init(ServletConfig paramServletConfig)为
public abstract void init(ServletConfig paramServletConfig)
    throws ServletException;
是public的方法,所以他的实现类也只能是public

热点排行