1. java中的Servlet的定義,Servlet的具體用途
Servlet是一個實現了Servlet介面的類,一個與訪問協議和平台無關的、運行在Servlet容器中的Java程序。
針對Servlet實現技術,SUN公司提供了一套標準的Java Servlet API以便於更快速、規范地開發Servlet程序。這套Servlet API中,最重要的兩個軟體包是:javax.servlet、javax.servlet.http。
javax.servlet是一個與通信協議無關的通用軟體包;javax.servlet.http是一個支持HTTP訪問協議的軟體包,這兩個軟體包的同時存在,使得Servlet API能支持任何協議的請求/響應。
在javax.servle中,包含著一套常用介面,負責承擔指定的任務。下表中列出了常用的類和介面:
javax.servlet軟體包:
javax.servlet包中定義了與通信協議無關的介面和類。
常用介面:
RequestDispatcher、Servlet、ServletConfig、ServletContext、ServletRequest、ServletResponse。
常用類:
GenericServlet、ServletInputStream、ServletOutputStream。
1、RequestDispatcher介面
public interface RequestDispatcher;
資源調度器介面,用於定義一個在伺服器內部直接實現資源轉發的對象。
RequestDispatcher對象由Servlet容器創建,用於封裝並調度由一個特定的URL定義的伺服器資源。
(1)請求傳遞方法
public void forward(ServletRequest request,
ServletReponse response) throws ServletException,IOException
從一個Servlet向伺服器上的另一個資源傳遞請求。
將請求轉發給其他資源時,將由被調用的資源負責對請求作出響應,而原先Servlet的執行則終止。
public void include(ServletRequest request,
ServletResponse response) throws ServletException,IOException
從一個Servlet向伺服器上的另一個資源傳遞請求。
將請求轉發給其他資源時,被調用的Servlet對該請求作出的響應將並入原先的響應對象中,原先的Servlet還可以繼續輸出響應消息。
2、Servlet介面
public interface Servlet;
開發一個Servlet需要實現的基礎介面。
介面中定義了5個方法:
init():Servlet初始化方法,通過init()方法可以獲得容器創建的ServletConfig對象
service():請求處理方法
destroy():Servlet實例銷毀方法
getServletConfig():獲取ServletConfig配置對象方法
getServletInfo():獲取Servlet相關信息方法
(1)初始化方法
public void init(ServletConfig config) throws ServletException
Servlet容器會在Servlet實例化之後,調用init方法對Servlet對象進行初始化,該方法由Servlet容器順序調用,無需Servlet自身考慮何時執行。
(2)服務方法
public void service(ServletRequest request,
ServletResponse response) throws ServletException,IOException
當Servlet容器接收到客戶請求時,調用service方法響應客戶請求,service方法在Servlet實例化、初始化之後被調用,並且可以被多次調用。
(3)銷毀方法
public void destroy()
當Servlet實例從伺服器中移除或服務停止時,Servlet容器調用destroy方法銷毀Servlet實例。
(4)獲取Servlet配置對象方法
public ServletConfig getServletConfig()
獲取一個由Servlet容器創建的ServletConfig配置對象,這個對象常常用在Servlet初始化方法中,將初始化參數封裝在ServletConfig對象中,然後傳遞給Servlet。
(5)獲取Servlet相關信息方法
public String getServletInfo()
獲取關於Servlet的一些相關信息,返回的字元串是純文本格式而不帶有任何標記(例如:HTML、XML等)。
3、ServletConfig介面
public interface ServletConfig;
Servlet配置信息介面,在Servlet初始化時,Servlet容器將Servlet初始化參數封裝在ServletConfig對象中,並傳遞給Servlet,一個Servlet實例只有一個ServletConfig對象。
介面中,只定義了4個方法:
getInitParameter():獲取Servlet指定初始化參數的值
getInitParameterNames():獲取Servlet所有初始化參數名稱
getServletContext():獲取Servlet容器為WEB應用創建的Servlet上下文環境對象ServletContext
getServletName():獲取Servlet名稱
(1)獲取初始化參數方法
public String getInitParameter(String name)
根據初始化參數名稱,獲取Servlet指定初始化參數的值,如果指定的參數不存在,返回空值null。
public Enumeration getInitParameterNames()
獲取Servlet所有初始化參數名稱,如果Servlet沒有初始化參數,返回一個空列表。
(2)獲取Servlet上下文環境方法
public ServletContext getServletContext()
獲取Servlet容器為WEB應用創建的Servlet上下文環境對象ServletContext,WEB伺服器啟動的時候,在載入WEB應用時,為每個載入的WEB應用創建一個代表WEB應用Servlet上下文環境對象。
(3)獲取Servlet名稱方法
public String getServletName()
獲取正在訪問的這個Servlet的名稱。
以上就是Servlet相關問題的解答,更多關於Java Web方面的問題可以看下這個詳細的視頻教程網頁鏈接,希望我的回答能幫到你。
2. java servlet的工作原理是什麼
servlet 編程,需要引用以下兩個類和介面:javax.servlet 和 javax.servlet.http,在這些類和介面中,javax.servlet.Servlet介面尤為重要。所有的 servlet 必須實現這個介面或繼承已實現這個介面的類。
Servlet 介面有五個方法,如下:
public void init(ServletConfig config) throws ServletException public void service(ServletRequest request, ServletResponse response) throws ServletException, java.io.IOException public void destroy() public ServletConfig getServletConfig() public java.lang.String getServletInfo()
init、service和 destroy 方法是 Servlet 生命周期的方法。當 Servlet 類實例化後,容器載入 init,以通知 servlet 它已進入服務行列。init 方法必須被載入,Servelt 才能接收和請求。如果要載入資料庫驅動程序、初始化一些值等等,程序員可以重寫這個方法。在其他情況下,這個方法一般為空。
從service 中刪除 Servlet 實例之前,容器調用 destroy 方法。在 servlet 容器關閉或servlet 容器需要更多的內存時,就調用它。這個方法只有在servlet 的service 方法內的所有線程都退出的時候,或在超時的時候才會被調用。destroy 方法給了 servlet 機會,來清除所有候住的資源(比如:內存,文件處理和線程),以確保在內存中所有的持續狀態和 servlet的當前狀態是同步的
3. Java Servlet 的核心工作機制
Servlet是運行在Servlet容器中的,由Servlet容器來負責Servlet實例的查找、創建以及整個生命周期的管理,Servlet整個生命周期可以分為四個階段:類裝載及實例創建階段、實例初始化階段、服務階段以及實例銷毀階段。
類裝載及實例創建階段
默認情況下,Servlet實例是在接受到第一個請求時進行創建並且以後的請求進行復用,如果有Servlet實例需要進行一些復雜的操作,需要在初始化時就完成,比如打開文件、初始化網路連接等,可以配置在伺服器啟動時就創建實例,具體配置方法為在聲明servlet標簽中添加<load-on-startup>1</load-on-startup>標簽。
初始化 init(ServletConfig config)
一旦Servlet實例被創建,將會調用Servlet的inint方法,同時傳入ServletConfig實例,傳入Servlet的相關配置信息,init方法在整個Servlet生命周期中只會調用一次。
服務 services()
為了提高效率,Servlet規范要求一個Servlet實例必須能夠同時服務於多個客戶端請求,即service()方法運行在多線程的環境下,Servlet開發者必須保證該方法的線程安全性。
銷毀 destory()
當Servlet容器將決定結束某個Servlet時,將會調用destory()方法,在destory方法中進行資源釋放,一旦destory方法被調用,Servlet容器將不會再發送任何請求給這個實例,若Servlet容器需再次使用該Servlet,需重新再實例化該Servlet實例。
二、Servlet執行流程
web伺服器接受到一個http請求後,web伺服器會將請求移交給servlet容器,servlet容器首先對所請求的URL進行解析並根據web.xml 配置文件找到相應的處理servlet,同時將request、response對象傳遞給它,servlet通過request對象可知道客戶端的請求者、請求信息以及其他的信息等,servlet在處理完請求後會把所有需要返回的信息放入response對象中並返回到客戶端,servlet一旦處理完請求,servlet容器就會刷新response對象,並把控制權重新返回給web伺服器。
三、與其它技術的比較
與其它服務相比servlet有以下的一些優點:
1、運行速度上比CGI快,因為使用了多線程
2、servlet使用了標準的api,可被許多web服務支持
3、與系統無關性,一次編譯多次使用
轉自http://www.javaeye.com/topic/952866