Filter过滤器
- 作用:过滤网站的数据,是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理,比如说:处理中文乱码问题、登录验证问题。。。
- Filter开发步骤:
- 导包(导包一定不要导错,是导javax.servlet这个Filter包)
- 编写过滤器 所导的包
编写的过滤器(以解决编码作为示例)
package com.study.filter;
import javax.servlet.*;
import java.io.IOException;
public class CharacterEocodingFilter implements Filter {
//初始化
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("初始化");
}
//filterChain :链
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
servletRequest.setCharacterEncoding("utf-8");
servletResponse.setCharacterEncoding("utf-8");
servletResponse.setContentType("text/html;charset=UTF-8");
System.out.println("before");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("after");
}
//销毁
public void destroy() {
System.out.println("销毁");
}
}
注意:
- filterChain.doFilter(servletRequest,servletResponse); 这个代码一定要写,不然程序运行到这里就截止了。这个代码可以让我们的程序继续走下去。
- 过滤中的所有代码在过滤特定请求的时候都会执行
- 必须让过滤器继续同行
- 写过滤器,必须重写它的方法,init、doFilter、destroy
- 要使用编写的filter过滤器,必须要在web.xml文件中配置一下filter文件
<filter>
<filter-name>CharacterEocodingFilter</filter-name>
<filter-class>com.study.filter.CharacterEocodingFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEocodingFilter</filter-name>
<url-pattern>/servlet/*</url-pattern>
</filter-mapping>
其中,filter-mapping中的url-pattern 中填的意思是,在你的servlet包下的所有文件都会使用到这个过滤器,要注意filter-mapping映射的填写。
- servlet包下的文件代码
package com.study.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class CharacterEncoding extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().write("你好");
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
}
- 使用filter过滤器过滤后的结果: