Web学习历程记录(十二)—— filter_listener

fileter_listener

fileter

一个实现了特殊接口的Java类,实现对请求资源(jsp,servlet,html)的过滤功能

过滤器是一个运行在服务器的程序,优先于请求资源(Servlet或者jsp,html)之前执行,过滤器是javaweb技术中最为实用的技术

作用
对目标资源(Servlet,jsp)进行过滤

使用方法
通过xml配置方式

通过注解方式

Filter的生命周期

init(FilterConfig):初始化
doFilter(ServletReqeust req,ServletResponse resp,FilterChain chain):执行过滤的方法
destory():销毁

生命周期描述
1.当服务器启动的时候,过滤器就被初始化了,执行过滤器的init方法
2.每当一个请求的路径是满足过滤器的配置属性,那么就会执行一次过滤器的doFilter方法
3.当服务器正常关闭的时候,销毁过滤器,执行过滤器的destory方法

映射路径

有选择的过滤器请求,需要配置过滤器不同的映射路径,从而让过滤器过滤希望过滤的请求

完全路径匹配,以“ / ”开始
过滤器只能拦截路径
目录匹配,以“ / ”开始,以“ * ”结束
当前项目下的所有路径都可以拦截
扩展名匹配,以“ * ”开始
拦截后缀

拦截方式

可以让过滤器区分不同的访问资源的方式,有不同的拦截方式

DispatcherType.REQUEST
默认,过滤从浏览器发送过来的请求和重定向

DispatcherType.FORWARD
只过滤转发过来的请求

@WebFilter(urlPatterns = "/demo02" ,dispatcherTypes = {DispatcherType.FORWARD,DispatcherType.REQUEST})
public class FileDemo02 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("111");
        filterChain.doFilter(servletRequest,servletResponse);
    }

    @Override
    public void destroy() {

    }
}

过滤器链

当一个filter收到请求的时候,调用chain.doFilter才可以访问下一个匹配的filter,若当前的filter是最后一个filter,调用chain.doFilter才能访问目标资源

非法字符

思路分析
创建一个表单用于发表言论
创建一个txt文件,其中存入非法字符
创建一个Filter,拦截请求,在init方法中将txt文件中的非法字符读取到内存中
获取请求中的参数,对请求的参数进行非法字符的校验
如果言论中不含有非法字符,就放行
如果言论中含有非法字符,就拦截,并且提示用户非法言论

package illegalchec;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.ArrayList;
import java.util.List;
@WebFilter("/*")
public class IllegaFilter implements Filter {
    private List<String> illegalWords = new ArrayList<String>();
    //new一个list
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        try{
            InputStream is = filterConfig.getServletContext().getResourceAsStream("IllegaWords.txt");
            BufferedReader reader = new BufferedReader(new InputStreamReader(is,"utf-8"));
            String line = null;
            while((line = reader.readLine()) != null){
                illegalWords.add(line);

            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        response.setContentType("text/html;charset = utf-8");
        request.setCharacterEncoding("utf - 8");
        String message = request.getParameter("message");
        for (String illegalWord : illegalWords){
            if (message != null && message.trim().contains(illegalWord)){
                response.getWriter().write("含有非法字符");
                return;
            }
        }
        filterChain.doFilter(request,response);
    }

    @Override
    public void destroy() {

    }
}

Listener

监听器是一个Java类,用来监听其他的JavaBean的变化
在javaweb中监听器就是监听三个域对象的状态的
requestqa , session , servletContext(application)

监听器的应用
主要在Swing编程
Android大量应用
js里面的事件

监听器的术语
事件源:被监听的对象.目标对象
监听器对象:监听的对象
事件:事件源行为的称呼

注册(绑定):将”监听器对象“注册给“事件源”
事件对象:在“监听器对象”中获得“事件源”

ServletContextListener
监听ServletContext对象的销毁和创建

创建:其中ServletContext服务器启动的时候,服务器为每个Web应用创建一个单独的ServletContext

销毁:服务器关闭的时候,或者从项目中移除

ServletContextListener的使用
编写一个类,实现ServletContextListener接口
在web.xml里面注册listener

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值