【JavaWeb】Servlet總結

Servlet入門

Servlet簡介

Servlet(Server Applet)是用Java編寫的服務器端程序。其主要功能在於交互式地瀏覽和修改數據,生成動態Web內容。狹義的Servlet是指Java語言實現的一個接口,廣義的Servlet是指任何實現了這個Servlet接口的類,一般情況下,人們將Servlet理解爲後者。

當瀏覽器發送一個HTTP請求時,HTTP請求由Web容器分配給特定的Servlet進行處理,Servlet擁有一系列的方法來處理HTTP請求。常見的方法有doGet(),doPost()等。Web容器中包含了多個Servlet,特定的HTTP請求該由哪一個Servlet來處理是由Web容器中的web.xml來決定的。

Servlet必須部署在Java servlet容器才能使用。雖然很多開發者都使用Java Server Pages(JSP)和Java Server Faces(JSF)等Servlet框架,但是這些技術都要在幕後通過Servlet容器把頁面編譯爲Java Servlet。也就是說,瞭解Java Servlet技術的基礎知識對任何Java web開發者來說是很有用的。

第一個Selvlet程序

1.在tomcat中新建一個web應用hello,在web應用中新建一個WEB-INF/classes目錄

2.在classes目錄新建一個FirstServlet

package com.lwb.servlet;

import java.io.*;
import javax.servlet.*;

public class FirstServlet extends GenericServlet{
    public void service(ServletRequest req,ServletResponse res)throws ServletException,java.io.IOException{
        OutputStream out = res.getOutputStream();
        out.write("My First Sevlet".getBytes());
    }
}

3.編譯,javac -cp %CATALINA_HOME%/lib/servlet-api.jar -d . FirstServlet.java

4.在WEB-INF目錄中新建一個web.xml文件,配置servlet的對外訪問路徑

5.啓動tomcat服務器,用瀏覽器訪問。

  • 注意:(1)MyFirstServlet類繼承了GenericServlet。這個繼承是必須的,因爲所有的Servlet必須是要麼繼承了 javax.servlet.GenericServlet 的普通Servlet,要麼是繼承了 javax.servlet.http.HttpServlet 的HTTP Servlet。
  • (2)如果你在使用IDE(例如eclipse),那麼打包和部署你的應用只需要一個簡單的步驟。右擊項目> Run As > Run As Server。如果還沒配置服務器先配置好服務器

Servlet生命週期方法

在你的應用加載並使用一個Servlet時,從初始化到銷燬這個Servlet期間會發生一系列的事件。這些事件叫做Servlet的生命週期事件(或方法)。

Servlet生命週期的三個核心方法分別是 init() , service() 和 destroy()。每個Servlet都會實現這些方法,並且在特定的運行時間調用它們。

1) 在Servlet生命週期的初始化階段,web容器通過調用init()方法來初始化Servlet實例,並且可以傳遞一個實現 javax.servlet.ServletConfig 接口的對象給它。這個配置對象(configuration object)使Servlet能夠讀取在web應用的web.xml文件裏定義的名值(name-value)初始參數。這個方法在Servlet實例的生命週期裏只調用一次。

2) 初始化後,Servlet實例就可以處理客戶端請求了。web容器創建一個多線程來調用Servlet的service()方法來處理每一個請求。service() 方法定義了能夠處理的請求類型並且調用適當方法來處理這些請求。編寫Servlet的開發者必須爲這些方法提供實現。如果發出一個Servlet沒實現的請求,那麼父類的方法就會被調用並且通常會給請求方(requester)返回一個錯誤信息。

3) 最後,web容器調用destroy()方法來終結Servlet。如果你想在Servlet的生命週期內關閉或者銷燬一些文件系統或者網絡資源,你可以調用這個方法來實現。destroy() 方法和init()方法一樣,在Servlet的生命週期裏只能調用一次。

其他內容(細節)

##Servlet的映射路徑

這裏寫圖片描述

匹配分兩種,(1)精確匹配 (2)模糊匹配 。比較好理解,這裏不講了。

注意:

  • url-pattern要麼以 / 開頭,要麼以*開頭。 例如, itcast是非法路徑。
  • 不能同時使用兩種模糊匹配,例如 /itcast/*.do是非法路徑
  • 當有輸入的URL有多個servlet同時被匹配的情況下:1,精確匹配優先。2 以後綴名結尾的模糊url-pattern優先級最低。

Servlet的缺省路徑

servlet的缺省路徑是在tomcat服務器內置的一個路徑。該路徑對應的是一個DefaultServlet(缺省Servlet)。這個缺省的Servlet的作用是用於解析web應用的靜態資源文件。

    問題: URL輸入http://localhost:8080/myweb/index.html 如何讀取文件????

    1)到當前day10應用下的web.xml文件查找是否有匹配的url-pattern。
    2)如果沒有匹配的url-pattern,則交給tomcat的內置的DefaultServlet處理
    3)DefaultServlet程序到day10應用的根目錄下查找是存在一個名稱爲index.html的靜態文件。
    4)如果找到該文件,則讀取該文件內容,返回給瀏覽器。
    5)如果找不到該文件,則返回404錯誤頁面。

        結論: 先找動態資源,再找靜態資源。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章