问题就是出现在获取上下文的方法上面源代码如下ServletContext context = config.getServletContext();
WebApplicationContext wac = WebApplicationContextUtils
.getRequiredWebApplicationContext(context);
DataManagerService service = (DataManagerService)wac.getBean("dataManagerService");
我该把这段代码放在哪里呢现在的结构是 三个servlet A,B,C 集成一个BaseServlet三个Servlet都在web.xml中定义然后只有C用到了Service与数据库交互我把这段代码放在了C的init和 Base的init方法中都试了一次 都抛出了Service空指针异常不知道到底是什么原因? 请高手指点

解决方案 »

  1.   

    首先,Spring在这里表现出来得IOC特性使得你在Spring框架以外不对实例化的对象进行操作,无论这里是否可以获得context进而去操作框架中得实例化对象,这样得设计都是有悖Spring框架的设计原则的,因为这样的设计无疑增加了侵入性。第二,Spring框架得切入方式也等同或者类似Servlet,而Servlet的交互最好都放在view层。也就是说。我可以通过url方式来调用另外一个Servlet。第三,对于现在你的这个设计,对于框架,我建议还是舍弃掉Spring,Ibatis的使用,是不需要配置成为一个Servlet的。例子很多,可能是你搜索的不太对。
      

  2.   

    我把这段代码放在了C的init和 Base的init方法中都试了一次 都抛出了Service空指针异常 
    ========
    这个的原因可能是你没有在web.xml加载Spring的上下文Listener
    你把如下内容加到web.xml中: <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    classpath:你的spring bean xml文件
    </param-value>
    </context-param> <listener>
    <listener-class>
    org.springframework.web.context.ContextLoaderListener
    </listener-class>
    </listener>
      

  3.   

    应该是可以获取的 与是否使用spring没什么关系都抛出了空指针 debug吧 空指针是比较好解决的问题吧
      

  4.   

    感谢各位高手的指点 经过一天的努力 错误已经排除 因为加上Spring的ContextLoader 和我的三个Servlet 现在启动里面一共有四个所以启动顺序也决定了加载是否成功 经验证排除打错参数名,以及拼写的原因 只要Spring正确加载在前面 载入之后是可以通过上下文获得Service的感谢高手的指点!
      

  5.   

    多谢指点,只是我现在不知道用什么技术手段实现了 难道要手动写一个性能好的JDBC数据库连接池吗如何能不动现有的三个Servlet来实现这些 又是一个问题 总之谢谢大家的意见了
      

  6.   

    iBATIS支持连接池,甚至支持数据对象缓存。可以使用iBATIS,但是不必要和Spring进行整合。我的意见是这样。
      

  7.   

    感谢各位 指点! 结贴! 现在先用熟悉点的Ibatis和Spring结合 操作更方便事务也托管了 发现了问题后在解决吧