Filter可用於處理中文亂碼等問題。
1.Filter(過濾器):
用於對用戶訪問一個web資源前對請求做預處理。常應用於非法登錄、權限管理等。Filter可認爲是Servlet的一種“變種”,它主要用於對用戶請求進行預處理,也可以對HttpServletResponse進行後處理,是個典型的處理鏈。
Filter和Servlet的區別:
它與Servlet的區別在於:它不能直接向用戶生成響應。完整的流程是:Filter對用戶請求進行預處理,接着將請求交給Servlet進行處理並生成響應,最後Filter再對服務器響應進行後處理。
2.如何寫Filter:
方式1:implements Filter
方式2:Do it
3.Fc:FilterChain 過濾鏈
Fc.doFilter(req,res)訪問下一個資源
4.Filter實現防止非法登錄:
//MyFilter.java
public class MyFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain fc) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
HttpSession session = request.getSession();
if((String)session.getAttribute("userName")==null){
response.sendRedirect("/servlet_session_project/index.jsp");
}
fc.doFilter(req, res);
}
public void init(FilterConfig arg0) throws ServletException {
}
}
//web.xml
<filter>
<filter-name>myfilter</filter-name>
<filter-class>com.cqit.edu.common.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>myfilter</filter-name>
<url-pattern>/jsp/*</url-pattern>
</filter-mapping>
/* 表示對jsp文件夾的文件全部過濾,採用Filter防止非法登錄可以實現對大量的文件進行過濾。而如果在跳轉的頁面裏實現,則需要每個頁面都要設置。
5.Filter實現中文亂碼處理
//FilterChar.java
public class FilterChar extends HttpServlet implements Filter {
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain fc) throws IOException, ServletException {
req.setCharacterEncoding("GBK");
res.setCharacterEncoding("GBK");
fc.doFilter(req, res);
}
public void init(FilterConfig arg0) throws ServletException {
}
}
//web.xml
<filter>
<filter-name>filter1</filter-name>
<filter-class>com.cqit.edu.common.FilterChar</filter-class>
</filter>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
req.setCharacterEncoding("GBK");是解決後臺中讀取文亂碼問題
res.setCharacterEncoding("GBK");是解決前臺響應中文亂碼問題