建议使用ThreadLocal tl来完成。
你可以写一个Filter截住所有的请求,在Filter中使用tl.set(session)来将session对象放到tl中那么就可以在Dboperator中通过tl.get来获得,ThreadLocal就是用于保存Thread中的变量传递用的

解决方案 »

  1.   

    当然这个ThreadLocal应该是在某一个类中的静态变量使到Filter和Dboperator都可以访问到
      

  2.   

    如何在Dboperator.java里面来生成操作日志,而不影响其他已经写好的类.因为你主要的纪录问题还是在纪录数据库操作的有关改动,那么因为日志文件的要求就是
    需要能让后来者很好的了解这些处理的过程,那么你可以设定专门的文件日志存储地方(可以在你的server的设置中添加),那么在你的Dboperator.java的有关数据库操作中纪录下操作的动作和人员(其实有时候人员并不是很重要。如果作为一个网站的话很难做到纪录所有的访问者),纪录对数据库的影响足够了!
      

  3.   

    re ChDw(米) 
    --------------------------------------------------------------
    忘记告诉你Dboperator.java是个singleton类,如果象你这样做可能会出现同步的问题.
    而且通过Filter来判断用户的操作是粗"粒度"的.
    Arias(永恒之道)
    ---------------------------------------------------------------
    但愿客户也能向你这么想!
      

  4.   

    能不能不在Dboperator.java里面做,而考虑用如下的监听接口:
    ServletContextListener
    ServletContextAttributeListener 
    ServletRequestAttributeListener 
    ServletRequestListener
    监听Context或Request的变化来做日志的记录。如果代码比较统一,处理逻辑也不会很复杂。具体实现哪一个接口就要看你的系统比较合适用哪个了。 
      

  5.   

    无论Dboperator.java是不是singleton类并没有问题,因为每次处理请求的时候,Tomcat等Web Server会启动(当然可能是重用啦)一个单独线程完成。不同的请求自然会在不同的线程中处理,ThreadLocal tl的作用是在请求的一开始就将session保存起来。当在Dboperator中调用功能时,由于仍然处于和Filter.doFilter的同一个线程中,所以在doFileter时所保存起来的session会可以重新取得。所以只要你在Filter中保存了session,那么Dboperator.java是可以获得正确的session的(除非你单独启动线程完成了),这个和是不是singleton是没有任何关系的!
      

  6.   

    而且ThreadLoca本身是可以保证不会出现线程同步等问题
      

  7.   


    外加一点:不考虑使用WORD类库实现.DOC文档,但是如果有类似自动分页的控件,请大家推荐一个,目标文档类型,一定要是HTML或者XML