做軟件也兩年了,但一直有種知其然不知其所以然的感覺,接下來希望自己能夠堅持下去多看看一些深層的東西,今天是一個開始。
Servlet程序由Servlet,Filter和Listener組成,其中監聽器用來監聽Servlet容器上下文。
監聽器通常分三類:基於Servlet上下文的ServletContex監聽,基於會話的HttpSession監聽和基於請求的ServletRequest監聽。
- ServletContex監聽器
/**
* Application監聽器,Servlet中的Application即ServletContext
* @author Administrator
*/
public class ApplicationListener implements ServletContextListener,
ServletContextAttributeListener {
/**
* application銷燬時觸發的事件
*/
@Override
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("Application銷燬:"+arg0.getServletContext());
}
/**
* application初始化時觸發的方法
*/
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("Application創建:"+arg0.getServletContext());
}
/**
* application中添加屬性值時觸發的方法
*/
@Override
public void attributeAdded(ServletContextAttributeEvent arg0) {
System.out.println("Application添加新屬性:key="+arg0.getName()+" value="+arg0.getValue());
}
/**
* application中刪除屬性值時觸發的方法
*/
@Override
public void attributeRemoved(ServletContextAttributeEvent arg0) {
System.out.println("Application移除屬性:key="+arg0.getName()+" value="+arg0.getValue());
}
/**
* application中替換屬性值時觸發的方法
*/
@Override
public void attributeReplaced(ServletContextAttributeEvent arg0) {
System.out.println("Application替換屬性:key="+arg0.getName()+" value="+arg0.getValue());
}
}
<listener>
<description>application listener</description>
<display-name>application_listener</display-name>
<listener-class>com.bless.listener.application.ApplicationListener</listener-class>
</listener>
隨後啓動java web項目,監聽器就會運行。
- Session監聽器
/**
* Session監聽器
* @author Administrator
*/
public class SessionListener implements HttpSessionListener,
HttpSessionAttributeListener {
Vector<HttpSession> listSession = null;
/**
* 創建Session調用的方法
* 將session對象放入listSession集合中
*/
@Override
public void sessionCreated(HttpSessionEvent arg0) {
synchronized (this) {
if(listSession == null){
listSession = new Vector<HttpSession>();
}
}
listSession.add(arg0.getSession());
System.out.println("\n\n創建一個Session:"+arg0.getSession());
System.out.println("[當前存在的Session:]");
for (HttpSession session : listSession) {
System.out.println("--->"+session);
}
}
/**
* 銷燬Session調用的方法
* 移除listSession集合對應session值
*/
@Override
public void sessionDestroyed(HttpSessionEvent arg0) {
listSession.remove(arg0.getSession());
System.out.println("\n\n銷燬一個Session:"+arg0.getSession());
System.out.println("[當前存在的Session:]");
for (HttpSession session : listSession) {
System.out.println("--->"+session);
}
}
/**
* session屬性添加時調用的方法
*/
@Override
public void attributeAdded(HttpSessionBindingEvent arg0) {
System.out.println("\n\n添加一條Session-->key:"+arg0.getName()+" 屬性value:"+arg0.getValue());
}
/**
* session屬性移除時調用的方法
*/
@Override
public void attributeRemoved(HttpSessionBindingEvent arg0) {
System.out.println("\n\n刪除一條Session-->key:"+arg0.getName()+" 屬性value:"+arg0.getValue());
}
/**
* session屬性替代時調用的方法
*/
@Override
public void attributeReplaced(HttpSessionBindingEvent arg0) {
System.out.println("\n\n覆蓋一條Session-->key:"+arg0.getName()+" 屬性value:"+arg0.getValue());
}
}
在web.xml中定義相應監聽器配置:在web.xml中定義相應監聽器配置:
<listener>
<listener-class>com.bless.listener.session.SessionListener</listener-class>
</listener>
<!-- Session超時配置 -->
<session-config>
<session-timeout>1</session-timeout>
</session-config>
- Request監聽器
/**
* Request事件監聽器
* @author Administrator
*/
public class RequestListener implements ServletRequestListener,
ServletRequestAttributeListener {
@Override
public void requestDestroyed(ServletRequestEvent arg0) {
System.out.println("request銷燬:"+arg0.getServletRequest());
}
@Override
public void requestInitialized(ServletRequestEvent arg0) {
System.out.println("request創建:"+arg0.getServletRequest());
}
@Override
public void attributeAdded(ServletRequestAttributeEvent arg0) {
System.out.println("request屬性添加 key="+arg0.getName()+" value="+arg0.getValue());
}
@Override
public void attributeRemoved(ServletRequestAttributeEvent arg0) {
System.out.println("request屬性刪除 key="+arg0.getName()+" value="+arg0.getValue());
}
@Override
public void attributeReplaced(ServletRequestAttributeEvent arg0) {
System.out.println("request屬性替換 key="+arg0.getName()+" value="+arg0.getValue());
}
}
web.xml配置:
<listener>
<listener-class>com.bless.listener.request.RequestListener</listener-class>
</listener>