zoukankan      html  css  js  c++  java
  • Servlet 过滤器

    Servlet 过滤器方法
    过滤器是一个实现了 javax.servlet.Filter 接口的 Java 类。javax.servlet.Filter 接口定义了三个方法
     
    序号
    方法 & 描述
    1
    public void doFilter (ServletRequest, ServletResponse, FilterChain)
    该方法完成实际的过滤操作,当客户端请求方法与过滤器设置匹配的URL时,Servlet容器将先调用过滤器的doFilter方法。FilterChain用户访问后续过滤器。
    2
    public void init(FilterConfig filterConfig)
    web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。
    3
    public void destroy()
    Servlet容器在销毁过滤器实例前调用该方法,在该方法中释放Servlet过滤器占用的资源。
     
    使用实例:
    建一个类,实现 javax.servlet.Filter 接口,重写里面的方法

    package com.maya.filter;

    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.Arrays;

    import javax.servlet.*;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;

    public class Testfilter implements Filter {

        ArrayList<String> list=new ArrayList<String>();
        @Override
        public void destroy() {
            //
        }
       
        @Override
        //每次请求执行的代码
        public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException {
           

            HttpServletRequest request=(HttpServletRequest)arg0;   
         HttpServletResponse response=(HttpServletResponse)arg1;          
            response.setCharacterEncoding("utf-8");                   
            request.setCharacterEncoding("utf-8");

            String s1=request.getRequestURI();               
            String s2=request.getContextPath();               
            String s3=s1.substring(s2.length());        

            if(list.contains(s3)){               
               
                arg2.doFilter(request, response);       
           
            }
            else{
                HttpSession session=request.getSession();      
               
                if(session.getAttribute("user")==null){
                   
                    response.sendRedirect("denglu.jsp");      
                }
                else{
                    arg2.doFilter(request, response);          
                }   
            }
        }

       
       
        @Override
        //第一遍要执行的代码
        public void init(FilterConfig arg0) throws ServletException {
           
            String values=arg0.getInitParameter("kefangwen");   
            String[] str=values.split(","); 
            list.addAll(Arrays.asList(str)); 
        }

    }

    web.xml中的配置(复制粘贴)

    <?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
     
      <filter>
        <filter-name>testfilter</filter-name>       
        <filter-class>com.maya.filter.Testfilter</filter-class>        
     
        <init-param>
          <param-name>kefangwen</param-name>                       
          <param-value>index.jsp,index,main.jsp,main</param-value>       
        </init-param>   
      </filter>
     
      <filter-mapping>               
        <filter-name>testfilter</filter-name>       
        <url-pattern>/*</url-pattern>             
      </filter-mapping>
      <welcome-file-list>
     
     
        <welcome-file>index.html</welcome-file>
        <welcome-file>index.htm</welcome-file>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>

    这样一个过滤器就完成了

  • 相关阅读:
    【JLOI2011】飞行路线
    P3369 【模板】普通平衡树
    P1144 最短路计数
    P1462 通往奥格瑞玛的道路
    【NOIP2017】宝藏
    P1120 小木棍
    P3919 【模板】可持久化数组(可持久化线段树/平衡树)
    P3834 【模板】可持久化线段树 1(主席树)
    矩阵清零--进军硅谷
    二维数组搜素--进军硅谷
  • 原文地址:https://www.cnblogs.com/dnf1612/p/6399938.html
Copyright © 2011-2022 走看看