servlet过滤器重点内容

过滤器(Filter接口)

                           (1)作用:在请求资源(静态资源或动态资源),或者响应资源,或者请求和响应资源时,执行过滤任务。

                           (2)Filter的生命周期:

                                     init方法:初始化方法。参数FilterConfig对象,用于读取Filter配置的init-param参数。

                                     doFilter方法:执行过滤任务。每次访问目标资源时被执行。

                                    参数一: ServletRequest,是HttpServletRequest接口的父类,可以强制转换为HttpServletREquest                                          参数二: ServletResponse,是HttpServletResponse的父类,可以强制转换为HttpServletResponse                                     参数三: FilterChain,是过滤器链对象。当一个资源同时被多个过滤器所过滤,那么就形成一个过滤器链。调用FilterChain的doFilter(request,response)方法,执行过滤器链的下一个过滤器,如果没有过滤器则调用目标资源。

                                     destory方法:销毁Filter对象的时候调用。

                           (3)装饰者模式:当需要对某些类的方法进行增强,那么可以对该类进行装饰。

                                               3.1编写一个装饰者类,继承被装饰者类(被装饰者类是非final的)

                                               3.2声明一个成员变量,用于接收被装饰者类对象

                                               3.3在装饰者类的构造方法中,接收被装饰者类对象。

                                               3.4覆盖需要增强的方法。

                            (4) 解决参数中文乱码问题:

                                     核心: MyHttpRequest装饰者类,对HttpServletRequest的getParameter方法进行增强。

                                     getParameterValues("name")/ getParameterMap();

                           (5)网页内容压缩问题:

                                     核心: MyHttpResponse装饰者类,对HttpServletResponse的getWriter方法进行增强。

                                     让getWriter()方法返回带缓存功能的PrintWriter对象,这样PrintWriter的write方法写入的内容就直接写入到PinrtWriter中的缓存对象中。然后可以通过缓存对象取出内容。

                                                        ByteArrayOutputStreambuf = new ByteArrayOutputStream()

                                                        GZIPOutputStreamgzip = new GZIPOutputStream(buf);

                                                        gzip.write(内容);

                                                        gzip.finish();  //内容写入到ByteArrayOutputStream中

                                                        byte[]result = buf.toByteArray(); //从ByteArrayOutputStream中得到压缩后的内容

                           (6)登录权限的过滤

                                               核心: SecurityFilter过滤器中,进行登录权限的判断,这个过滤器要过滤哪些需要权限才能访问的资源。(注意:不要过滤登录页面,登录的servlet)

                                                                           if(session==null){

                                                                                    没有权限的处理

                                                                           }else{

                                                                                    Stringuser = (String)session.getAttribute("user");

                                                                                    if(user==null){

                                                                                                       没有权限的处理

                                                                                    }

                                                                           }

                                                                           //登录成功后,应该要放行资源

                                                                           chain.doFilter(request,response);


猜你喜欢

转载自blog.csdn.net/abandon_li/article/details/80627477