要求实现的功能:
  我采用的框架是springMVC+ibatis+spring(采用注解方式实现).想实现的功能是网站访问次数(一个ip一天只算访问一次,服务器重启后访问次数依然存在)。我的思路如下:
  创建一个requestListener,当有请求访问项目的时候获得对应的ip,从数据库中查找当天相同的ip是否访问过,  没访问过就将该访问记录添加到数据库中。我的数据库设计如下:
  create table visit(
    id int primary key auto_increment,
    ip varchar(20), ## 访问来源ip
    time date, ##访问时间
    url varchar(100) ## 访问的路径
  );
现在我遇到的困难就是,由于web.xml中配置三个元素的执行顺序是listener->filter->servlet..因为采用的是注解模式,数据的连接打开是在servlet中完成的.我想在listener中访问数据库如何实现...
我记得spring对hibernate支持有个openSessionInView的filter..可以再filter中打开数据库连接。不知道spring有没有对ibatis有类似的支持呢?
难道让我自己手动写一个jdbc来实现这个功能?
大神来吧。ibatisservletspring

解决方案 »

  1.   

    “当有请求访问项目的时候获得对应的ip,从数据库中查找当天相同的ip是否访问过,  没访问过就将该访问记录添加到数据库中”这些直接在过滤请求的filter里做不就行了
      

  2.   

    你在 Request 的Listener 中也可以注入Dao啊。
      

  3.   

    问题已解决
    地址如下:http://blog.csdn.net/wendellup/article/details/8501017
    我主要还是概念没弄清
    1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param>
    2.紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文.
    3.容器将<context-param></context-param>转化为键值对,并交给ServletContext.
    4.容器创建<listener></listener>中的类实例,即创建监听.
    5.在监听中会有contextInitialized(ServletContextEvent args)初始化方法,在这个方法中获得ServletContext = ServletContextEvent.getServletContext();所以listener中是可以访问到applicationContext中定义的bean的。