一.servlet簡介
servlet(server applet)是sun公司提供的一門用于開發動態web資源的技術
sun公司在其API中提供了servlet接口,如果用戶想要開發web資源,需要:
1.編寫一個java類,實現servlet接口
2.把開發好的java類部署到web服務器中
二.servlet的運行過程
servlet是由web服務器調用,web服務器收到客戶端的servlet訪問請求后:
1.web服務器首先檢查是否已經裝載并創建了該servlet的實例對象
是----執行第4步
不是--執行第2步
2.裝載并創建該servlet的一個實例對象
3.調用servlet實例對象的init()方法
4.創建一個用于封裝http請求消息的HttpServletRequest對象和封裝http響應消息的HttpServletResponse對象,然后調用servlet的service()方法,并將請求和響應作為參數傳遞進去
5.web應用程序被停止或重新啟動之前,servlet引擎將卸載Servlet,并在卸載之前Servlet的destory()方法
與生命周期有關的方法
可見Servlet的方法是與生命周期有關的方法,那么來看一下它的與生命周期有關的方法
·public void init(ServletConfig config)throws ServletException
多個客戶請求Servlet時,引擎會為每個客戶啟動一個線程,所以Servlet類的成員變量被所有的線程共享(Servlet是單實例多線程)
·public void service(HttpServletRequest request ,HttpServletResponse response)
throw ServletException,IOException
處理用戶的請求和響應,每個用戶的請求Servlet都會調用該方法,但是調用的時候在不同的線程中,所以互不干擾
·public destory()
當Servlet引擎終止服務時,比如關閉服務器,destory就會被執行,消滅servlet對象
三.Servlet接口的實現類
Servlet接口Sun公司定義了兩個默認實現類GenericServlet(空實現)和HttpServlet(能夠處理htpp請求的servlet)
在開發中我們只需要繼承HttpServlet類,再其service()方法中進行請求處理和數據相應
四.訪問開發好的Servlet資源
由于客戶端(瀏覽器)是通過URL地址訪問web服務器中的資源,所以Servlet程序想要被訪問就必須把Servlet映射到一個URL地址上
·在web.xml中配置
<servlet>元素用來注冊Servlet,它包含有兩個主要的子元素
<servlet-name>注冊名稱
<servlet-class>完整類名
<load-on-startup>創建web應用程序的時候裝載該Servlet
<init-param>配置屬性
<servlet>
<servlet-name>Servlet</servlet-name>
<servlet-class>cctv.session.Servlet</servlet-class>
</servlet>
<servlet-mapping>元素用來映射一個已注冊的Servlet的一個對外訪問路徑
<servlet-name>注冊名稱
<url-pattern>對外訪問路徑
<servlet-mapping>
<servlet-name>Servlet</servlet-name>
<url-pattern>/servlet/servlet</url-pattern>
</servlet-mapping>
五.Servlet的特點
1.針對客戶端的多次Servlet請求,服務器只會創建一個Servlet實例對象,也就是說Servlet實例對象一旦創建,它就會駐留在內存中,為后續的其它請求服務,直至web容器退出,servlet實例對象才會銷毀.
2.在Servlet生命周期中init()方法只會調用一次,對于service()方法,每次請求都會去調用該方法并且實例請求響應對象
六.線程安全(等待更新)
實現SingleThreadModel接口
七.Servlet的一些對象
ServletConfig對象
Config翻譯過來是配置的意思,可想而知這個對象是用來配置文件的,那么它是如何來配置文件的?
在web.xml文件中利用<init-param>為servlet配置一些初始化參數
儲存以鍵值對的形式進行
<init-param>
<param-name>url</param-name>
<param-value>jdbc:MySQL://localhost:3306</param-value>
</init-param>
通過該對象的getInitParameter(name)方法獲取name的value,或者通過getInitParameterNames()方法獲取枚舉器然后進行迭代獲取所有的name與value
ServletContext對象
Context翻譯過來是上下文的意思,可想而知這個對象是用來代表這個web應用的
新聞熱點
疑難解答