過濾器是用來過濾瀏覽器中的數據,例如web伺服器受到一些垃圾請求,後臺可以不處理這些請求或者報錯,還可以用來解決亂碼問題等。 過濾器是在伺服器啟動的時候初始化,在伺服器關閉的時候銷毀。 下麵我們用實例來演示: 首先建立一個過濾器類CharacterEncodingFilter.class 1 pac ...
過濾器是用來過濾瀏覽器中的數據,例如web伺服器受到一些垃圾請求,後臺可以不處理這些請求或者報錯,還可以用來解決亂碼問題等。
過濾器是在伺服器啟動的時候初始化,在伺服器關閉的時候銷毀。
下麵我們用實例來演示:
首先建立一個過濾器類CharacterEncodingFilter.class
1 package com.jms.filter; 2 3 import java.io.IOException; 4 5 import javax.servlet.Filter; 6 import javax.servlet.FilterChain; 7 import javax.servlet.ServletException; 8 import javax.servlet.ServletRequest; 9 import javax.servlet.ServletResponse; 10 11 public class CharacterEncodingFilter implements Filter{ 12 13 @Override 14 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 15 request.setCharacterEncoding("UtF-8"); 16 response.setCharacterEncoding("UTF-8"); 17 response.setContentType("text/html;charset=UTF-8"); 18 chain.doFilter(request, response);//給其他過濾器放行 19 20 } 21 22 }
chain.doFilter(request, response);這句話是一定要有的,因為一個網站可能會有多個過濾器,這句話是為了給其他過濾放行,如果沒有這句話,執行完這個過濾器後其他過濾器無法得到執行。
接著建立一個servlet用於檢驗過濾器是否執行,servlet001.class
1 package com.jms.servlet; 2 3 import java.io.IOException; 4 5 import javax.servlet.ServletException; 6 import javax.servlet.http.HttpServlet; 7 import javax.servlet.http.HttpServletRequest; 8 import javax.servlet.http.HttpServletResponse; 9 10 public class servlet001 extends HttpServlet{ 11 12 /** 13 * 14 */ 15 private static final long serialVersionUID = 1L; 16 17 @Override 18 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 19 resp.getWriter().print("過濾成功"); 20 } 21 22 @Override 23 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { 24 doGet(req, resp); 25 } 26 27 28 29 }
修改web.xml文件
<servlet> <servlet-name>demo001</servlet-name> <servlet-class>com.jms.servlet.servlet001</servlet-class> </servlet> <servlet-mapping> <servlet-name>demo001</servlet-name> <url-pattern>/demo/show</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>demo001</servlet-name> <url-pattern>/show</url-pattern> </servlet-mapping> <filter> <filter-name>filter001</filter-name> <filter-class>com.jms.filter.CharacterEncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>filter001</filter-name> <url-pattern>/demo/*</url-pattern> </filter-mapping>
如上設置,過濾器會過濾/demo路徑下的所有頁面;servlet001有兩個映射,一個是/show,不會被過濾,另一個是/demo/show,會被過濾。
我們先訪問/show
中文亂碼,沒有被過濾器過濾;
我們再訪問/demo/show
不再是亂碼,成功被過濾。
需要註意的是,設置過濾器的時候儘量不要讓過濾器過濾整個網站,而可以設置多個過濾器分工進行。
(本文僅作個人學習記錄用,如有紕漏,敬請指正)