正文

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);

阅读(1829) | 评论(0)


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

评论

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