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的信息方法
特性:
l 單例,一個類只有一個對象;當然可能存在多個Servlet類!
l 線程不安全的!
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是沒什么可要釋放的,所以該方法一般都是空的