過濾器和事件監聽

過濾器實現步驟:

1.新建一般java類 繼承接口Filter 並實現接口中所有的方法在方法doFilter()中 寫入代碼

2 在web.xml 中註冊過濾器(將需要過濾的頁面用一個文件夾裝起來,配置時 過濾這個文件夾,從而避免過濾了不需要過濾的頁面)

代碼示例:

1.

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class FirstFilter implements Filter {

 public void destroy() {
   }

 public void doFilter(ServletRequest req, ServletResponse resp,
   FilterChain chain) throws IOException, ServletException {
  
  System.out.println("First 執行了過濾器!!!!");
  
  //請求繼續執行 否則將過濾的頁面都不能執行
ain.doFilter(req, resp);
  
 }

 public void init(FilterConfig arg0) throws ServletException {
  
   }

}

2.配置過濾器

<!--
  <filter>
   <filter-name>first_filter</filter-name>
   <filter-class>com.zuxia.filter.過濾器類名</filter-class>  
  </filter>
  
  <filter>
   <filter-name>second_filter</filter-name>
   <filter-class>com.zuxia.filter.SecondFilter</filter-class>  
  </filter>
  
  <filter-mapping>
   <filter-name>second_filter</filter-name>
   <url-pattern>/*</url-pattern>必須以“/”開頭 (/表示項目的根目錄(WebRoot)* 代表過濾該目錄下的所有文件)
 </filter-mapping>
  
  
  <filter-mapping>
   <filter-name>first_filter</filter-name>
   <url-pattern>/*</url-pattern>必須以“/”開頭 (/表示項目的根目錄(WebRoot))
  </filter-mapping> 
 -->

事件監聽的步驟:

1. 編寫Java類,實現指定的監聽接口,重寫接口中的方法。

application (ServletContextListener , ServletContextAttributeListener )

session (HttpSessionListener ,HttpSessionAttributeListener )

 
 2. 在web.xml文件中配置監聽器(註冊監聽器)

代碼示例:

1. application

import javax.servlet.ServletContextAttributeEvent;
import javax.servlet.ServletContextAttributeListener;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
lic class TestApplicationListener implements ServletContextListener,ServletContextAttributeListener{

 public void contextDestroyed(ServletContextEvent e) {
  
//  //將訪問的次數,寫入到文件中
 }

 public void contextInitialized(ServletContextEvent e) {
  File f = new File(TestApplicationListener.class.getClassLoader().getResource("count.txt").getPath().substring(1));//得到根目錄的路徑的方法(web服務器中)
  
  try {
  
   FileReader fr = new FileReader(f);
   
   BufferedReader bf = new BufferedReader(fr);
   
   String count = bf.readLine();
   
   if(count!=null && !count.equals("")){
    e.getServletContext().setAttribute("sumcount", count);
   }
   
   bf.close();
   
   fr.close();
  } catch (Exception e2) {
   e2.printStackTrace();
  }
  
  
 }

 public void attributeAdded(ServletContextAttributeEvent e) {
  
  System.out.println("你添加了屬性。。。。。。。");
  
  System.out.println(e.getName()+":"+e.getValue());
  
 }

 public void attributeRemoved(ServletContextAttributeEvent arg0) {
  // TODO Auto-generated method stub
  
 }

 public void attributeReplaced(ServletContextAttributeEvent e) {
  // TODO Auto-generated method stub
  
  File f = new File(TestApplicationListener.class.getClassLoader().getResource("count.txt").getPath().substring(1));
  
  try {
  
   FileWriter fw = new FileWriter(f);
   
   fw.write(e.getServletContext().getAttribute("sumcount")+"");
   
   fw.close();
   
  } catch (Exception e2) {
   e2.printStackTrace();
  }
 }
 
}

session   :


import javax.servlet.ServletContext;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;

public class TestSessionListener implements HttpSessionListener{

 public void sessionCreated(HttpSessionEvent e) {
  
  ServletContext application = e.getSession().getServletContext();
  
  Object obj = application.getAttribute("sumcount");
  
  int count = obj==null ? 1 : Integer.parseInt(obj+"")+1;
  
  application.setAttribute("sumcount",count);
  
 }

 public void sessionDestroyed(HttpSessionEvent arg0) {
  // TODO Auto-generated method stub
  
 }

}
 

<!-- 註冊監聽器 -->
 <listener>
  <listener-class>com.zuxia.listener.TestApplicationListener</listener-class>
 </listener>
 
 <listener>
  <listener-class>com.zuxia.listener.TestSessionListener</listener-class>
 </listener>

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章