(1) HttpServletRequest類的Request對象
作用:代表請求對象,主要用於接受客戶端通過HTTP協議連接傳輸到服務器端的數據。
(2) HttpServletResponse類的Respone對象
作用:代表響應對象,主要用於向客戶端發送數據
(3) JspWriter類的out對象
作用:主要用於向客戶端輸出數據;
Out的基類是JspWriter
(4) HttpSession類的session對象
作用:主要用於來分別保存每個用戶信息,與請求關聯的會話;
會話狀態維持是Web應用開發者必須面對的問題。
(5) ServletContex類的application對象
作用:主要用於保存用戶信息,代碼片段的運行環境;
它是一個共享的內置對象,即一個容器中的多個用戶共享一個application對象,故其保存的信息被所有用戶所共享.
(6) PageContext類的PageContext對象
作用:管理網頁屬性,爲JSP頁面包裝頁面的上下文,管理對屬於JSP中特殊可見部分中已命名對象的訪問,它的創建和初始化都是由容器來完成的。
(7) ServletConfig類的Config對象
作用:代碼片段配置對象,表示Servlet的配置。
(8) Object類的Page(相當於this)對象
作用:處理JSP網頁,是Object類的一個實例,指的是JSP實現類的實例,即它也是JSP本身,只有在JSP頁面範圍之內纔是合法的。
(9)Exception
作用:處理JSP文件執行時發生的錯誤和異常
--------------------------------------------------
2、描述一下servlet的生命週期和基本架構。
1, 在服務器啓動時,當servlet被客戶首次請求或被配置好,這時由服務器加載servlet.<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Servlet的加載可以通過合用一個自定義的Java類加載工具(可允許自動Servlet重載)從本地或遠程地址來實現。這一步等同於
Class c = Class.forName(“com.sourceStream.MyServlet”);
這裏用的術語加載指同時加載和初始化servlet的過程。
2.服務器創建一個servlet類實例來爲所有請求服務。利用多線程,可以由單個servlet實例來服務於並行的請求。惟五的例外是,因爲實現SingleThreadModel接口的servlet,這樣,服務器會創建一個實例池並從中選擇一個來服務於每一新的請求。此步相當於以下java代碼:
Servlet s = (Servlet)c.newInstance();
3. 服務器調用Servlet的init()方法。它用來保證完成在首次請求servlet處理以前的執行過程。如果servlet創建了多個servlet實例,則爲每個實例調用一次init()方法。
4.服務器從包括在客戶請求中的數據裏構造一個ServletRequest或HttpServletRequest對象,還構造一個ServletResponse或HttpServletResponse對象來返回響應提供方法。其參數類型依賴於servlet是否分別擴展GenericServlet或HttpServlet.(注意:如果服務器沒有收到對這一servlet的請求,此步驟與以下5---7步驟將不會發生。)
5.服務器調用servlet的service()方法(對於Httpservlet,service()將調用更爲具體的方法:如:doGet() 或doPost()),在此步驟中作爲參數傳遞結構化對象。當並行的請求到來時,多個service()方法能夠同時運行在獨立的線程中。(除非servlet實現了SingleThreadModel接口)
6通過分析ServletReuest或HttpServletRequest對象。Service()方法處理客戶的請求.並調用ServletResponse或HttpServletResponse對象來響應。
7.如果服務器收到另一胩對該servlet的請求,這個處理過程從5步驟重複。
8.一旦servlet容器檢測到一個servlet要被卸載,這可能是因爲要回收資源或因爲它正在被關閉,服務器會在所有servlet的service()線程完成之後(或在服務器規定時間後)調用servlet的destroy()方法。然後servlet就可以進行無用存儲單元收集清理。Servlet容器不需要爲保留一個servlet而指定時間。
以上8個步驟就是servlet的生命週期。
-------------------------------------------------------------
3、多線程有幾種實現方法,都是什麼?
同步有幾種實現方法,都是什麼?
(1)通過繼承class Thread或實現Runnable接口,我們可以實現多線程
(2)通過synchronized實現資源同步
2.1 鎖標誌
2.1.1 每個對象都有一個標誌鎖。當對象的一個線程訪問了對象的某個synchronized數據(包括函數)時,這個對象就將被“上鎖”,所以被聲明爲synchronized的數據(包括函數)都不能被調用(因爲當前線程取走了對象的“鎖標誌”)。只有當前線程訪問完它要訪問的synchronized數據,釋放“鎖標誌”後,同一個對象的其它線程才能訪問synchronized數據。
2.1.2 每個class也有一個“鎖標誌”。對於synchronized static數據(包括函數)可以在整個class下進行鎖定,避免static數據的同時訪問。
2.2 non-static的synchronized數據只能在同一個對象的純種實現同步訪問,不同對象的線程仍可同時訪問。
2.3 對象的“鎖標誌”和class的“鎖標誌”是相互獨立的
(3)同步的優化
1) synchronized block
語法爲:synchronized(reference){ do this }
reference用來指定“以某個對象的鎖標誌”對“大括號內的代碼”實施同步控制。
參考:http://www.yesky.com/SoftChannel/72342371961929728/20031122/1747065.shtml
--------------------------------------------------------------------------------------
4、public private protected以及不寫時的區別?
private、protected、public是類成員(成員變量、成員方法)的訪問權限修飾符
訪問權限指本類中的成員可以被哪些類訪問
比如,被private修飾的成員不允許被其他類訪問,只允許被本類訪問;而被public所修飾的成員允許則能被所有類訪問
表7-1 類成員的訪問權限
|
被本類訪問 |
被子類訪問 |
被同一包中的其他類訪問 |
被所有類訪問 |
Private |
允許 |
不允許 |
不允許 |
不允許 |
Protected |
允許 |
允許 |
允許 |
允許 |
Public |
允許 |
允許 |
允許 |
不允許 |
friendly |
允許 |
不允許 |
允許 |
不允許 |
------------------------------------------------------------------
5、用JAVA實現數據庫查詢(寫一段完整的程序)。
class .forName(drive class);
Connection conn = DriverManger.getConnection(URL,username,password);
Statement stmt = conn.createStatement(sqk);
ResultSet rs = stmt.executeQuery();
while(rs.next)
{
rs.getString();
.......
}
呵~~~
我自己看的!