创建Filter过滤器
话不多说直接上代码
//配置Filter这里跟servlet配置是一样的配置的哪个servlet地址就会拦截对哪个servlet的请求 配置方法 固定地址(就是这里用的就是) 通配符 指定目录
//这里可以配置多个servlet也就是对多个servlet的请求和响应做相同的操作
//当然一个servlet也可以配置多个过滤器如果配置了多个过滤器 请求和响应会经过多个过滤器
//请求:从用户访问-->第一个过滤器-->第二个过滤器-->servlet
//响应:servlet-->第二个过滤器-->第一个过滤器-->返回给用户
//我的理解是说是配置不如说是绑定也就是说一个servlet可以绑定多个过滤器一个过滤器也可以绑定多个servlet
//servlet和过滤器是相互绑定的
//绑定以后想要访问过滤器绑定的servlet就必须先要访问这个过滤器
//下面的代码测试了过滤器的的生命周期和设置了response编码集和设置一个简单的防盗链
@WebFilter(filterName = "DemoFilter",urlPatterns = {"/访问第一个servlet地址","/访问第二个servlet地址"})
public class DemoFilter implements Filter {
//Filter销毁时调用
public void destroy() {
System.out.println("过滤器销毁");//销毁时控制台打印
}
//这个函数是拦截请求和响应的是创建过滤器的时候自动创建的
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//这里的request是ServletRequest类型只有拿到HttpServletRequest类型的request才能拿到请求头所以强转
HttpServletRequest request = (HttpServletRequest)req;//防盗链代码
//拿到request请求头里的一个参数referer这个参数就是谁发送的请求也就是发送请求的网页的地址
String referer = request.getHeader("referer");//防盗链代码
if (referer.startsWith("主页地址") && referer!=null){//防盗链代码
System.out.println("过滤器执行");//Filter执行时调用
resp.setContentType("text/html;charset=UFT-8");//设置response编码集
chain.doFilter(req, resp);//这个方法是放行请求和响应的
}
}
//Filter创建时调用
public void init(FilterConfig config) throws ServletException {
System.out.println("过滤器创建");//创建时控制台打印
}
}
Java面向对象编程(oop),抽象,封装,继承,多态
过滤器 AOP 面向切面编程
过滤器的作用就是过滤和修改请求和响应
生命周期:随着项目的启动而创建, 当访问了地址后调用doFilter方法,这个会多次执行。随着项目的关闭而销毁
调用doFilter方法
req(servletRequest)àHTTPServletRequest注意强转(在使用httpservletrequest这个独有的方法的时候要强转)
response同上
chainfilter 链可以指向下一个地址(如果有过滤器则下一个过滤器,没有则指向资源servlet)
我也是刚入门的小白一个,就是闲来无事随心所欲想起来了就写一篇自己学到的东西,万一能够遇上贵人指点一二呢,如有独特见解评论区讨论,