javaweb三大組件之servlet


javaWeb有三大組件:Filter、Servlet、Listener

jsp有九大內置對象:application、session、request、response、out、page、pagecontent、config、exception

javaEE三大組件技術:

Servlet,JSP,EJB
  Servlet(Server Applet),全稱Java Servlet,未有中文譯文。是用Java編寫的服務器端程序。其主要功能在於交互式地瀏覽和修改數據,生成動態Web內容。狹義的Servlet是指Java語言實現的一個接口,廣義的Servlet是指任何實現了這個Servlet接口的類,一般情況下,人們將Servlet理解為后者。
  Servlet運行於支持Java的應用服務器中。從實現上講,Servlet可以響應任何類型的請求,但絕大多數情況下Servlet只用來擴展基於HTTP協議Web服務器
  JSP全名為Java Server Pages,中文名叫java服務器頁面,其根本是一個簡化的Servlet設計,它[1] 是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標准。JSP技術有點類似ASP技術,它是在傳統的網頁HTML(標准通用標記語言的子集)文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP標記(tag),從而形成JSP文件,后綴名為(*.jsp)。 用JSP開發的Web應用是跨平台的,既能在Linux下運行,也能在其他操作系統上運行。
  它實現了Html語法中的java擴展(以 <%, %>形式)。JSP與Servlet一樣,是在服務器端執行的。通常返回給客戶端的就是一個HTML文本,因此客戶端只要有瀏覽器就能瀏覽。
  EJB是sun的JavaEE服務器端組件模型,設計目標與核心應用是部署分布式應用程序。簡單來說就是把已經編寫好的程序(即:類)打包放在服務器上執行。憑借java跨平台的優勢,用EJB技術部署的分布式系統可以不限於特定的平台。EJB (Enterprise JavaBean)是J2EE(javaEE)的一部分,定義了一個用於開發基於組件的企業多重應用程序的標准。其特點包括網絡服務支持和核心開發工具(SDK)。 在J2EE里,Enterprise Java Beans(EJB)稱為Java 企業Bean,是Java的核心代碼,分別是會話Bean(Session Bean),實體Bean(Entity Bean)和消息驅動Bean(MessageDriven Bean)。

三大框架:spring, structs, hibernate

 

Servlet是JavaWeb三大組件之一(Servlet、Filter、Listener)
  * Servlet是用來處理客戶端請求的動態資源
  * Servlet的任務有:
    > 獲取請求數據
    > 處理請求

    > 完成響應

Servlet會在接到第一次請求時被創建,也可以在在服務器啟動時就被創建,這需要在配置文件<servlet>中添加一條配置信息    <load-on-startup></load-on-startup>,

標簽中添加非負整數即可

  * Servlet接口方法:

前面三個為生命周期

    > void init(ServletConfig)

servlet的初始化方法,只在創建servlet實例時候調用一次

    > void service(ServletRequest,ServletResponse)

servlet的處理請求方法,在servle被請求時,會被馬上調用,每處理一次請求,就會被調用一次。ServletRequest類為請求類,ServletResponse類為響應類

    > void destory()

servlet銷毀之前執行的方法,只執行一次,用於釋放servlet占有的資源,通常Servlet是沒什么可要釋放的,所以該方法一般都是空的

    > ServletConfig getServletConfig()

獲取servlet的配置信息的方法,所謂的配置信息就是WEB-INF目錄下的web.xml中的servlet標簽里面的信息

    > String getServletInfo()

獲取servlet的信息方法

特性:

單例,一個類只有一個對象;當然可能存在多個Servlet類!

線程不安全的!

 

Servlet類由我們來寫,但對象由服務器來創建,並且由服務器來調用相應的方法。

配置文件中對應servlet的部分

  <servlet>
    <servlet-name>AServlet</servlet-name><!-- 此處名稱可以隨意寫 -->
    <servlet-class>edu.AServlet</servlet-class><!-- 此處寫類名 -->
  </servlet>


  <servlet-mapping>
    <servlet-name>AServlet</servlet-name><!-- 與上面名稱對應 -->
    <url-pattern>/servlet/AServlet</url-pattern><!-- 此處是自動生成的路徑,也可自己寫 -->
  </servlet-mapping>




 1). 服務器創建Servlet:
  * 當Servlet第一次被請求時,或服務器啟動時,服務器會創建Servlet實例。
  * 服務器默認是在servlet第一次被請求時創建Servlet實例,如果希望服務器啟動時就創建Servlet實現需要在web.xml中配置
  * 服務器只為一個類型的Servlet創建一個實例對象,所以Servlet是單例的;


  2). 服務器初始化Servlet:
  * 當服務器創建Servlet實例后會馬上調用Servlet的init(ServletConfig)方法,完成對Servlet的初始化;
  * init(ServletConfig)只會被調用一次
  * 服務器會在調用init()方法時傳遞ServletConfig參數
  
  3). 服務器使用Servlet處理請求:
  * 當Servlet被請求時,服務器會調用Servlet的service(ServletRequest,ServletResponse)方法
  * service(ServletRequest,ServletResponse)方法每處理一次請求,就會被調用一次,所以它可能會被調用N次
  * 因為Servlet是單例的,所以可能在同一時刻一個Servlet對象會被多個請求同時訪問,所以這可能出現線程案例問題
  * Servlet不是線程案例的,這有助與提高效率,但不能讓Servlet具有狀態,以免多個線程爭搶數據


  4). 服務器銷毀Servlet
  * 服務器通常不會銷毀Servlet,通常只有在服務器關閉時才會銷毀Servlet
  * 服務器會在銷毀Servlet之前調用Servlet的destory()方法
  * 可以在destory()方法中給出釋放Servlet占有的資源,但通常Servlet是沒什么可要釋放的,所以該方法一般都是空的


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM