JSP Filter(过滤器)详解
JavaWeb三大组件:Servlet程序、Filter过滤器、listener监听器
Filter过滤器:JavaEE的规范 接口
作用:拦截请求 过滤响应
使用步骤:
1.创建一个类,并实现Filter接口
//@WebFilter("/MyFilter")
public class MyFilter implements Filter {
public MyFilter() {
}
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
}
public void init(FilterConfig fConfig) throws ServletException {
}
}
2.配置映射关系
- 注解配置
//在类上边使用
@WebFilter("/MyFilter")
- web.xml配置
<filter>
<filter-name>MyFilter</filter-name><!--过滤器名称-->
<filter-class>com.dyz.filter.MyFilter</filter-class><!--类全限定名(类路径)-->
</filter>
<filter-mapping>
<filter-name>MyFilter</filter-name><!--和上边的filter-name保持一致-->
<url-pattern>*.jsp</url-pattern><!--拦截路径,这个表示拦截所有以.jsp结尾的文件-->
</filter-mapping>
3.测试Filter内方法
public class MyFilter implements Filter {
public MyFilter() {
System.out.println("实例化Filter");
}
public void destroy() {
System.out.println("销毁Filter");
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("进入doFilter");
// chain.doFilter(request, response);//放行
}
public void init(FilterConfig fConfig) throws ServletException {
System.out.println("初始化Filter");
}
}
- 启动Tomcat服务器

发现构造方法和init方法会在服务器启动过程中就会执行
- 访问一个jsp页面

发现页面会是空白的,这是因为被过滤器拦截,没有放行
后台打印,表示进入doFilter方法,被拦截

- 关闭Tomcat服务器

Filter执行destory销毁过滤器
4.配置login页面不被拦截
request.getContextPath() 获取请求当前项目路径
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
System.out.println("进入doFilter");
//获取HttpServletRequest,必须先转为这个
HttpServletRequest httpServletRequest = (HttpServletRequest)request;
HttpServletResponse httpServletResponse = (HttpServletResponse)response;
String uri = httpServletRequest.getRequestURI();//获取请求路径
if(uri.contains("login")||session.getAttribute("name")!=null) {
chain.doFilter(request, response);//过滤请求后 程序继续向下访问项目资源
}else {
httpServletResponse.sendRedirect(httpServletRequest.getContextPath()+"/login.jsp");
}
}
配置字符编码过滤器
1.实现Filter
//@WebFilter("/EncodingCharFilter")
public class EncodingCharFilter implements Filter {
private String config;
public EncodingCharFilter() {
this.config = null;
}
public void destroy() {
}
/**
* name="FilterChar" <br>
* init-param name="config" value="utf-8"<br>
* mapping url-pattern="/*"<br>
*/
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
req.setCharacterEncoding(config);
res.setCharacterEncoding(config);
chain.doFilter(req, res);
}
/**
* 获得web.xml中初始化的参数
*/
public void init(FilterConfig fConfig) throws ServletException {
this.config = fConfig.getInitParameter("chars");
}
}
2.web.xml配置
<filter-name>EncodingCharFilter</filter-name>
<filter-class>
com.dyz.filter.EncodingCharFilter
</filter-class>
<init-param>
<param-name>chars</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingCharFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
版权声明:本文为weixin_52201271原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。