zoukankan      html  css  js  c++  java
  • jsp>过滤器

    过滤器

    Servlet 程序的主要分类?
    · 标准 Servlet(JSP) —— MVC
    · 过滤 Servlet(过滤器)
    · 监听 Servlet(监听器)

                                                                                                                                                                                            

    一、如何实现一个过滤器呢?
    1、所在的类实现Filter 接口
    public interface Filter
    public void init(FilterConfig filterConfig)throws ServletException
    过滤器初始化是在容器启动时自动初始化
    public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)throws  IOException,ServletException
    在标准 Servlet 中的doGet 或doPost 方法中,传递的参数为:HttpServletRequest、HttpServletResponse
    public void destroy()

    2、如果过滤器要将内容传递到目的地,则需要 FilterChain,将请求继续向下转发
    public void doFilter(ServletRequest request,ServletResponse response)throws IOException,ServletException

    例子:
    1、对用户是否登陆进行过滤(之前是在每个JSP 页面之中判断session)

    package cn.filter ;
    import java.io.* ;
    import javax.servlet.* ;
    import javax.servlet.http.* ;
    public class LoginFilter implements Filter
    {
    public void init(FilterConfig filterConfig)
    throws ServletException
    {
    // System.out.println("** 过滤器初始化...") ;
    }
    public void doFilter(ServletRequest request,ServletResponse response,FilterChain chain)
    throws IOException,
    ServletException
    {
    // Session 属于HTTP 范畴,所以ServletRequest 对象需要先转换成HttpServletRequest 对象
    HttpServletRequest req = (HttpServletRequest)request ;
    HttpSession session = req.getSession() ;
    // 如果session 不为空,则可以浏览其他页面
    if(session.getAttribute("uname")!=null)
    {
    chain.doFilter(request,response) ;
    }
    else
    {
    // 通过requestDispatcher 跳转到登陆页
    request.getRequestDispatcher("login.jsp").forward(request,response) ;
    }
    }
    public void destroy()
    {
    // System.out.println("** 过滤器销毁...") ;
    }
    };
    /*
    <filter>
    <filter-name>login</filter-name>
    <filter-class>cn.filter.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>login</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    */

    2、网上聊天系统,屏蔽非法文字

    package cn.filter ;
    import java.io.* ;
    import javax.servlet.* ;
    public class CharFilter implements Filter
    {
    public void init(FilterConfig filterConfig)
    throws ServletException
    {
    // System.out.println("** 过滤器初始化...") ;
    }
    public void doFilter(ServletRequest request,
    ServletResponse response,
    FilterChain chain)
    throws IOException,
    ServletException
    {
    String content = request.getParameter("content") ;
    // 如果indexOf 返回-1 则表示没有查到所要的内容
    if(content!=null)
    {
    if(content.indexOf("AAA")==-1)
    {
    chain.doFilter(request,response) ;
    }
    else
    {
    System.out.println("有非法文字") ;
    // 如果需要的话,此处依然可以使用RequestDispatcher 进行跳转
    }
    }
    else
    {
    chain.doFilter(request,response) ;
    }
    }
    public void destroy()
    {
    // System.out.println("** 过滤器销毁...") ;
    }
    };
    /*
    <filter>
    <filter-name>char</filter-name>
    <filter-class>cn.filter.CharFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>char</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    */

    3、对请求内容进行统一编码setCharacterEncoding("GB2312") ;

    package cn.filter ;
    import java.io.* ;
    import javax.servlet.* ;
    public class EncodingFilter implements Filter
    {
    public void init(FilterConfig filterConfig)
    throws ServletException
    {
    // System.out.println("** 过滤器初始化...") ;
    }
    public void doFilter(ServletRequest request,
    ServletResponse response,
    FilterChain chain)
    throws IOException,
    ServletException
    {
    try
    {
    request.setCharacterEncoding("GB2312") ;
    }
    catch (Exception e)
    {
    }
    chain.doFilter(request,response) ;
    }
    public void destroy()
    {
    // System.out.println("** 过滤器销毁...") ;
    }
    };
    /*
    <filter>
    <filter-name>encoding</filter-name>
    <filter-class>cn.filter.EncodingFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>encoding</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>
    */
     
  • 相关阅读:
    Hibernate批量处理海量数据的方法
    策略模式
    SQL联合查询(内联、左联、右联、全联)的语法(转)
    git远程仓库
    datePiker弹出框被其他div遮挡
    RabbitMQ 主题(Topic)
    【计算机视觉】行为识别(action recognition)相关资料
    【计算机视觉】行为识别(action recognition)相关资料
    【计算机视觉】基于Shading Model(对光照变化一定不变性)的运动目标检测算法
    【计算机视觉】基于Shading Model(对光照变化一定不变性)的运动目标检测算法
  • 原文地址:https://www.cnblogs.com/xqzt/p/5637241.html
Copyright © 2011-2022 走看看