Java Servlet常用對象總結__Java

來源:互聯網
上載者:User

一、概述

 servlet是在伺服器端執行的java程式,運行在伺服器端的Servlet容器中。要編寫一個Servlet,需要實現javax.servlet.Servlet介面。 JSP是servlet的擴充,jsp第一次運行時要先翻譯成JAVA代碼,在編譯成class檔案  而那個JAVA代碼就是servlet 。在TOMCAT的LIB目錄下有servlet-api.jar,jsp-api.jar。

 

1、Servle生命週期事件

對象

事件

監聽器介面和事件類別

Web上下文
(見訪問Web上下文)

初始化和銷毀

javax.servlet.
ServletContextListener 和

ServletContextEvent

屬性的添加、刪除或替代

javax.servlet.
ServletContextAttributeListener 和

ServletContextAttributeEvent

會話
(見維護客戶給狀態)

建立、失效和逾時

javax.servlet.http.
HttpSessionListener 和

HttpSessionEvent

屬性的添加、刪除或替代

javax.servlet.http.
HttpSessionAttributeListener  和

HttpSessionBindingEvent

 

2、範圍對象

範圍對象

哪些組件可以對其進行訪問

網路內容

javax.servlet.
ServletContext

Web上下文中的Web組件。見訪問Web上下文

會話

javax.servlet.
http.HttpSession

處理屬於會話的請求的Web組件。見維護用戶端狀態。

請求

javax.servlet.
ServletRequest

的子類型

處理請求的Web組件。

javax.servlet.
jsp.PageContext

建立對象的JSP頁。

 

二、 jsp內建對象

 

1、request  , HttpServletRequest,它包含了有關瀏覽器請求的資訊,並且提供了幾個用於擷取cookie,

header, 和session資料的有用的方法。 

2、response, HttpServletResponse對象,並提供了幾個用於設定送回 瀏覽器的響應的方法(如cookies,頭資訊等) 

3、out對象是javax.jsp.JspWriter的一個執行個體,並提供了幾個方法使你能用於向瀏覽器回送輸出結果。 

4、pageContext表示一個javax.servlet.jsp.PageContext對象。它是用於方便存取各種範圍的名字空間、servlet相關的對象的API,並且封裝了通用的servlet相關功能的方法。 

5、session表示一個請求的javax.servlet.http.HttpSession對象。Session可以存貯使用者的狀態資訊

6、applicaton 表示一個javax.servle.ServletContext對象。這有助於尋找有關servlet引擎和servlet環境的資訊

7、config表示一個javax.servlet.ServletConfig對象。該對象用於存取servlet執行個體的初始化參數。 

8、page表示javax.servlet.jsp.HttpJspPage,從該頁面產生的一個servlet執行個體。

 

 

      三、ServletContext、ServletContextListener、ServletContextEvent

 

         ServletContextListener介面,它能夠監聽ServletContext對象的生命週期,實際上就是監聽Web應用的生命週期。當Servlet容器啟動或終止Web應用時,會觸發ServletContextEvent事件,該事件由 ServletContextListener 來處理。在ServletContextListener 介面中定義了處理ServletContextEvent事件的兩個方法。contextInitialized(ServletContextEvent sce):當Servlet容器啟動Web應用時調用該方法。在調用完該方法之後,容器再對Filter初始化,並且對那些在Web應用啟動時就需要被初始化的Servlet進行初始化。 contextDestroyed(ServletContextEvent sce):當Servlet容器終止Web應用時調用該方法。在調用該方法之前,容器會先銷毀所有的Servlet和Filter過濾器。

       下面通過一個例子來介紹ServletContextListener的用法。CounterServlet類只能統計當Web應用啟動後,網頁被用戶端訪問的次數。如果重新啟動Web應用,計數器又會重新從1開始統計訪問次數。在實際應用中,往往需要統計自Web應用被發布後網頁被用戶端訪問的次數,這就要求當Web應用被終止時,計數器的數值被永久儲存在一個檔案中或者資料庫中,等到Web應用重新啟動時,先從檔案或資料庫中讀取計數器的初始值,然後在此基礎上繼續計數。

