文章目录
提示:以下是本篇文章正文内容,下面案例可供参考
一、Filter是什么?
webServlet有三大组件:Servlet Filter(过滤器) Listerner (监听器)
生活中中的过滤器有哪些?
净水器的滤芯 空心滤芯 鱼网
网络中拦截器:
有些网站必须是在登录下才能访问,比如咱们测评系统,一打开网址,就是登录页面
必须先登录的一些网站
过滤器有什么作用? 验证信息登录,处理字符问题,过滤跳转等
WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。
就是咱们请求一个资源的时候,先通过Filter进行拦截,如果你能符合我的条件我就放行。让你继续去请求资源,如果你不符合我的条件,我就不让你去请求这个资源
二、Filter的入门案例
1.自定义一个类去实现一个接口Fileter
2.重写方法
3.配置Filter
注解写法(只用这种情况)
配置写法
e n d end end没有出来什么意思?index.jsp被拦截了?为什么他被拦截了?过滤器我写的是/*,就意味着所有的
资源都要被拦截。
代码如下(示例):
package com.qfedu.b_filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
//@WebFilter("/*") 我要去拦截你所有的资源
@WebFilter("/*")
public class FilterDemo1 implements Filter {
//写着构造方法的目的,目的是为了让你知道这个FilterDemo1被实例化了没?
public FilterDemo1(){
System.out.println("我是FilterDemo1的构造方法");
}
public void destroy() {
System.out.println("FilterDemo1这个过滤器被销毁");
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
//是核心方法,一般的业务逻辑写在这个地方
System.out.println("doFilter called ....");
// chain.doFilter(req, resp); 放行代码
//如果这个地方没有写chain.doFilter(req,resp);
//代码走到这个地方,资源就会被拦截,不再往下走了
chain.doFilter(req,resp);//放行,先走的是Servlet,再回到我们的过滤器
/*
* if语句,该放行的就写一个chain.doFilter(req,resp);//放行
* 不该放行的话,让他跳转到其它页面
* */
System.out.println("放行完以后资源访问继续");
}
public void init(FilterConfig config) throws ServletException {
System.out.println("FilterDemo1这个过滤器被初始化");
}
}
三、Filter注解和配置文件的写法
优先选择注解写法,方便简单,两者只能选择其一
3.1配置文件的写法
① 需要在web.xml文件写配置
web.xml文件代码如下
代码如下(示例):
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<filter>
<filter-name>FilterDemo2</filter-name>
<filter-class>com.qfedu.b_filter.FilterDemo2</filter-class>
</filter>
<filter-mapping>
<filter-name>FilterDemo2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
package com.qfedu.b_filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
public class FilterDemo2 implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {
}
}
3.2注解的写法【推荐使用】
代码如下(示例):
package com.qfedu.b_filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.<