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>
    */
     
  • 相关阅读:
    在 Anaconda下解决国内安装tensorflow等下载慢和中断,出错,异常问题的一点思路
    关于指针和结构体的一点教训
    ARM cortexM4中断优先级的一点理解。
    ubuntu16下的/etc/resolv.conf重置的解决方案
    linux安装dpkg安装缺少依赖项的解决
    莲藕的简单凉菜制作总结
    单片机一种简便的printf调试方案。
    usart下位机输出使用printf的格式化技巧
    关于xp操作系统下使用VC6++编写的上位机软件在win10中运行的问题
    百度面试两板斧:手写算法问基础
  • 原文地址:https://www.cnblogs.com/xiaoqiangzhaitai/p/5429516.html
Copyright © 2011-2022 走看看