正文

javaWeb笔记(10)2008-04-01 20:06:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/ghlat520/33784.html

分享到:

第十章  过滤器
                        什么是过滤器:
                         A:过滤器是封装了某些功能的一个Servlet
                         B:过滤器能够在服务器接受客户端的请求之前进行预处理,也能够在服务器处理完结果之后进行后处理
                         C:过滤器拦截请求和响应,以便以某种方式操作正在客户机和服务器之间交换的数据
                         D:客户端----->(请求)过滤器------->Web服务器 或 Web服务器-->响应---->客户
                         E:过滤器会在客户端发送请求和服务器响应客户端"自动"被调用

                       为什么要使用过滤器:
                            提出问题
                               1)阻止末授权访问
                               2)压缩数据
                        结论:如果有多个JSP页面和Servlet都需要进行一个相同或相似的操作,我们可以把这个操作放到一个过滤器

                       如何编写过滤器
                        A:过滤器一般会继承HttpServlet类,并实现Filter接口
                        B:过滤器一定要实现Filter接口中定义的三个方法:
                          1)public void init(FilterConfig filterConfig) throws ServletException //初始化
                             其中的FilterConfig参数用来读取过滤器的配置信息,如果过滤处理过程中
                             不汲及到读取配置信息,则可以不使用这个参数
                          2)public void doFilter(ServletRequest request, ServletResponse response,FilterChain filterChain)  //执行                             
                          3)public void destroy()//销毁
                        C:doFilter中的ServletRequest表示请求,ServletResponse表示响应。
                          HttpServletRequest是ServletRequest的子类,HttpServletResponse是
                          ServletResponse它的子类,为了得到更多的方法一般需要向子类进行转换
                              HttpServletRequest req=(HttpServletRequest)request;
                              HttpServletResponse res=(HttpServletResponse)response;
                          在doFilter中进行程序处理之后,一定要调用filterChain.doFilter(request,response);
                          来执行过滤器(**************)
                          
                     过滤器的生命周期
                       实例化--->初始化(去执行init方法)----->过滤(执行doFilter方法)--->销毁(执行destroy()方法)
                    
                     过滤器编写配置信息
                      1)过滤器只要经过配置之后,才能使用。
                      2)在web.xml中进行配置
                      3)语法格式:
                           <filter> //用来描述过滤器
                              <filter-name>loginfilter</filter-name>
                              <filter-class>tagapp.loginFilter</filter-class>
                          </filter>
                        <filter-mapping> //过滤器的映射关系配置
                             <filter-name>loginfilter</filter-name>
                             <url-pattern>/*</url-pattern> (表示所有页面都要经过过滤器过滤
                        </filter-mapping>
                     4)这些都是Jbulider自动生成的,但是要有所了解


                                  过滤器的应用举例
                           说明:编写过滤器一定要搞清楚,不过滤的和过滤的页面
                         1)编写一个过滤器用来限制用户末登录就使用其页面
                            HttpServletRequest req=(HttpServletRequest)request;
                            HttpServletResponse res=(HttpServletResponse)response;
                            HttpSession session=req.getSession();
                            String url=req.getRequestURI();
                            if (session.getAttribute("isLogin")==null && !url.endsWith("login.jsp") && !url.endsWith("check.jsp") ) //说明没有登录
                               {           
                                     res.sendRedirect("login.jsp");           
                                }     
                             filterChain.doFilter(request,response);
                         2)使用过滤器限制客户访问游戏网站的时间
                                HttpServletResponse res = (HttpServletResponse) response;
                                HttpServletRequest req = (HttpServletRequest) request;
                                Date demo = new Date();
                                int save = demo.getHours();
                                String url=req.getRequestURI();
                                if (!(save >= 8 && save <= 18) && !url.endsWith("error.jsp")) {
                                    res.sendRedirect("error.jsp");
                                   }
                                filterChain.doFilter(request,response);
                         3)改进第2例中,使用参数配置来决定限制的时间段
                            A:设置参数
                             <filter>
                                <filter-name>limitfilter</filter-name>
                                <filter-class>tagapp.limitFilter</filter-class>
                                <init-param>
                                   <param-name>starttime</param-name>
                                   <param-value>8</param-value>
                               </init-param>
                             </filter>
                          B:读取参数
                             this.filterConfig.getInitParameter("starttime")
                       4)通过过滤器来解决从表单提交数据写入数据库中的乱码
                          正确情况下,如果从表单提交过来的数据是汉字,则会出现乱码。但是
                          可以通过request.setCharacterEncoding("GBK")来设置,但是每一个
                          页面都来设置很复杂,于是可以通过过滤器来实现
                              request.setCharacterEncoding("GBK");
                              filterChain.doFilter(request,response);

阅读(1752) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册