1: MyCharsetFilter.java 編碼過(guò)濾器 2: package ...; 3: import ...; 4: 5: // 主要目的:過(guò)濾字符編碼;其次,做一些應用邏輯判斷等.
6: // Filter跟web應用一起啟動(dòng)
7: // 當web應用重新啟動(dòng)或銷(xiāo)毀時(shí),Filter也被銷(xiāo)毀
8: public class MyCharsetFilter implements Filter {
9: private FilterConfig config = null;
10: 11: public void destroy() {
12: System.out.println("MyCharsetFilter準備銷(xiāo)毀...");
13: } 14: 15: public void doFilter(ServletRequest arg0, ServletResponse arg1,
16: FilterChain chain) throws IOException, ServletException {17: // 強制類(lèi)型轉換
18: HttpServletRequest request = (HttpServletRequest)arg0; 19: HttpServletResponse response = (HttpServletResponse)arg1;20: // 獲取web.xm設置的編碼集,設置到Request、Response中
21: request.setCharacterEncoding(config.getInitParameter("charset"));
22: response.setContentType(config.getInitParameter("contentType"));
23: response.setCharacterEncoding(config.getInitParameter("charset"));
24: 25: // 將請求轉發(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>以上的例子簡(jiǎn)單的說(shuō)明了Filter的使用,具體其他的應用可以看具體的場(chǎng)景。
現在來(lái)說(shuō)說(shuō)Servlet的監聽(tīng)器Listener,它是實(shí)現了javax.servlet.ServletContextListener 接口的服務(wù)器端程序,它也是隨web應用的啟動(dòng)而啟動(dòng),只初始化一次,隨web應用的停止而銷(xiāo)毀。主要作用是: 做一些初始化的內容添加工作、設置一些基本的內容、比如一些參數或者是一些固定的對象等等。下面利用監聽(tīng)器對數據庫連接池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應用監聽(tīng)器
10: */
11: public class MyServletContextListener implements ServletContextListener {
12: 13: // 應用監聽(tīng)器的銷(xiāo)毀方法
14: public void contextDestroyed(ServletContextEvent event) {
15: ServletContext sc = event.getServletContext();
16: // 在整個(gè)web應用銷(xiāo)毀之前調用,將所有應用空間所設置的內容清空
17: sc.removeAttribute("dataSource");
18: System.out.println("銷(xiāo)毀工作完成...");
19: } 20: 21: // 應用監聽(tīng)器的初始化方法
22: public void contextInitialized(ServletContextEvent event) {
23: // 通過(guò)這個(gè)事件可以獲取整個(gè)應用的空間
24: // 在整個(gè)web應用下面啟動(dòng)的時(shí)候做一些初始化的內容添加工作
25: ServletContext sc = event.getServletContext();
26: // 設置一些基本的內容;比如一些參數或者是一些固定的對象
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);//最大連接數
34: bds.setMaxIdle(5);//最大管理數
35: //bds.setMaxWait(maxWait); 最大等待時(shí)間
36: // 把 DataSource 放入ServletContext空間中,
37: // 供整個(gè)web應用的使用(獲取數據庫連接)
38: sc.setAttribute("dataSource", bds);
39: System.out.println("應用監聽(tīng)器初始化工作完成...");
40: System.out.println("已經(jīng)創(chuàng )建DataSource...");
41: } 42: }web.xml中配置如下,很簡(jiǎn)單:
1: <!-- 配置應用監聽(tīng)器 --> 2: <listener>3: <listener-class>dc.gz.listeners.MyServletContextListener</listener-class>
4: </listener>這樣配置好了之后,以后在web應用中就可以通過(guò)ServletContext取得BasicDataSource對象,從而獲取與數據庫的連接,提高性能,方便使用。
上面通過(guò)兩個(gè)示例演示了Filter和Listener的基本使用,對于其它的應用則需要我們在項目開(kāi)發(fā)中根據具體的場(chǎng)景選擇。多多去挖掘。
聯(lián)系客服