• 统计ip地址访问量


    jsp:代码如下

      <body>
        <table align="center" border="1" width="70%">
        <tr>
        <th>IP</th>
        <th>访问的次数</th>
        </tr>
        <c:forEach items="${ applicationScope.map}" var="entry">
        <tr>
        <th>${entry.key }</th>
       <th>${entry.value }</th> 
        </tr>
        </c:forEach>
        

    fliter的代码如下:

    package cn.edu.nsu.filter;


    import java.io.IOException;
    import java.util.Map;


    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;


    public class classFilter implements Filter {//现在xml中进行配置
    private ServletContext application;
    @Override//在服务器启动之后调用
    public void destroy() {//生命周期方法在关闭时调用对非内存资源进行释放
    // System.out.println("我要死了,抢救一下吧,我觉得我还有救,试一下吧,不行的话换个医生再试试?");
    }


    @Override
    public void doFilter(ServletRequest arg0, ServletResponse arg1,
    FilterChain arg2) throws IOException, ServletException {//每次过滤时都会执行该方法
    // System.out.println("你输出了算我输");
    Map<String, Integer> map=(Map<String, Integer>) application.getAttribute("map");//得到map对象
    String IP=arg0.getLocalAddr();//得到访问的ip地址
    if(map.containsKey(IP)){//判断是否包涵此ip地址
    Integer value=map.get(IP);
    map.put(IP, value+1);//若包含value值加一
    }else {
    map.put(IP, 1);//不包含给定默认值1
    }
    application.setAttribute("map", map);
    arg2.doFilter(arg0, arg1);//放行,让程序进行servlet后面的代码

    }


    @Override//在服务器销毁之前调用
    public void init(FilterConfig arg0) throws ServletException {//生命周期方法在启动时调用用来进行初始化
    //filterConfig和servletConfig及其的类似方法差不多
    //最主要的是获得application对象
    // System.out.println("我想,我是不是来了");
    application=arg0.getServletContext();//得到servletContext对象,保存到当前的类中
    //拦截的四种方式
    //1 请求 request//默认拦截他
    //2 转发 forward
    //3 包含 include
    //4 错误 error
    //在xml中进行如下配置<dispatcher>将上面中的一个改为大写就会拦截该对象</dispatcher>
    }


    }



    listener的代码如下:

    package cn.edu.nsu.listener;


    import java.util.LinkedHashMap;
    import java.util.Map;


    import javax.servlet.ServletContext;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;


    public class listener implements ServletContextListener {
        public void contextInitialized(ServletContextEvent arg0) {
            Map<String, Integer> map=new LinkedHashMap<String, Integer>();//设置map对象
            ServletContext application=arg0.getServletContext();//通过ServletContextEvent拿到ServletContext对象
            application.setAttribute("map", map);//将map对象保存到ServletContext域中
        }


        public void contextDestroyed(ServletContextEvent arg0) {
            
        }

    }

  • 相关阅读:
    代码中回调的用法
    关于导入外部样式表的目录问题
    js操作元素样式
    JavaSE学习总结第10天_面向对象5
    JavaSE学习总结第09天_面向对象4
    JavaSE学习总结第08天_面向对象3
    JavaSE学习总结第07天_面向对象2
    JavaSE学习总结第06天_Java语言基础2 & 面向对象1
    JavaSE学习总结第05天_Java语言基础1
    JavaSE学习总结第03天_Java基础语法2
  • 原文地址:https://www.cnblogs.com/csnd/p/16675737.html
Copyright © 2020-2023  润新知