Welcome to Yumao′s Blog.
Hello Servlet Day05
, 2012年04月26日 , Java Language , 评论 在〈Hello Servlet Day05〉中留言功能已關閉 ,

1、Servlet的生命周期及相關的核心類與接口
1)核心類與接口
a,Servlet接口
init(ServletConfig config):容器
在創建一個servlet對象之後,會立即調用
該方法。容器在調用init方法之前,會先fig對象。也就是說,
ServletCo
創建一個ServletConnfig對象會作為參數傳遞給servlet
對象。
service(ServletRequest request,
ServletResponse response):容器收到客戶端的
請求之後,會調用該方法來處理請求。
destroy(): 容器在銷毀servlet對象之前,會調用
該方法。
b,GenericServlet抽象類(實現了Servlet
接口中的init,destroy方法)
c,HttpServlet抽象類(繼承GenericServlet,
實現了service方法)
該service方法會依據請求方式調用doGet
/doPost方法,所以,可以通過override
doGet/doPost方法來實現請求的處理。
d,ServletConfig接口:
//訪問servlet的初始化參數,在web.xml文件當中
//使用配置的參數。
String getInitParamter(String paraName);
如何配置servlet初始化參數?
web.xml中,添加

author tarena
e,ServletRequest是HttpServletRequest的父接口。
ServletResponse是HttpServletResponse的父接口。
2)生命周期
servlet容器如何創建servlet對象,然後分配
其資源,調用其方法完成請求處理,最後銷
毀servlet對象的整個過程。
第一階段: 實例化
當請求到達容器時,容器會先檢查對應的
servlet對象是否存在,如果不存在,則
創建servlet對象,如果存在,不再創建。
容器在啟動的時候,會檢查servlet的配置
信息,如果某個servlet配置了
參數,則會先對該servlet進行實例化和初始化。
參數值是一個>=0的整數,越小,優先級越高。
指的是先實例化。
第二階段: 初始化
容器接下來,會調用servlet對象的init方法。
該方法只會執行一次,用於初始化。
init方法可以override,建議
override init()。
而不是override init(ServletConfig)
第三階段:就緒
容器調用servlet對象的service方法來處理請求。
第四階段:銷毀
容器在銷毀servlet對象之前,會先調用destroy
方法。
2、jsp
(1)jsp是什麼?
java server page(java服務器頁面技術)
sun公司制訂的一種服務器端動態頁面技術規範。
因為直接使用servlet開發動態頁面過於麻煩,並且,
難以維護(直接使用out.println輸出動態頁面),所以,
sun制訂了一種更好的生成動態頁面技術規範,即jsp,
jsp只需要在html文件內部添加一些java代碼就可以生成
動態頁面,相對於servlet,要簡單方便。
(2) 如何寫jsp?
step1 寫一個以.jsp為後綴的文件。
step2 在文件內部,可以添加如下內容:
a, html(html,css,javascript) : 直接添加即可。
b, java代碼:
java代碼片斷 <% java代碼 %>
jsp表達式 <%= java表達式%>
c, 隱含對象:直接使用
在jsp文件內部,不用聲明和創建,就可以
直接使用的對象。因為容器負責隱含對象的
聲明和創建過程。
out
request
response
d,指令:通知容器,在將.jsp文件轉換成
.java文件時,作一些額外的處理。
page指令
import屬性: 導入包
比如 :
<%@page import="java.util.*"%>
<%@page import="java.util.*,java.text.*"%>
pageEncoding屬性: 告訴容器,.jsp文件保存的
編碼。
contentType屬性:在.jsp文件對應的servlet類
當中,添加response.setContentType語句。
(3) jsp的執行過程:
step1 將.jsp文件轉換成.java文件(其實就是一個
servlet)。
a, html —-> service方法里,使用out.write()輸出。
out.println()會將null直接輸出,而out.write()
會將null轉換成””輸出。
b, <% %> —>service方法里,照搬。
c, <%= %> —>service方法里,使用out.print()
輸出。
step2 容器編譯該servlet,實例化,初始化,
調用其service方法。

練習:
寫一個 employee_list.jsp,會以表格的方式顯示
所有的僱員的信息。

3、轉發
(1)什麼是轉發?
一個web組件(servlet/jsp)將未處理完的任務
轉交給另外一個web組件繼續處理。
常用的使用場合:
servlet將處理得到的數據轉發給jsp,由jsp
生成合適的頁面。
(2)編程:
step1 將數據綁訂到request對象上。
request.setAttribute(String name,
Object obj);
step2 獲得一個轉發器
//uri:要轉發的目的地,比如是一個jsp的地址
RequestDispatcher rd =
request.getRequestDispatcher(String uri);
step3 轉發
rd.forward(request,response);
在轉發的目的地,可以使用
//如果name對應的對象不存在,返回null。
Object request.getAttribute(String name);
request.removeAttribute(String name);
(3)轉發編程需要注意的問題
轉發之前,如果response中緩存有任何的數據,
會清空。如果轉發之前,調用了out.flush(),
out.close(),則會出錯。
(4) 轉發的特點:
a,轉發時,瀏覽器地址欄的地址不會變。
b,轉發的目的地只能是同一個應用內部的各個
組件。

课堂内容

关键字:, ,

评论已关闭