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錯誤頁面。
結論: 先找動態資源,再找靜態資源。