# 過濾器Filter
### 基本概述
????Java中的Filter?并不是一個標準的Servlet?,它不能處理用戶請求,也不能對客戶端生成響應。?主要用于對HttpServletRequest?進行預處理,也可以對HttpServletResponse?進行后處理,是個典型的處理鏈。
參考文檔:[http://tomcat.apache.org/tomcat-5.5-doc/servletapi/index.html](http://tomcat.apache.org/tomcat-5.5-doc/servletapi/index.html)
參考博客:[http://blog.csdn.net/sd0902/article/details/8395641](http://blog.csdn.net/sd0902/article/details/8395641)
?
### 開發過濾器的步驟
#### 1、創建?
????繼承HttpServlet?同時實現Filter接口
默認filter不生效,需要配置.
~~~
<!-- 配置的一個filter -->
<filter>
<filter-name>MyFilter</filter-name>
<filter-class>com.pc.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/*</url-pattern> /*表示對該WEB的所有網頁都過濾
</filter-mapping>
~~~
#### 2、在filter的方法中添加業務邏輯
~~~
package com.pc.filter;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import com.pc.domain.User;
public class MyFilter1 extends HttpServlet implements Filter {
public void doGet(HttpServletRequest request, HttpServletResponse response)hrows ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
this.doGet(request, response);
}
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {
System.out.print("myfilter1...");
//獲取session
HttpServletRequest httpServletRequest=(HttpServletRequest)request;
//看看請求的資源是什么
String uri=httpServletRequest.getRequestURI();
if(uri.startsWith("/UsersManager3/imgs")||uri.startsWith("/UsersManager3/Login")){
// 該過濾器放行,進入下一個過濾器
chain.doFilter(request, response);
}else{
HttpSession session=httpServletRequest.getSession();
User user=(User) session.getAttribute("loginuser");
if(user!=null){
//該用戶合法,放行
chain.doFilter(request, response);
}else{
request.setAttribute("err", "請好好登陸");
httpServletRequest.getRequestDispatcher("/LoginServlet")
.forward(request, response);
}
}
}
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
~~~
### 過濾器鏈
? ? 過濾器鏈的概念很容易理解,就是在配置過濾器時,多個過濾器加載進內存中時,當使用過濾器之后調用chain.doFilter(request,?response);WEB服務器會按配置順序決定下一個調用的過濾器是什么。這就可以視為過濾器鏈。
?
?
?
----------參考《韓順平.細說Servlet》