向檔案中寫入或讀取計數器的數值的功能可以由自訂的 MyServletContextListener類(參見常式4-11)來完成,它具有以下功能:

在 Web 應用程式啟動時從檔案中讀取計數器的數值,並把表示計數器的 Counter對象存放到 Web 應用程式範圍內。存放計數器的檔案的路徑為helloapp/count/count.txt。

在Web應用終止時把Web應用範圍內的計數器的數值儲存到count.txt檔案中。

常式4-11 MyServletContextListener.java

public class MyServletContextListener implements ServletContextListener{
public void contextInitialized(ServletContextEvent sce){
System.out.println("helloapp application is Initialized.");
     //擷取ServletContext對象
ServletContext context=sce.getServletContext();
     try{
//從檔案中讀取計數器的數值
BufferedReader reader=new BufferedReader(
new InputStreamReader(context.
getResourceAsStream("/count/count.txt")));
int count=Integer.parseInt(reader.readLine());
reader.close();
       //建立計數器對象
Counter counter=new Counter(count);
//把計數器對象儲存到Web應用範圍
context.setAttribute("counter",counter);
}catch(IOException e){e.printStackTrace();}
}
  public void contextDestroyed(ServletContextEvent sce){
System.out.println("helloapp application is Destroyed.");
     //擷取ServletContext對象
ServletContext context=sce.getServletContext();
     //從Web應用範圍獲得計數器對象
Counter counter=(Counter)context.getAttribute("counter");
     if(counter!=null){
try{
//把計數器的數值寫到count.txt檔案中
String filepath=context.getRealPath("/count");
filepath=filepath+"/count.txt";
PrintWriter pw=new PrintWriter(filepath);
pw.println(counter.getCount());
pw.close();
}catch(IOException e){e.printStackTrace();}
}
}
}
使用者自訂的MyServletContextListener監聽器只有先向Servlet容器註冊,Servlet容器在啟動或終止Web應用時,才會調用該監聽器的相關方法。在web.xml檔案中,<listener>元素用於向容器註冊監聽器:
<listener>
<listener-class>mypack.MyServletContextListener<listener-class />
</listener>

下面按如下步驟示範MyServletContextListener監聽器的作用。

(1)在helloapp/count目錄下建立count.txt檔案,在該檔案中存放了一個數字“5”。

(2)啟動 Tomcat。在瀏覽器中通過 http://localhost:8080/helloapp/counter 訪問CounterServlet,在第一次訪問該Servlet時,瀏覽器端顯示計數器的值為5。

(3)重新整理上述訪問 CounterServlet 的頁面,會看到每重新整理一次,計數器的值增加1,假定最後一次重新整理後的計數器的值為10。

(4)手工終止helloapp應用。查看helloapp/count/count.txt檔案,會發現在該檔案中存放的數字變為10。

(5)手工重新啟動 helloapp 應用。在瀏覽器中再次訪問 CounterServlet,當第一次訪問該Servlet時,瀏覽器端顯示計數器的值為10。

從上述實驗中可以看出,MyServletContextListener 監聽器與 CounterServlet 共用Web應用範圍內的代表計數器的Counter對象。監聽器在Web應用啟動或終止時會操縱Counter對象,而Servlet在每次響應客戶請求時會操縱Counter對象。

觀察MyServletContextListener及名為lifeInit的 LifeServlet在 Tomcat 控制台的列印結果的先後順序,會發現當 Web 應用程式啟動時,Servlet容器先調用MyServletContextListener的contextInitialized()方法,再調用lifeInit的init()方法;當Web應用終止時,Servlet容器先調用lifeInit的destroy()方法,再調用MyServletContextListener的contextDestroyed()方法。由此可見,在Web應用的生命週期中,ServletContext對象最早被建立,最晚被銷毀。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.