现在和以前不一样了,我记得我用struts那年代,还不流行注入,现在不同了我自己写的东西也经常靠反射注入,
servlet里面必须有字段了,否则注给谁啊,主要是用起来方便,不靠属性注入也是可以的,但不方便。非单例线程
我觉得根源还是方便,安全,基础不好的也不会写出有bug的程序来。servlet中的各个方法也不能靠参数传来传去了。
同时现在jvm性能也比较好了。

解决方案 »

  1.   

    不能-》不用
    struts-》Structs
    另外现在硬件也很好了。
    同时在web容器上,考虑了线程池。线程的创建性能没有了,普通对象的创建速度还是很快的。
      

  2.   

    楼上的大哥回帖回错地方了吧,SingleThreadModel是javax.servlet包里的一个接口啊,和struts没关系的。
      

  3.   

    不好意思我是从字面意来看的,事先不知道他是一个接口,我以为是讨论线程安全问题。sorry,同时哦还从字面上理解错了,刚才查了下api,1楼的回复当我没说,正好和我对这个单词的原意相反
    不过struts和线程还是有关系的,struts的老版本原理是servlet分发器。
      

  4.   

    哦,呵呵,总之谢谢了,其实SingleThreadModel是已经过时了的一个接口,以前为了防止并发访问context和session的attribute,后来被标记为过时的了,要求程序员自己对其经行加锁。貌似这个被淘汰的原因和web容器线程池的出现有关,但是具体原因我也不清楚,希望有高人解答一下。
      

  5.   

    我用多线程都是自己给它加的锁,没用过SingleThreadModel,呵呵
      

  6.   

    看Java Servlet API 2.4中Deprecated它的解释是:
    SingleThreadModel虽然在同一时间只能有一个现成访问service方法,但是SingleThreadModel并不能保证静态变量、会话属性等信息被多线程访问(那这个接口还能干什么),所以Servlet API 2.4不推荐使用它。 servlet存在线程安全问题,因为初始化的时候,一般只实例化一个Servlet实例,所以就存在属性会被多线程更改的问题,既然实现这个接口也不能保证多线程的并发,那么莫不如人为的避免多线程问题,比如声明局部变量,不保留状态等
      

  7.   


    再想请教一下,session为什么不是线程安全的,在什么情况下会出现并发访问的情况。
      

  8.   

    session的线程安全?有个很细节的地方,老紫竹有个帖子,你可以研究一下
    http://www.java2000.net/p9667
      

  9.   

    SCWCD  好难,祝楼主早日通过
      

  10.   

    session的属性要并发访问,也就是要同时有两个request进行访问,可是怎么会出现同一个session的用户同时向服务器提交两个request的情况呢?
      

  11.   

    不能-》不用 
    struts-》Structs 
    另外现在硬件也很好了。 
    同时在web容器上,考虑了线程池。线程的创建性能没有了,普通对象的创建速度还是很快的。
      

  12.   

    同一个浏览器,打开连个页面,这两个页面就是一个用session