程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA綜合教程 >> Java Web -- Servlet(5) 開發Servlet的三種方法、配置Servlet詳解、Servlet的生命周期(2)

Java Web -- Servlet(5) 開發Servlet的三種方法、配置Servlet詳解、Servlet的生命周期(2)

編輯:JAVA綜合教程

Java Web -- Servlet(5) 開發Servlet的三種方法、配置Servlet詳解、Servlet的生命周期(2)


三、Servlet的生命周期

一個Java servlet具有一個生命周期,這個生命周期定義了一個Servlet如何被載入並被初始化,如何接收請求並作出對請求的響應,如何被從服務中清除。Servlet的生命周期被javax.servlet.Servlet這個接口所定義。

所有的Java Servlet都會直接地或間接地執行javax.servlet.Servlet接口,這樣它才能在一個Servlet引擎中運行。 Servlet引擎是Web 服務器按照Java Servlet API定制的擴展。Servlet引擎提供網絡服務,能夠理解MIME請求,並提供一 個運行Servlet的容器。

javax.servlet.Servlet接口定義了在Servlet的生命周期中特定時間以及特定順序被調用的方法。

\

Servlet 生命周期:Servlet 加載--->實例化--->服務--->銷毀。

Servlet程序是由WEB服務器調用,web服務器收到客戶端的Servlet訪問請求後:

(Web服務器解析完主機名、web應用,緊接著查找資源,即到該web.xml查詢。

)執行如下過程:

Init(): 使用反射機制,如果該Servlet的實例不存在,加載、創建實例調用init方法將該實例裝載到內存(只調用一次),即進行初始化。

Service(): Web服務器把接收到的Http請求封裝給HttpServletRequest對象(各種信息),作為service參數傳入,service函數會被調用多次(每訪問一次Servlet,service就會被調用一次)

把response(響應給服務器的信息)拆解,形成http響應格式。

destroy():僅執行一次,在服務器端停止且卸載Servlet時執行該方法。當Servlet對象退出生命周期時,負責釋放占用的資源。一個Servlet在運行service()方法時可能會產生其他的線程,因此需要確認在調用destroy()方法時,這些線程已經終止或完成。

Servlet的主要功能在於交互式地浏覽和修改數據,生成動態Web內容。

過程概括如下:

(1)客戶端發送請求至服務器端。

(2)服務器將請求信息內容並將其傳給Server。

(3)Servlet生成響應內容並將其傳給Server。

(4)響應內容動態生成,通常取決於客戶端的請求。

(5)服務器將響應返回給客戶端。

四、繼承GenericServlet

繼承GenericServlet與實現Servlet接口的不同就是把init()與destroy()封裝在service抽象方法中,即繼承GenericServlet可只實現一個方法就好。其它步驟都與實現Servlet接口一樣。

添加文件到classes目錄下,創建文件 MyGenericServlet.java 代碼如下:

package com.focus;

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

public class MyGenericServlet extends GenericServlet

{

public void service(ServletRequest request, ServletResponse

response) throws ServletException, IOException

{

response.getWriter().println("hello world !!!!!");

}

}

配置一下Servlet

MyGenericServlet

MyGenericServlet

com.focus.MyGenericServlet

MyGenericServlet

/Generic

在浏覽器輸入:

\

效果如下:

\

五、繼承HttpServle

添加文件到classes目錄下,創建文件 MyHttpServlet.java 代碼如下:

package com.focus;

import javax.servlet.*;

import javax.servlet.http.*;

import java.io.*;

public class MyHttpServlet extends HttpServlet

{

protected void doPost(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException

{

response.setCharacterEncoding("gbk");

response.getWriter().println("歡迎 "+request.getParameter("username")+" 光臨本網站");

}

protected void doGet(HttpServletRequest request,

HttpServletResponse response) throws ServletException,IOException

{

response.getWriter().println("i am doGet");

}

}

配置一下Servlet

MyHttpServlet

MyHttpServlet

com.focus.MyHttpServlet

MyHttpServlet

/MyHttpServlet

在ServletTest目錄下創建一個 go.html 代碼如下:

登錄頁面

在浏覽器輸入:

\

效果如下:

\

證明HttpServlet默認調用的是doGet

在浏覽器輸入:

\

效果如下:

\

按提交按鈕,跳轉頁面

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved