filter和Listener

1.filter

过滤器是在客户端请求Servlet路径,在进入service方法之间,可以对request和response的值进行修改,起到一个过滤的作用的组件

 

1.1 基本使用

a. 先建一个 class类

b. 实现一个接口 javax.servlet.Filter

c. 实现doFilter方法

放行 chain.doFilter(request,response)

d. 在web.xml中配置过滤器

配置三种方式:

a. 指定请求路径 <url-pattern>/*</url-pattern>

注意: 要以/开头 /admin/*

b. 指定以什么结尾 <url-pattern>*.do</url-pattern>

c. 指定哪些Servlet进入过滤器<servlet-name>

1.2 生命周期

a. 调用构造函数

b. init初始化方法

c. doFilter

d. destory销毁方法

注意:

a,b,d只会调用一次

每次请求只要满足filter的要求,都会调用doFilter

过滤器是服务器启动时就自动创建,自动调用init方法

当服务器重启或者关闭,servlet先死,filter后死

1.3 应用

a. 解决所有servlet乱码问题

强调 response.setContentType()要写到doFilter方法之前,

因为在servlet中已使用out对象,乱码已经产生,乱码不可改

public void doFilter(ServletRequest req, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        String method = request.getMethod();
        if (method.equalsIgnoreCase("post")) {
            // 处理post乱码
            request.setCharacterEncoding("utf-8");
​
        } else if (method.equalsIgnoreCase("get")) {
            // get请求
            Map<String, String[]> parameterMap = request.getParameterMap();
​
            for (String parameterName : parameterMap.keySet()) {
                String[] values = parameterMap.get(parameterName);
                if (values != null) {
                    for (int i = 0; i < values.length; i++) {
                        // 处理get乱码
                        values[i] = new String(
                                values[i].getBytes("ISO-8859-1"), "utf-8");
​
                    }
                }
            }
​
        }
        arg2.doFilter(request, arg1);
    }

b. 权限的验证

例admin文件下的所有jsp文件,都必须要登陆才能访问,在登陆时保存用户名到Session中

以前要每个jsp文件判断Session是否有值,现在可用过滤器来解决,只要判断一次

c. 脏字问题

属性文件.properties

在web-inf文件夹下新建一个properties属性文件

将要过滤的脏字写到属性文件中(必须要到Properties写,写完后再查看source)

properties注意:

a. 写的时候键不能是中文

b. 不能有空格

c. 注释是#

在init()方法中,将Properties文件读取到Properties对象中

2.监听器

2.1 基本概念

监听是一种事件驱动型的组件

监听器用于监听一些重要的事件,监听器对象可以在事件发生之前,之后作一些相应的处理

对服务器对象的创建,销毁,设值/取值起到监听作用

监听器用于项目中的数据统计 (访问次数,访问量,在线人数)

 

2.2 基本使用

1.创建一个类,并且实现Listener接口

2.实现对应接口中的方法

3.在Web.xml中注册监听类

 <listener>
    <listener-class>com.cshr.lsn.ApplicationListener</listener-class>
 </listener>

2.3 三个监听器

1.request: ServletRequestListener

创建request对象时由tomcat调用:

requestInitialized(ServletRequestEvent sre){}

销毁request对象时由tomcat调用:

requestDestroyed(ServletRequestEvent sre) {}

 

2.session: HttpSessionListener

创建session对象时由tomcat调用:

sessionCreated(HttpSessionEvent se){}

销毁session对象时由tomcat调用:

sessionDestroyed(HttpSessionEvent se) {}

会话: 一个新的用户访问服务器,会产生一个session对象

session保存服务器端的

默认的时间30分

sessionid保存在客户端

可以跨页面,不可以跨用

3.application: ServletContextListener

tomcat启动时由tomcat调用:

contextInitialized(ServletContextEvent sce){}

tomcat停止时由tomcat调用:

contextDestroyed(ServletContextEvent sce){}

可以跨页面,又可以跨用户

2.4 Servlet、Filter、Listener

a. Servlet: 服务员

b. Filter: 保安

c. Listener: 秘书

创建顺序: Listener > Filter > Servlet

销毁顺序: Servlet > Filter > Listener

监听器是tomcat启动时会全部创建,顺序由配置文件决定

默认情况下,tomcat启动时只创建监听器,过滤器,不创建Servlet

但可以配置<load-on-startup>非负整数</load-on-startup>

让tomcat在启动时就创建Servlet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值