javaweb入門筆記(3)-Servlet

javaweb入門筆記(3)-Servlet

標籤: javawebhtml


[TOC]java


servlet入門

開發步驟:git

  • 編寫一個java類,實現servlet接口
  • 把開發好的java類部署到web服務器

API文檔github

Servlet API Documentationweb

生命週期相關方法(life-cycle methods)apache

Servlet的生命週期經過java.servlet.Servlet接口中的init()service()、和destroy()方法表示。Servlet的生命週期有四個階段:加載並實例化、初始化、請求處理、銷燬。(見文末【參考連接】)api

手動編寫第一個servlet

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

2.在classes目錄新建一個FirstServlet安全

package org.iot;

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("hello servlet!!!".getBytes());
	}
}

3.編譯,javac -cp %CATALINA_HOME%/lib/servlet-api.jar -d . FirstServlet.java,命令行手動編譯參考這裏服務器

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

5.啓動tomcat訪問

servlet的調用過程和生命週期

時序圖

servlet的調用過程和生命週期

servlet開發的一些細節

  • 標籤:<servlet>包含<servlet-name><servlet-class><servlet-mapping>包含<servlet-name><url-pattern>
  • 映射:web.xml中一個<servlet>可對應多個<servlet-mapping>
  • 通配符:<servlet-mapping><url-pattern>可使用通配符,兩種固定格式:*.擴展名;以/開頭,以/*結尾

javaweb_servlet-url匹配.png

  • 對象:servlet由servlet引擎調用,不能獨立運行。客戶端屢次請求,服務器只建立一個servlet實例,以後駐留內存中繼續服務直至web容器退出才銷燬它。
  • 請求:服務器針對客戶端的每一次請求都會建立新的requestresponse對象(它們的生命週期很短),傳給service方法。
  • 加載:servlet實例的建立和init方法的調用是在第一次請求時,而非服務器啓動時,除非在<servlet>標籤配置<load-on-start-up>,數字越小優先級越高
  • 缺省:映射路徑爲正斜槓/,則爲當前web應用的缺省servlet,不匹配的都交給缺省
  • 線程安全:訪問同一資源會引起線程安全問題; SingleThreadModel標記接口(已棄用)
  • ServletConfig:在<servlet>標籤配置<init-param>,經過getServletConfig方法得到配置。可配置輸出字符集,讀哪一個配置文件等等。
  • ServletContext:表明當前web應用,含有一些web應用全局性方法,實現web資源共享、servlet轉發等。經過ServletConfig.getServletContext方法得到,在<context-param>標籤配置。

ServletContext

API:Interface ServletContext

概念

一個web應用全部servlet共享同一個ServletContext對象,可實現數據共享。ServletContext被稱爲context對象。

域:做用範圍;context域:整個應用程序範圍。

ServletContext域:

  1. 這是一個容器
  2. 說明了這個容器的做用範圍,也就是應用程序範圍

轉發:客戶機一次請求;重定向:客戶機兩次請求

做用

  • 獲取web應用的初始化參數
  • 實現servlet轉發
  • 利用ServletContext對象讀取資源文件
    • 得到文件路徑
    • 讀取資源文件的三種方式
    • .properties文件(屬性文件)

配置文件:properties文件和xml文件;數據有關係使用xml文件,沒有關係則使用properties文件。

1.經過ServletContextgetResourceAsStream方法,讀取properties文件

模板代碼(注意文件位置不一樣寫路徑會不一樣):

InputStream in = this.getServletContext().getResourceAsStream("/WEB-INF/classes/org/iot/servlet/db.properties");
Properties properties = new Properties();//map
properties.load(in);

2.經過servletContextgetRealPath方法獲得資源的絕對路徑,再經過傳統方式(FileInputStream)讀取

3.經過類裝載器去讀,ClassLoadergetResourceAsStream(若是讀取資源文件的程序不是servlet),文件不能太大。只裝載一次,因此如要讀到更新後的數據,經過類裝載的方式獲得資源文件的位置,再經過傳統方式讀取資源文件的數據(用getResource獲得path,再用FileInputStream

參考連接

servlet和Jsp生命週期解讀


做者@brianway更多文章:我的網站 | CSDN | oschina

相關文章
相關標籤/搜索