在Dao层加上ThreadLocal,Struts2封装的Http的组件好像也是在ThreadLocal中,这样就能跨层传递。Dao层从ThreadLocal中取出组件就可以拿用户、访问地址等等重要信息。

解决方案 »

  1.   

    action层直接调dao?
    你action里面把数据组装传递给Service层
    然后Service层统一调用dao层不好吗?
      

  2.   

    不会对性能有影响吗?能保存的容量有没有上限?保存的信息应该不多,但并发量多了的话,也不知道会不会出问题。就想知道这个只要不开守护线程,多线程调试,ThreadLocal不会影响性能,至少它绝对不可能成为性能瓶颈。ThreadLocal实际就是map,存的是当前线程与对象的引用,当前线程结束它也就没了。
      

  3.   

    action调的是server层,我的意思是action层就把用户信息、链接什么的都丢弃了,没往下存,只把一些分页信息,关键字,表名等往下传,如果都往下传,几个模块,每个模块都有很多方法,都往下传比太实际而已,而且这样设计也不太合理,参数会传两层,改动量对代码的影响很重。
      

  4.   

    日志Log4J的MDC就有这个功能啊
      

  5.   

    学习了 ,楼上说的很对,ThreadLocal定义一个变量,实际容器是map,确实能解决楼主的情况
      

  6.   

    action调的是server层,我的意思是action层就把用户信息、链接什么的都丢弃了,没往下存,只把一些分页信息,关键字,表名等往下传,如果都往下传,几个模块,每个模块都有很多方法,都往下传比太实际而已,而且这样设计也不太合理,参数会传两层,改动量对代码的影响很重。
    你这个可以通过拦截器去做 任何action操作都要触发这个拦截器 如果是指定操作 就调用指定的Service去保存操作日志 不用侵入到各个action中
      

  7.   

    配置一个全局的拦截器,所有action继承它。这个拦截器的作用:每次action请求都会先执行拦截器,在这里进行日志的处理。但是,这种方式有个很严重的问题,action的处理结果就没法进日志了,因为拦截器是先于action 执行。
      

  8.   

    1、利用一个全局Filter来管理访问的PATH与当前登陆的用户信息,然后把这些信息存入当前线程中;
    2、Hibernate有统一打印SQL日志的功能,你把这方面的源代码翻出来看一看,应该可以扩展的;
    3、然后在扩展的日志类中从当前线程获取用户信息与访问路径即可。
      

  9.   

    4、获取到信息之后再把访问的路径、用户名、SQL语句存入数据库。
      

  10.   

    action调的是server层,我的意思是action层就把用户信息、链接什么的都丢弃了,没往下存,只把一些分页信息,关键字,表名等往下传,如果都往下传,几个模块,每个模块都有很多方法,都往下传比太实际而已,而且这样设计也不太合理,参数会传两层,改动量对代码的影响很重。
    你这个可以通过拦截器去做 任何action操作都要触发这个拦截器 如果是指定操作 就调用指定的Service去保存操作日志 不用侵入到各个action中
    不行,sql语句生成是在dao层,在action层无法得到sql语句,需求里也要把sql语句保存,就算拦截了也没用,sql回传的话跟我说的一样,每个方法都要修改返回的数据
      

  11.   

    是有,思路已经明确了,就是在登陆的Filter过后保存当前线程的所有信息,然后在写个操作日志的拦截器,在所有sql语句执行前进行拦截
      

  12.   

    是有,思路已经明确了,就是在登陆的Filter过后保存当前线程的所有信息,然后在写个操作日志的拦截器,在所有sql语句执行前进行拦截
    恩,解决后希望楼主你可以写一篇详细的解决方案文章发布到你的博客中。
      

  13.   

    可否这样呢设置一个filter,经过的时候把需要的信息 封装为一个map
    再获得sessionid
    根据sessionid 存放于spring容器中反向经过filter的时候再销毁srping容器中对应的sessionid
      

  14.   


    哟~想法不错,挺新颖的,从没考虑过session的sessionId也唯一的~不过我的功能流产了,建议不错
      

  15.   

    看了,jdbcAppender是个好东西,以后打算继承该类写个日志记录功能