1. 程式人生 > >web.xml配置檔案和監聽器

web.xml配置檔案和監聽器

1. web.xml 配置檔案

WEB-INF
|- lib 放第三方jar包
|- classes 自己寫的servlet等java類
|- web.xml web應用程式的配置檔案

寫一個servlet 要在類上加一個 @WebServlet(urlPatterns="")
寫一個filter 要在類上加一個 @WebFilter(urlPatterns="")
這種基於註解的寫法在servlet 3.0 才有的

web.xml是另一種配置方式,跟註解方式配置的地位是一樣的

xml (x 可擴充套件 markup 標記 language 語言) 標籤可以進行擴充套件
html (超文字標記語言) 標籤都是規定死的 <a> <h1> <p> ...

例如:

<!-- 配置一個servlet -->
<servlet>
    <!-- servlet名字 -->
    <servlet-name>servlet1</servlet-name>
    <!-- servlet對應的java類 -->
    <servlet-class>controller.Servlet1</servlet-class>
	<!-- 在tomcat啟動時就建立servlet的例項,而不是等到第一次請求時
         其中數字表示優先順序,數字小的優先順序高
    -->
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>servlet1</servlet-name>
    <!-- servlet的路徑 -->
    <url-pattern>/s1</url-pattern>
</servlet-mapping>

<!-- 等價於 @WebServlet(urlPatterns = "/s1", loadOnStartup = 1 ) -->

例如:

<filter>
    <!-- 過濾器名字 -->
    <filter-name>f1</filter-name>
    <!-- 過濾器對應的java類 -->
    <filter-class>filter.Filter1</filter-class>
</filter>
<filter-mapping>
    <filter-name>f1</filter-name>
    <!-- 過濾器要過濾的路徑 -->
    <url-pattern>/ *</url-pattern>
</filter-mapping>
<!-- 等價於 @WebFilter(urlPatterns="/*") -->

過濾器的過濾順序可以通過 filter-mapping標籤的順序調整,先進入filter-mapping在前面的過濾器

HttpSession 會話
當第一次呼叫 request.getSession() 會建立會話
銷燬有兩種:

  1. session.invalidate(); 會立刻銷燬session
  2. 兩次請求的時間間隔超過30分鐘,session會銷燬
    例如:
<session-config>
    <!-- 配置session的超時時間, 單位是分鐘 -->
    <session-timeout>10</session-timeout> 
</session-config>

2. 監聽器 (Listener)

ServletContextListener 監聽應用程式啟動和停止事件
ServletRequestListener request物件建立和銷燬事件
HttpSessionListener session物件建立和銷燬事件

ServletContextAttributeListener application作用域 setAttribute,removeAttribute事件
ServletRequestAttributeListener request作用域 setAttribute,removeAttribute事件
HttpSessionAttributeListener session 作用域 setAttribute,removeAttribute事件

HttpSessionActivationListener session 的啟用和鈍化
HttpSessionBindingListener session變數繫結事件

session的啟用和鈍化
1) 當tomcat伺服器停止時,會把session中所有變數儲存到磁碟上, 稱為鈍化
2) 當tomcat伺服器重新啟動時,把剛才存入磁碟的資訊讀取出來,恢復至session作用域, 稱為啟用
鈍化過程呼叫是java序列化
啟用過程呼叫是java反序列化

向Session中儲存的變數要實現序列化介面(Serializable)
都是針對自定義的java類,如:Student, Hero