Servlet(1)

Servlet本質上就是一個java類,只不過運行在Servlet容器中

Servlet 簡介

  • Java Servlet 是和平臺無關的服務器組件,它運行在Servlet容器中。Servlet容器負責Servlet和客戶的通信以及調用Servlet方法,Servlet和客戶的通信採用”請求/響應”的模式。
  • Servlet可完成一下功能
    - 創建並返回客戶請求的動態HTML頁面
    - 創建可嵌入到現有HTML頁面中的部分HTML頁面。
    - 與其他服務器資源進行通信。

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

 - 1.Servlet引擎檢查是否已經裝載並創建該Servlet實例對象,有4否2
 - 2.裝載並創建Servlet的一個實例對象:調用該Servlet的構造器
 - 3.調用init()方法。
 - 4.創建一個用於封裝請求的ServletRequest對象和一個代表響應消息的ServletReponse,然後調用Servlet的service()方法並將請求和響應對象作爲參數傳遞進去。
 - 5.Web程序在停止或重新啓動前,Servlet引擎卸載Servlet,並在卸載之前調用Servlet的destroy()方法。

Servlet生命週期方法:

都是被Servlet容器負責調用
1.構造器:只有第一次請求servlet時,創建Serrvlet的實例,是單實例的。(如果在web.xml中配置load-on-startup值爲正數,在web應用被Servlet容器加載時創建實例,數值越小越早被創建。)
2.init方法:只調用一次,創建實例後調用,初始化當前Servlet。
3.service:每次請求都會調用service方法。
4.destory:終止程序前,被調用,釋放當前servlet所佔用的資源。

Servlet註冊和運行

  • Servlet程序必須通過Servlet容器來運行,並且存儲目錄有特殊要求,通常要求存儲在WEB-INF/classes目錄中。
  • Servlet程序必須在WEB引用程序的Web.xml文件中進行註冊和映射其訪問路徑,纔可以被Servlet引擎加載和被外界訪問。
  • 一個Servlet元素用於註冊一個Servlet,它包含倆個主要的子元素:servlet-name和servlet-class,分別用來設置servlet的註冊名稱和Servlet完整類名。
    • 一個Servlet-mapping元素用於映射一個已註冊的Servlet的一個對外訪問路徑,它包含倆個子元素:servlet-name和url-pattern分別用於指定Servlet的註冊名稱和對外訪問路程。

Servlet註冊細節

  • 同一個Servlet可以被映射到多個URL上,即多個servlet-mapping的子元素servlet-name的設置值可以是一個Servlet的註冊名。
  • 在Servlet映射的URL可以使用*通配符,但只能是倆種固定格式:一種是”.擴展名”,另外一種是以正斜槓(/)開頭並以” /“結尾。
<servlet-mapping>
    <servlet-name>anyna</servlet-name>
    //擴展名匹配:表示可以訪問以.do結尾路徑
    <url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-mapping>
    <servlet-name>anyna</servlet-name>
    //目錄匹配 表示可以訪問action下任意內容
    <url-pattern>/action/*</url-pattern>
</servlet-mapping>

Servletconfig對象

  • 先配置servlet初始化參數
web.xml
<!-- 節點必須在load-on-startup前面-->
<init-param>
    <!--參數名 -->
    <param-name>jdbc</param-name>
    <!--參數值 -->
    <param-value>mysql</param-value>
</init-param>
  • 獲取servlet初始化參數
    getInitParameter(String name):獲取指定的參數名的初始化參數。
String name=servletConfig.getInitParameter("jdbc")

getInitParameterNames():獲取參數名組成的Enumeration對象

Enumeration<String> names=servletConfig.getInitParameterNames()
  • 獲取Servlet的配置名稱(瞭解)
    getServletName()

  • getServletContext()

ServletContext對象

  • Servlet引擎爲每一個Web應用程序都創建一個對應的ServletContext對象,ServletContext對象被包含在ServletConfig對象中,調用ServletConfig.getServletContext方法可以返回ServletContext對象的引用。
  • 由於一個Web應用的所有Servlet都共享一個ServletContext對象。所以Servlet對象被稱之爲application對象(Web應用程序對象)。
  • 功能
    -獲取Web應用程序的初始化參數
    記錄日誌
    application域範圍的屬性
    訪問資源文件
    獲取虛擬路徑所映射的本地路徑
    WEB應用程序之間的訪問
    ServletContext的其他方法
  • 配置當前Web應用初始化參數
<context-param>
    <param-name>driver</param-name>
    <param-value>com.mysql.jdbc.Driver</param-value>
</context-param>
  • 獲取Web應用初始化參數
    getInitParameter()
ServletContext servletContext=servletConfig.getServletContext();
String driver=servletContext.getInitParameter("driver");

getInitParameterNames()

Enumeration<String> names=servletContext.getInitParameterNames()
  • 獲取Web應用的某一個文件的絕對路徑(必須在WebContent裏面)
    getRealPath
  • 獲取項目路徑
    getContextPath

  • 獲取當前Web應用某一個文件對應輸入流
    getResourceAsStream(String path)

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