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");是解决前台响应中文乱码问题