按钮不通过表单连接servlet_JavaWeb之Servlet(一)
1.Servlet概述
Servlet 為創建基于 web 的應用程序提供了基于組件、獨立于平臺的方法,可以不受 CGI 程序的性能限制。Servlet 有權限訪問所有的 Java API,包括訪問企業級數據庫的 JDBC API。Servlet(Server Applet)是Java Servlet的簡稱,稱為小服務程序或服務連接器,用Java編寫的服務器端程序,具有獨立于平臺和協議的特性,主要功能在于交互式地瀏覽和生成數據,生成動態Web內容。狹義的Servlet是指Java語言實現的一個接口,廣義的Servlet是指任何實現了這個Servlet接口的類,一般情況下,人們將Servlet理解為后者。Servlet運行于支持Java的應用服務器中。從原理上講,Servlet可以響應任何類型的請求,但絕大多數情況下Servlet只用來擴展基于HTTP協議的Web服務器。
Java Servlet 是運行在 Web 服務器或應用服務器上的程序,它是作為來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 服務器上的數據庫或應用程序之間的中間層。使用 Servlet,您可以收集來自網頁表單的用戶輸入,呈現來自數據庫或者其他源的記錄,還可以動態創建網頁。Java Servlet 通常情況下與使用 CGI(Common Gateway Interface,公共網關接口)實現的程序可以達到異曲同工的效果。但是相比于 CGI,Servlet 有以下幾點優勢:
性能明顯更好。
Servlet在Web服務器的地址空間內執行。這樣它就沒有必要再創建一個單獨的進程來處理每個客戶端請求。
Servlet是獨立于平臺的,因為它們是用Java編寫的
服務器上的Java安全管理器執行了一些列限制,以保護服務器計算機上的資源。因此,Servlet是可信的。
Java類庫的全部功能對Servlet來說都是可用的。它可以通過socket和RMI機制與applets、數據庫或其它軟件進行交互。
2.Servlet架構
3.Servlet任務
Servlet 執行以下主要任務:
讀取客戶端(瀏覽器)發送的顯式的數據。這包括網頁上的 HTML 表單,或者也可以是來自 applet 或自定義的 HTTP 客戶端程序的表單。
讀取客戶端(瀏覽器)發送的隱式的 HTTP 請求數據。這包括 cookies、媒體類型和瀏覽器能理解的壓縮格式等等。
處理數據并生成結果。這個過程可能需要訪問數據庫,執行 RMI 或 CORBA 調用,調用 Web 服務,或者直接計算得出對應的響應。
發送顯式的數據(即文檔)到客戶端(瀏覽器)。該文檔的格式可以是多種多樣的,包括文本文件(HTML 或 XML)、二進制文件(GIF 圖像)、Excel 等。
發送隱式的 HTTP 響應到客戶端(瀏覽器)。這包括告訴瀏覽器或其他客戶端被返回的文檔類型(例如 HTML),設置 cookies 和緩存參數,以及其他類似的任務。
4.Servlet包
Java Servlet 是運行在帶有支持 Java Servlet 規范的解釋器的 web 服務器上的 Java 類。Servlet 可以使用 javax.servlet 和 javax.servlet.http 包創建,它是 Java 企業版的標準組成部分,Java 企業版是支持大型開發項目的 Java 類庫的擴展版本。這些類實現 Java Servlet 和 JSP 規范。Java Servlet 就像任何其他的 Java 類一樣已經被創建和編譯。在您安裝 Servlet 包并把它們添加到您的計算機上的 Classpath 類路徑中之后,您就可以通過 JDK 的 Java 編譯器或任何其他編譯器來編譯 Servlet。
5.Servlet生命周期
Servlet 生命周期可被定義為從創建直到毀滅的整個過程。以下是 Servlet 遵循的過程:
Servlet 初始化后調用 init () 方法。
Servlet 調用 service() 方法來處理客戶端的請求。
Servlet 銷毀前調用 destroy() 方法。
最后,Servlet 是由 JVM 的垃圾回收器進行垃圾回收的。
現在讓我們詳細討論生命周期的方法。
init 方法被設計成只調用一次。它在第一次創建 Servlet 時被調用,在后續每次用戶請求時不再調用。因此,它是用于一次性初始化,就像 Applet 的 init 方法一樣。Servlet 創建于用戶第一次調用對應于該 Servlet 的 URL 時,但是您也可以指定 Servlet 在服務器第一次啟動時被加載。當用戶調用一個 Servlet 時,就會創建一個 Servlet 實例,每一個用戶請求都會產生一個新的線程,適當的時候移交給 doGet 或 doPost 方法。init() 方法簡單地創建或加載一些數據,這些數據將被用于 Servlet 的整個生命周期。
public void init() throws ServletException { ?// 初始化代碼...}service() 方法是執行實際任務的主要方法。Servlet 容器(即 Web 服務器)調用 service() 方法來處理來自客戶端(瀏覽器)的請求,并把格式化的響應寫回給客戶端。每次服務器接收到一個 Servlet 請求時,服務器會產生一個新的線程并調用服務。service() 方法檢查 HTTP 請求類型(GET、POST、PUT、DELETE 等),并在適當的時候調用 doGet、doPost、doPut,doDelete 等方法。
public void service(ServletRequest request, ? ? ? ? ? ? ? ? ? ?ServletResponse response) ? ? ?throws ServletException, IOException{}service() 方法由容器調用,service 方法在適當的時候調用 doGet、doPost、doPut、doDelete 等方法。所以,您不用對 service() 方法做任何動作,您只需要根據來自客戶端的請求類型來重寫 doGet() 或 doPost() 即可。doGet() 和 doPost() 方法是每次服務請求中最常用的方法。
GET 請求來自于一個 URL 的正常請求,或者來自于一個未指定 METHOD 的 HTML 表單,它由 doGet() 方法處理。
public void doGet(HttpServletRequest request, ? ? ? ? ? ? ? ? ?HttpServletResponse response) ? ?throws ServletException, IOException { ? ?// Servlet 代碼}POST 請求來自于一個特別指定了 METHOD 為 POST 的 HTML 表單,它由 doPost() 方法處理。
public void doPost(HttpServletRequest request, ? ? ? ? ? ? ? ? ? HttpServletResponse response) ? ?throws ServletException, IOException { ? ?// Servlet 代碼}destroy() 方法只會被調用一次,在 Servlet 生命周期結束時被調用。destroy() 方法可以讓您的 Servlet 關閉數據庫連接、停止后臺線程、把 Cookie 列表或點擊計數器寫入到磁盤,并執行其他類似的清理活動。在調用 destroy() 方法之后,servlet 對象被標記為垃圾回收。
public void destroy() { ? ?// 終止化代碼... }上圖顯示了一個典型的 Servlet 生命周期方案。
第一個到達服務器的 HTTP 請求被委派到 Servlet 容器。
Servlet 容器在調用 service() 方法之前加載 Servlet。
然后 Servlet 容器處理由多個線程產生的多個請求,每個線程執行一個單一的 Servlet 實例的 service() 方法。
6.Servlet代碼演示
Servlet 是服務 HTTP 請求并實現 javax.servlet.Servlet 接口的 Java 類。Web 應用程序開發人員通常編寫 Servlet 來擴展 javax.servlet.http.HttpServlet,并實現 Servlet 接口的抽象類專門用來處理 HTTP 請求。
package com.wyz.servlet.demo1;import java.io.IOException;import javax.servlet.Servlet;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;public class HelloServlet implements Servlet{ @Override public void destroy() {} @Override public ServletConfig getServletConfig() { return null;} @Override public String getServletInfo() { return null;} @Override public void init(ServletConfig arg0) throws ServletException {} //用來處理客戶的請求,并且對請求作出響應的方法 @Override public void service(ServletRequest req, ServletResponse resp) throws ServletException, IOException { //向頁面輸出一個HelloServlet字符串 resp.getWriter().println("HelloServlet");}}在web.xml中配置相關信息:
<servlet> ? ?<servlet-name>HelloServletservlet-name> ? ?<servlet-class>com.wyz.servlet.demo1.HelloServletservlet-class> ?servlet> ?<servlet-mapping> ? ?<servlet-name>HelloServletservlet-name> ? ?<url-pattern>/hellourl-pattern> ?servlet-mapping>在Tomcat中啟動項目,運行結果:
總結
以上是生活随笔為你收集整理的按钮不通过表单连接servlet_JavaWeb之Servlet(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么用odbc连接mysql数据库连接_
- 下一篇: java替换html样式_Java Js