JavaWEB基礎之Servlet

Servlet的HelloWorld

  • 創建一個Servlet接口的實現類

public class HelloServlet implements Servlet

  • 在web.xml文件中配置和映射這個Servlet
   <!--配置和映射Servlet-->
    <servlet>
    <!--Servlet註冊的名字-->
    <Servlet-name>helloServlet</servlet-name>
    <!--Servlet的全類名-->
    <servlet-class>com.atguigu.HelloServlet</servlet-class>
    </servlet>

    <servlet-mapping>
    <!--需要和某一個Servlet節點的servlet-name子節點的文本節點一致-->
    <Servlet-name>helloServlet</servlet-name>
    <!--映射具體的訪問路徑:/代表當前web的根目錄-->
    <url-pattern>/hello</url-pattern>
    </servlet-mapping>

Servlet容器:運行Servlet.JSP.Filter等的軟件環境可以創建Servlet,並調用Servlet的相關生命週期方法.
JSP/Filter/Listener/Tag…
Servlet生命週期的方法
1).構造器:第一次請求Servlet時,創建Servlet的實例,這說明Servlet
是單例模式.
2).init方法:只被調用一次,在創建好實例後立即調用.
用於初始化當前的Servlet
3).service被多次調用,每次請求都會調用service方法,實際用於響應請求的
4).destroy
只被調用一次,在當前Servlet所在的web應用被卸載前調用,用於釋放當前Servlet所佔用的資源

load-on-startup參數

1)配置在Servlet節點中:

<servlet>
    <!--Servlet註冊的名字-->
    <Servlet-name>secondServlet</servlet-name>
    <!--Servlet的全類名-->
    <servlet-class>com.atguigu.SecondServlet</servlet-class>
    <!--指定Servlet被創建的時機-->
    <load-on-startup>2</load-on-startup>
</servlet>

2).load-on-startup:可以指定Servlet被創建的時機.若爲負數,則第一次請求時或
被創建,若爲0或正數,則在Servlet容器加載時創建實例,且數值越小,越早被創建.

Servlet容器響應客戶請求的過程

①servlet引擎檢查是否已經裝載並創建了該Servlet的實例對象.如果是,則直接
執行第④步,否則,執行第②步.
②裝載並創建該Servlet的一個實例對象:調用該Servlet的構造器
③調用Servlet實例對象的init()方法
④創建一個用於封裝請求的ServletRequest對象和一個代表響應消息的ServletResponse
對象,然後調用Servlet的service()方法並將請求和響應對象作爲參數傳遞進去
⑤web應用程序被停止或重新啓動之前,Servlet引擎將卸載Servlet,並在卸載之前調用Servlet的

destroy()方法.

Servlet的註冊與執行
.Servlet程序必須通過Servlet容器來啓動運行,並且存儲目錄有特殊要求
,需要存儲在

 <servlet-mapping>
        <servlet-name>AnyName</servlet-name>
        <url-pattern>*.do</url-pattern>
    </servlet-mapping>

    <servlet-mapping>
        <servlet-name>AnyName</servlet-name>
        <url-pattern>/action/*</url-pattern>
    </servlet-mapping>

既帶斜槓又帶擴展名不合法
7.
封裝了Servlet的配置信息,並且可以獲取ServletContext對象

配置Servlet的初始化參數

 <init-param>
    <param-name>user</param-name>
    <param-value>root</param-value>
 </init-param>

 <init-param>
    <param-name>password</param-name>
    <param-value>1230</param-value>
 </init-param>

2).獲取

初始化參數:
getInitParameter(String name): 獲取指定參數名的初始化參數
getInitParameterNames():獲取指定配置的名字組成的Enumeration
String user = servletConfig.getInitParameter(“user”);
System.out.println(“user:”+user);

Enumration<String> names = servletConfig.getInitParameterNames();
while(names.hasMoreElements())
{
    String name = names.nextElement();
    String value = servletConfig.getInitParameter(name);
    System.out.println("^^"+name+":"+value);

}

3).獲取Servlet的配置名稱(用的很少)
String servletName = servletConfig.getServletName();

System.out.println(servletName);
8.getServletContext()(非常關鍵)
Servlet引擎爲每一個web應用程序都創建一個對應的ServletContext對象
ServletContext對象被包含在ServletConfig對象中,調用ServletConfig.getServletContext方法可以返回ServletContext對象的引用.

1).可以由ServletConfig獲取

2).該對象代表當前web應用,可以認爲ServletContext是當前web應用的一個大管家,可以從中獲取到當前web應用的各個方面的信息
①獲取當前web的初始化參數


class GenericServlet

1).是一個Servlet,是Servlet接口和ServletConfig接口的一個實現類。但是一個抽象類,其中 的service方法爲抽象的
2).如果新建的Servlet程序直接繼承GenericServlet會使開發更簡潔
3).具體實現
在GenericServlet 中一個ServletConfig類型的成員變量,在initial(ServletConfig)方法中對其進行調用,子類可以直接覆蓋init()在其中實現對Servlet的初始化
4).不建議直接覆蓋init(servletConfig),因爲如果忘記編寫super(ServletConfig),而還是用了ServletConfig接口的方法,則會出現空指針異常。
5).新建的initial(){}並非Servlet的生命週期方法,而init(ServletConfig)是生命週期方法


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章