天天看點

javaweb基礎之servlet

1.servlet是Javaweb三大元件之一,它是javaweb的最為基礎的元件。(其他兩種元件:Filter和Listener)

2.javaweb請求響應原理:

當tomcat接收到請求(http://localhost:8080/servlet_demo/login)後,tomcat會找到servlet_demo項目中的web.xml檔案,然後通過login這個請求路徑,查找處理這個請求的Servlet類型。這剛好與<url-pattern>/login</url-pattern>比對,這說明存在一個可以通過這個請求的Servlet。然後再通過<url-pattern>/longin</url-pattern>查找到<servlet-name>login</servlet-name>,然後再通過<servlet-name>login</servlet-name>找到查找到<servlet-class>com.syx.servlet.LoginServlet</servlet-class>。這時tomcat已經得到了一個servlet類的名字(一個字元串而已)。

tomcat通過servlet類名字去查找記憶體中是否存在servlet對象,如果存在,那麼就不用再去建立,直接擷取這個servlet執行個體,調用它的service()方法完成請求!

如果這個servlet不存在,那麼tomcat會通過反射來建立servlet執行個體,并把servlet執行個體放到servlet池中,再去調用servlet的service方法處理請求。

3.servlet的聲明周期:

servlet執行個體并非我們手動建立,而是由web容器建立。

void init():預設情況當servlet被第一次通路的時候init會被調用;servlet是單例模式;

void service():每次請求都會調用;

void destory():當servlet執行個體銷毀時被調用;

4.專注HTTP請求的Servlet

接口Servlet下有兩個主要的實作類:GenericServlet和HttpServlet.

1>GenericServlet是一個抽象類,不限制具體的傳輸方式,通用的servlet類,包含很多方法。

2>HttpServlet是一個抽象類,提供将要被子類內建的以建立web站點的用Http協定傳輸的類,其中包含兩個重要的方法:doGet()和doPost()。。

HttpServlet抽象類的繼承類中的init()方法,實際上是調用了父類的init()方法,如果沒有初始化内容,可以不重寫。

HttpServlet抽象類的繼承類中的service()方法,其實是調用了doGet()和doPost()方法,是以在繼承類中隻需要重寫抽象類的doGet()和doPost()方法。

5.tomcat啟動時建立servlet:

使得servlet随着tomcat的啟動而建立,就需要在web.xml檔案中的<servlet>标簽中配置<load-on-startup>元素,這個元素的值必須是大于等于0的整數,以定義多個servlet加載順序。【先建立的先銷毀】

6.初始化方法init(ServletConfig config),參數config來自于web.xml檔案中<servlet>标簽<init-param>标簽的值。

【注意:在eclipse裡面複制一個項目,需要修改項目的webroot路徑值。這樣才是一個新的項目】

7.servlet路徑映射:

關于url-pattern的配置:

>完全路徑比對:以/開頭,例如  /aaa  /aaa/bbb

>目錄比對:以/開頭,例如 /aaa/*  /*

>以擴充名比對:不能以/開頭,例如 *.do  *.action ...

【優先級:完全路徑比對>目錄比對>擴充名比對】

8.ServletContext

>WEB容器在啟動時,它會為每個WEB應用程式都建立一個對應的ServletContext對象,它代表目前WEB應用。

>由于一個web應用中的所有servlet共享一個servletContext,是以同一個ServletContext中的servlet之間可以通訊。

【建立servletContext:在<webapp>标簽中配置<context-param>标簽,這樣所有的servlet類都可以放到servletContext中。】

9.獲得classpath下的資源檔案的流有兩種方式:

>通過ServletContext()方法擷取的對象調用getResourceAsStream(path1)方法,path1則為src目錄下的類編譯後在webapps下的路徑,即/web-inf/classess/test1.properties。

>直接通過類的加載器表示classpath下的資源檔案,即this.getClass().getClassLoader().getResourceAsStream(filename)。

10.Servlet是由tomcat建立的,且隻會建立一個執行個體,是以是單例模式,單例模式下的預設servlet并非是安全的。(圖檔來源于菜鳥教程)

javaweb基礎之servlet

繼續閱讀