天天看點

javax頂層接口分析

1.Servlet接口分析

此接口是Servlet的最頂層接口,其中定義了Servlet生命周期相關的方法,所有Servlet都必須實作。此接口中的方法有以下幾個:

public void init(ServletConfig config) throws ServletException;
public ServletConfig getServletConfig();
public void service(ServletRequest req, ServletResponse res)
public String getServletInfo();
public void destroy();           

複制

生命周期的調用順序如下:

Servlet建構成功後調用init方法來初始化Servlet配置,此方法隻調用一次,然後有一個http請求就調用service方法來處理相應請求,當所有請求結束,調用destroy方法來釋放Servlet。 此三個方法都是由Servlet容器(比如tomcat,jetty)來調用。

其中getServletConfig和getServletInfo用于擷取Servlet相關資訊。

2.ServletConfig接口分析

此接口為Servlet配置抽象接口,定義了擷取Servlet資訊的相關接口,接口清單如下:

//擷取Servlet名稱,即是web.xml中配置的servlet-name
public String getServletName()
//傳回此Servlet對應的上下文
public ServletContext getServletContext()
//擷取初始化參數
public String getInitParameter(String name)
//擷取初始化參數名稱清單
public Enumeration<String> getInitParameterNames()           

複制

3.GenericService抽象類分析

此類實作了上面兩個接口,主要是實作了ServletConfig類中的接口。此類中維護了一個ServletConfig變量,定義方式如下:

private transient ServletConfig config;           

複制

添加transient修飾的作用:序列化的時候不包含此字段

此局部變量在init的時候初始化,初始化方式如下:

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

複制

init方法是由Servletr容器調用,是以,web.xml中Servlet配置轉化為ServletConfig的工作因該是由容器完成的。

其中ServletConfig接口的方法實作方式基本如下:

public String getServletName() {
    ServletConfig sc = getServletConfig();
    if (sc == null) {
        throw new IllegalStateException(
            lStrings.getString("err.servlet_config_not_initialized"));
    }

    return sc.getServletName();
}           

複制

比較簡單,不再分析。