J2EE簡(jiǎn)介之Servlet的生命周期
J2EE是一個(gè)標(biāo)準(zhǔn)中間件體系結(jié)構(gòu),目的在于簡(jiǎn)化和規(guī)范分布式多層企業(yè)應(yīng)用系統(tǒng)的開(kāi)發(fā)和部署.
典型的J2EE結(jié)構(gòu)的應(yīng)用程序有:客戶層,表示邏輯層,業(yè)務(wù)邏輯層,企業(yè)信息系統(tǒng)層。
servlet是一種獨(dú)立于操作系統(tǒng)平臺(tái)和網(wǎng)絡(luò)傳輸協(xié)議的服務(wù)器端的Java應(yīng)用程序,它用于擴(kuò)展服務(wù)器的功能,可以生成動(dòng)態(tài)的web頁(yè)面。
Servlet 的生命周期
Servlet 的生命周期始于將它裝入 Web 服務(wù)器的內(nèi)存時(shí),并在終止或重新裝入 Servlet 時(shí)結(jié)束。
(1) 初始化
在下列時(shí)刻裝入 Servlet:
如果已配置自動(dòng)裝入選項(xiàng),則在啟動(dòng)服務(wù)器時(shí)自動(dòng)裝入
在服務(wù)器啟動(dòng)后,客戶機(jī)***向 Servlet 發(fā)出請(qǐng)求時(shí)
重新裝入 Servlet 時(shí)裝入 Servlet 后,服務(wù)器創(chuàng)建一個(gè) Servlet 實(shí)例并且調(diào)用 Servlet 的 init() 方法。在初始化階段,Servlet 初始化參數(shù)被傳遞給 Servlet 配置對(duì)象。
(2) 請(qǐng)求處理
對(duì)于到達(dá)服務(wù)器的客戶機(jī)請(qǐng)求,服務(wù)器創(chuàng)建特定于請(qǐng)求的一個(gè)“請(qǐng)求”對(duì)象和一個(gè)“響應(yīng)”對(duì)象。服務(wù)器調(diào)用 Servlet 的 service() 方法,該方法用于傳遞“請(qǐng)求”和“響應(yīng)”對(duì)象。service() 方法從“請(qǐng)求”對(duì)象獲得請(qǐng)求信息、處理該請(qǐng)求并用“響應(yīng)”對(duì)象的方法以將響應(yīng)傳回客戶機(jī)。service() 方法可以調(diào)用其它方法來(lái)處理請(qǐng)求,例如 doGet()、doPost() 或其它的方法。
(3) 終止
當(dāng)服務(wù)器不再需要 Servlet, 或重新裝入 Servlet 的新實(shí)例時(shí),服務(wù)器會(huì)調(diào)用 Servlet 的 destroy() 方法。
一個(gè)servlet樣例(ServletSample.java)如下:
- import java.io.*;
- import java.util.*;
- import javax.servlet.*;
- import javax.servlet.http.*;
- public class ServletSample extends HttpServlet { // ***步: 擴(kuò)展 HttpServlet 抽象類。
- public void doGet (HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException { // 第二步:重寫doGet()方法
- String myName = ""; // 第三步:獲取HTTP 請(qǐng)求信息
- java.util.Enumeration keys = request.getParameterNames();
- while (keys.hasMoreElements());
- {
- key = (String) keys.nextElement();
- if (key.equalsIgnoreCase("myName"))
- myName = request.getParameter(key);
- }
- if (myName == "")
- myName = "Hello";
- // 第四步:生成 HTTP 響應(yīng)。
- response.setContentType("text/html");
- response.setHeader("Pragma", "No-cache");
- response.setDateHeader("Expires", 0);
- response.setHeader("Cache-Control", "no-cache");
- out.println("");
- out.println("");
- out.println("
- Just a basic servlet
- ");
- out.println ("
- " + myName + ", this is a very basic servlet that writes an HTML
- page.");
- out.println ("
- For instructions on running those samples on your WebSphere應(yīng)用服務(wù)器, "+
- "open the page:");
- out.println("
- http://your.server.name/IBMWebAs/samples/index.aspl
- ");
- out.println("where your.server.name is the hostname of your WebSphere應(yīng)用服
- 務(wù)器.");
- out.println("");
- out.flush();
- }
- }
Cookie的格式實(shí)際上是一段純文本信息, 由服務(wù)器隨著網(wǎng)頁(yè)一起發(fā)送到客戶端, 并保存在客戶端硬盤中指定的目錄的.
一個(gè)簡(jiǎn)單的例子
1. 寫入Cookie --- writecookie.jsp
-------------------------------------------------------------
- <%@ page contentType="text/html; charset=ISO8859_1" %>
- <%
- Cookie _cookie=new Cookie("user_delfancom", "delfan");
- _cookie.setMaxAge(30*60); // 設(shè)置Cookie的存活時(shí)間為30分鐘
- response.addCookie(_cookie); // 寫入客戶端硬盤
- out.print("寫Cookie完成");
- %>
2. 讀取Cookie.jsp --- readcookie.jsp
-------------------------------------------------------------
- <%
- Cookie cookies[]=request.getCookies(); // 將適用目錄下所有Cookie讀入并存入cookies數(shù)組中
- Cookie sCookie=null;
- String sname=null;
- String name=null;
- if(cookies==null) // 如果沒(méi)有任何cookie
- out.print("none any cookie");
- else
- {
- out.print(cookies.length + "
- ");
- for(int i=0;i{
- sCookie=cookies[i];
- sname=sCookie.getName();
- name = sCookie.getValue();
- out.println(sname + "->" + name + "
- ");
- }
- }
- %>
以上介紹了Servlet的生命周期。
【編輯推薦】