Filter概念
Filter就像一个一个哨卡,用户的请求需要经过Filter
并且可以有多个过滤器
部署
编写 FirstFilter
开发一个简单的FirstFilter,用来打印用户访问ip地址和访问的页面
package filter;
import …
public class FirstFilter implements Filter {
@Override
public void destroy() {
}
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
throws IOException, ServletException {
//doFilter()方法中的req参数的类型是ServletRequest,
//需要转换为HttpServletRequest类型方便调用某些方法
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) res;
String ip = request.getRemoteAddr(); //获取来路用户的ip地址
String url = request.getRequestURL().toString();//获取用户访问的页面地址
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date d = new Date();
String date = sdf.format(d);
System.out.printf("%s %s 访问了 %s%n", date, ip, url);
// 过滤器放行,表示继续运行下一个过滤器,
//或者最终访问的某个servlet,jsp,html等等
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
}
}
重点关注
**HttpServletRequest request = (HttpServletRequest) req;**这条不太懂
**chain.doFilter(request, response); **过滤器放行,表示继续运行下一个过滤器,或者最终访问的某个servlet,jsp,html等等,后面经常用到
======================================================
配置web.xml
/* //表示所有的访问都会过滤
*.jsp //就表示只过滤jsp