小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

Servlet中的過濾器(攔截器)Filter與監(jiān)聽器Listener的作用和區(qū)別? - ...

 西門獨(dú)孤 2011-01-03

Servlet中的過濾器(攔截器)Filter與監(jiān)聽器Listener的作用和區(qū)別?

Servlet中的過濾器Filter是實(shí)現(xiàn)了javax.servlet.Filter接口的服務(wù)器端程序,主要的用途是過濾字符編碼、做一些業(yè)務(wù)邏輯判斷等。其工作原理是,只要你在web.xml文件配置好要攔截的客戶端請求,它都會幫你攔截到請求,此時(shí)你就可以對請求或響應(yīng)(Request、Response)統(tǒng)一設(shè)置編碼,簡化操作;同時(shí)還可進(jìn)行邏輯判斷,如用戶是否已經(jīng)登陸、有沒有權(quán)限訪問該頁面等等工作。它是隨你的web應(yīng)用啟動而啟動的,只初始化一次,以后就可以攔截相關(guān)請求,只有當(dāng)你的web應(yīng)用停止或重新部署的時(shí)候才銷毀,以下通過過濾編碼的代碼示例來了解它的使用:
   1: MyCharsetFilter.java 編碼過濾器
   2: package ...;
   3: import ...;
   4:  
   5: // 主要目的:過濾字符編碼;其次,做一些應(yīng)用邏輯判斷等.
   6: // Filter跟web應(yīng)用一起啟動
   7: // 當(dāng)web應(yīng)用重新啟動或銷毀時(shí),F(xiàn)ilter也被銷毀
   8: public class MyCharsetFilter implements Filter {
   9:     private FilterConfig config = null;
  10:     
  11:     public void destroy() {
  12:         System.out.println("MyCharsetFilter準(zhǔn)備銷毀...");
  13:     }
  14:  
  15:     public void doFilter(ServletRequest arg0, ServletResponse arg1,
  16:             FilterChain chain) throws IOException, ServletException {
  17:         // 強(qiáng)制類型轉(zhuǎn)換
  18:         HttpServletRequest request = (HttpServletRequest)arg0;
  19:         HttpServletResponse response = (HttpServletResponse)arg1;
  20:         // 獲取web.xm設(shè)置的編碼集,設(shè)置到Request、Response中
  21:         request.setCharacterEncoding(config.getInitParameter("charset"));
  22:         response.setContentType(config.getInitParameter("contentType"));
  23:         response.setCharacterEncoding(config.getInitParameter("charset"));
  24:         
  25:         // 將請求轉(zhuǎn)發(fā)到目的地
  26:         chain.doFilter(request, response);
  27:     }
  28:  
  29:     public void init(FilterConfig arg0) throws ServletException {
  30:         this.config = arg0;
  31:         System.out.println("MyCharsetFilter初始化...");
  32:     }
  33: }

以下是 MyCharsetFilter.java 在web.xml 中配置:

   1: <filter>
   2:       <filter-name>filter</filter-name>
   3:       <filter-class>dc.gz.filters.MyCharsetFilter</filter-class>
   4:       <init-param>
   5:           <param-name>charset</param-name>
   6:           <param-value>UTF-8</param-value>
   7:       </init-param>
   8:       <init-param>
   9:           <param-name>contentType</param-name>
  10:           <param-value>text/html;charset=UTF-8</param-value>
  11:       </init-param>
  12:   </filter>
  13:   <filter-mapping>
  14:       <filter-name>filter</filter-name>
  15:       <!-- * 代表截獲所有的請求  或指定請求/test.do  /xxx.do -->
  16:       <url-pattern>/*</url-pattern>
  17:   </filter-mapping>

     以上的例子簡單的說明了Filter的使用,具體其他的應(yīng)用可以看具體的場景。

         現(xiàn)在來說說Servlet的監(jiān)聽器Listener,它是實(shí)現(xiàn)了javax.servlet.ServletContextListener 接口的服務(wù)器端程序,它也是隨web應(yīng)用的啟動而啟動,只初始化一次,隨web應(yīng)用的停止而銷毀。主要作用是: 做一些初始化的內(nèi)容添加工作、設(shè)置一些基本的內(nèi)容、比如一些參數(shù)或者是一些固定的對象等等。下面利用監(jiān)聽器對數(shù)據(jù)庫連接池DataSource的初始化演示它的使用:

   1: MyServletContextListener.java
   2: package dc.gz.listeners;
   3: import javax.servlet.ServletContext;
   4: import javax.servlet.ServletContextEvent;
   5: import javax.servlet.ServletContextListener;
   6: import org.apache.commons.dbcp.BasicDataSource;
   7:  
   8: /**
   9:  * Web應(yīng)用監(jiān)聽器
  10:  */
  11: public class MyServletContextListener implements ServletContextListener {
  12:  
  13:     // 應(yīng)用監(jiān)聽器的銷毀方法
  14:     public void contextDestroyed(ServletContextEvent event) {
  15:         ServletContext sc = event.getServletContext();
  16:         // 在整個(gè)web應(yīng)用銷毀之前調(diào)用,將所有應(yīng)用空間所設(shè)置的內(nèi)容清空
  17:         sc.removeAttribute("dataSource");
  18:         System.out.println("銷毀工作完成...");
  19:     }
  20:  
  21:     // 應(yīng)用監(jiān)聽器的初始化方法
  22:     public void contextInitialized(ServletContextEvent event) {
  23:         // 通過這個(gè)事件可以獲取整個(gè)應(yīng)用的空間
  24:         // 在整個(gè)web應(yīng)用下面啟動的時(shí)候做一些初始化的內(nèi)容添加工作
  25:         ServletContext sc = event.getServletContext();
  26:         // 設(shè)置一些基本的內(nèi)容;比如一些參數(shù)或者是一些固定的對象
  27:         // 創(chuàng)建DataSource對象,連接池技術(shù) dbcp
  28:         BasicDataSource bds = new BasicDataSource();
  29:         bds.setDriverClassName("com.mysql.jdbc.Driver");
  30:         bds.setUrl("jdbc:mysql://localhost:3306/hibernate");
  31:         bds.setUsername("root");
  32:         bds.setPassword("root");
  33:         bds.setMaxActive(10);//最大連接數(shù)
  34:         bds.setMaxIdle(5);//最大管理數(shù)
  35:         //bds.setMaxWait(maxWait); 最大等待時(shí)間
  36:         // 把 DataSource 放入ServletContext空間中,
  37:         // 供整個(gè)web應(yīng)用的使用(獲取數(shù)據(jù)庫連接)
  38:         sc.setAttribute("dataSource", bds);
  39:         System.out.println("應(yīng)用監(jiān)聽器初始化工作完成...");
  40:         System.out.println("已經(jīng)創(chuàng)建DataSource...");
  41:     }
  42: }

web.xml中配置如下,很簡單:

   1: <!-- 配置應(yīng)用監(jiān)聽器  -->
   2:   <listener>
   3:       <listener-class>dc.gz.listeners.MyServletContextListener</listener-class>
   4:   </listener>

這樣配置好了之后,以后在web應(yīng)用中就可以通過ServletContext取得BasicDataSource對象,從而獲取與數(shù)據(jù)庫的連接,提高性能,方便使用。

 

原文:http://ookee.spaces./blog/cns!2C8BA59ED4C95552!162.entry

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多