<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 188,comments - 176,trackbacks - 0

    servlet簡介
    servlet容器:

    負責處理客戶請求、把請求傳送給servlet并把結果返回給客戶。不同程序的容器實際實現可能有所變化,但容器與servlet之間的接口是由 servletAPI定義好的,這個接口定義了servlet容器在servlet上要調用的方法及傳遞給servlet的對象類。

    servlet的生命周期:
    l servlet容器創建servlet的一個實例

    l 容器調用該實例的init()方法

    l 如果容器對該servlet有請求,則調用此實例的service()方法

    l 容器在銷毀本實例前調用它的destroy()方法

    l 銷毀并標記該實例以供作為垃圾收集

    一旦請求了一個servlet,就沒有辦法阻止容器執行一個完整的生命周期。

    容器在servlet首次被調用時創建它的一個實例,并保持該實例在內存中,讓它對所有的請求進行處理。容器可以決定在任何時候把這個實例從內存中移走。在典型的模型中,容器為每個servlet創建一個單獨的實例,容器并不會每接到一個請求就創建一個新線程,而是使用一個線程池來動態的將線程分配給到來的請求,但是這從servlet的觀點來看,效果和為每個請求創建一個新線程的效果相同。

    servlet API
    servlet接口:

    public interface Servlet

    它的生命周期由javax.servlet.servlet接口定義。當你在寫servlet的時候必須直接或間接的實現這個接口。一般趨向于間接實現:通過從javax.servlet.GenericServlet或javax.servlet.http.HttpServlet派生。在實現 servlet接口時必須實現它的五個方法:

    init():

    public void init(ServletConfig config) throws ServletException

    一旦對servlet實例化后,容器就調用此方法。容器把一個ServletConfig對象傳統給此方法,這樣servlet的實例就可以把與容器相關的配置數據保存起來供以后使用。如果此方法沒有正常結束就會拋出一個ServletException。一旦拋出該異常,servlet就不再執行,而隨后對它的調用會導致容器對它重新載入并再次運行此方法。接口規定對任何servlet實例,此方法只能被調用一次,在任何請求傳遞給 servlet之前,此方法可以在不拋出異常的情況下運行完畢。

    service():

    public void service(ServletRequest req,ServletResponse res) throws ServletException,IOException

    只有成功初始化后此方法才能被調用處理用戶請求。前一個參數提供訪問初始請求數據的方法和字段,后一個提供servlet構造響應的方法。

    destroy():

    public void destroy()

    容器可以在任何時候終止servlet服務。容器調用此方法前必須給service()線程足夠時間來結束執行,因此接口規定當service()正在執行時destroy()不被執行。

    getServletConfig():

    public ServletConfig getServletConfig()

    在servlet初始化時,容器傳遞進來一個ServletConfig對象并保存在servlet實例中,該對象允許訪問兩項內容:初始化參數和ServletContext對象,前者通常由容器在文件中指定,允許在運行時向sevrlet傳遞有關調度信息,后者為servlet提供有關容器的信息。此方法可以讓servlet在任何時候獲得該對象及配置信息。

    getServletInfo():

    public String getServletInfo()

    此方法返回一個String對象,該對象包含servlet的信息,例如開發者、創建日期、描述信息等。該方法也可用于容器。

    GenericServlet類
    Public abstract class GenericServlet implants Servlet,ServletConfig,Serializable

    此類提供了servlet接口的基本實現部分,其service()方法被申明為abstract,因此需要被派生。init (ServletConfig conf)方法把servletConfig對象存儲在一個private transient(私有臨時)實例變量里,getServletConfig()方法返回指向本對象的指針,如果你重載此方法,將不能使用 getServletConfig來獲得ServletConfig對象,如果確實想重載,記住要包含對super.config的調用。2.1版的 API提供一個重載的沒有參數的init()方法。現在在init(ServletConfig)方法結束時有一個對init()的調用,盡管目前它是空的。2.1版API里面,此類實現了ServletConfig接口,這使得開發者不用獲得ServletConfig對象情況下直接調用 ServletConfig的方法,這些方法是:getInitParameter(),getInitParameterNames(), getServletContext。此類還包含兩個寫日志的方法,它們實際上調用的是ServletContext上的對應方法。log(String msg)方法將servlet的名稱和msg參數寫到容器的日志中,log(String msg,Throwable cause)除了包含servlet外還包含一個異常。

    HttpServlet類
    該類擴展了GenericServlet類并對servlet接口提供了與HTTP更相關的實現。

    service():

    protected void service(HttpServletRequest req,HttpServletResponse res) throws ServletException,IOException

    public void service(HttpServletRequest req,HttpServletResponse res)throws ServletException,IOException

    該方法作為HTTP請求的分發器,這個方法在任何時候都不能被重載。當請求到來時,service()方法決定請求的類型(GET,POST, HEAD,OPTIONS,DELETE,PUT,TRACE),并把請求分發給相應的處理方法(doGet(),doPost(),doHead(), doOptions(),doDelete(),doPut(),doTrace())每個do方法具有和第一個service()相同的形式。為了響應特定類型的HTTP請求,我們必須重載相應的do方法。如果servlet收到一個HTTP請求而你沒有重載相應的do方法,它就返回一個說明此方法對本資源不可用的標準HTTP錯誤。

    getLatModified():

    protected long getLastModified(HttpServletRequest req)

    該方法返回以毫秒為單位的的自GMT時間1970年1月1日0時0分0秒依賴的最近一次修改servlet的時間,缺省是返回一個負數表示時間未知。當處理GET請求時,調用此方法可以知道servlet的最近修改時間,服務器就可決定是否把結果從緩存中去掉。

    HttpServletRequest接口
    public interface HttpServletRequest extends ServletRequest

    所有實現此接口的對象(例如從servlet容器傳遞的HTTP請求對象)都能讓servlet通過自己的方法訪問所有請求的數據。下面是一些用來獲取表單數據的基本方法。

    getParameter()

    public String getParameter(String key)

    此方法試圖將根據查詢串中的關鍵字定位對應的參數并返回其值。如果有多個值則返回列表中的第一個值。

    getParameterValues():

    public String[] getParameterValues(String key)

    如果一個參數可以返回多個值,比如復選框集合,則可以用此方法獲得對應參數的所有值。

    GetParameterNames():

    Public Enumeration getParameterNames()

    此方法返回一個Enumeration對象,包含對應請求的所有參數名字列表。

    HttpServletResponse接口
    public interface HttpServletResponse extends servletResponse

    servlet容器提供一個實現該接口的對象并通過service()方法將它傳遞給servlet。通過此對象及其方法,servlet可以修改響應頭并返回結果。

    setContentType():

    public void setContentType(String type)

    在給調用者發回響應前,必須用此方法來設置HTTP響應的MIME類型。可以是任何有效的MIME類型,當給瀏覽器返回HTML是就是”text/html”類型。

    getWriter():

    public PrintWriter getWriter()throws IOException

    此方法將返回PrintWriter對象,把servlet的結果作為文本返回給調用者。PrintWriter對象自動把Java內部的UniCode編碼字符轉換成正確的編碼以使客戶端能夠閱讀。

    getOutputStream():

    public ServletOutputStream getOutputStream() throws IOException

    此方法返回ServletOutputStream對象,它是java.io.OutputStream的一個子類。此對象向客戶發送二進制數據。

    setHeader():

    public void setHeader(String name,String value)

    此方法用來設置送回給客戶的HTTP響應頭。有一些快捷的方法用來改變某些常用的響應頭,但有時也需要直接調用此方法。

    編譯條件
    需要從http://java.sun.com/products/servlet/ 獲得一份JSDK的拷貝,并把servlet.jar移動到JDK安裝目錄下的\jre\lib\ext目錄下。如果是JDK1.1,則移動到\lib 下,并在CLASSPATH中加入servlet.jar的絕對路徑。

    運行條件
    需要Apache Jserv,Jrun Servlet Exec,Java Web Server,Weblogic,WebSphere,Tomcat,Resin等servlet服務器端程序。

    簡單范例

     

    import java.io.*

    import javax.servlet.*

    import javax.servlet.http.*



    public class HelloWorld extends HttpServlet 


    public void doGet(HttpServletRequest request, HttpServletResponse response) 

    throws IOException, ServletException 



    response.setContentType(
    "text/html"); 

    PrintWriter out 
    = response.getWriter(); 

    out.println(
    ""); 

    out.println(
    ""); 

    out.println(
    ""); 

    out.println(
    ""); 

    out.println(
    ""); 

    out.println(
    ""); 

    out.println(
    " Hello World!"); 

    out.println(
    ""); 

    out.println(
    ""); 

    }
     

    }
     



    servlet的性能和效率
    一個servlet僅被初始化一次而執行多次,因此極小的低效性也會隨著時間的增加而產生很很大的影響。在代碼中需要考慮String對象的使用,如果產生HTML響應需要用到很多字符串時,不應該為每一個字符串生成一個String對象,因為這會產生大量的String和 StringBuffer對象,造成大量的對象構造消耗和垃圾收集負擔,解決的辦法是一行一行的把所有需要寫入的直接寫入PrintWriter中,或者創建一個StringBuffer對象,并使用append()方法將文本加入。

    及時回送
    有時,程序需要花費很長時間執行,在這種情況下應該回送給客戶端一些信息,而不是長時間顯示白屏,這可以在執行到一定程度就回送一些東西,可以使用PrintWriter的flush()方法強制將現有的內容回送給瀏覽器。

    http://jiahaolin.bokee.com

    posted on 2007-05-24 11:17 cheng 閱讀(322) 評論(0)  編輯  收藏 所屬分類: JSP/Servlet
    主站蜘蛛池模板: 视频免费1区二区三区| 亚洲中文字幕无码一去台湾| 理论秋霞在线看免费| 日韩免费高清视频网站| 国产精品亚洲综合久久| 最近中文字幕无吗免费高清| 亚洲伊人久久精品| 男人的好免费观看在线视频| 亚洲黄色在线电影| 2021久久精品免费观看| 亚洲欧洲国产成人精品| 黄页免费的网站勿入免费直接进入| 久久亚洲国产精品成人AV秋霞| 57pao一国产成永久免费| 亚洲经典在线观看| 性生交片免费无码看人| 亚洲av无码av在线播放| 亚洲精品成人片在线观看| a级黄色毛片免费播放视频| 久久亚洲精品中文字幕无码 | 亚洲午夜视频在线观看| 日韩精品无码专区免费播放| 亚洲日本人成中文字幕| 午夜亚洲av永久无码精品| 久久99久久成人免费播放| 久久国产亚洲观看| 免费a级毛片无码a∨蜜芽试看| 激情无码亚洲一区二区三区| 久久亚洲色一区二区三区| 99视频免费播放| 亚洲av片在线观看| 亚洲精品午夜国产VA久久成人| 2021在线观看视频精品免费| 亚洲欧美日韩一区二区三区| 亚洲人成网77777亚洲色| 91九色老熟女免费资源站| 免费观看四虎精品成人| 亚洲精品乱码久久久久久下载 | 亚洲一区二区三区深夜天堂| 亚洲一区二区三区免费在线观看| 免费一级做a爰片久久毛片潮喷|