我用JUnit测试了applicationContext.xml中各注入关系,都没有问题,然后我就从JSP页面传值,但是发现抛出空指针异常,无法注入,最后发现是applicationContext.xml在工程启动时未能自动加载。
我在web.xml中写了如下配置用来加载:
 <context-param>
      <param-name>contextConfigLocation</param-name>
   <param-value>
       classpath:applicationContext.xml
   </param-value>
 </context-param>     <listener>
        <listener-class>
           org.springframework.web.context.ContextLoaderListener
        </listener-class>
     </listener
 
我也把applicationContext.xml文件拖到WEB-INF下,把classpath:applicationContext.xml换成/WEB-INF/applicationContext.xml试过,还是不能自动加载,到底是什么原因,新手求帮助啊。

解决方案 »

  1.   

    配成这个classpath:applicationContext.xml的时候 
    应该把配置文件放在src 下面,然后编译之后就在classes根目录下,不就是classpath了吗???
      

  2.   


    我就是放在src目录下的,不能自动加载,我放其他目录试了试,还是不行。
      

  3.   

    是顺序的问题吗?试试这样: <!-- 配置spring -->
    <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
      

  4.   


    首先写一个测试类:import org.junit.Test;
    import org.springframework.context.support.FileSystemXmlApplicationContext;public class TestSpring {
    @Test
    public void testSpring() {
    new FileSystemXmlApplicationContext("classpath:applicationContext.xml") ;
    }
    }测试applicationContext.xml文件没有写错,注意看控制台输出和JUnit控制台有没有错误信息,如果没有错误信息,然后在web.xml里配置:<!-- 配置spring -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
    启动tomcat看控制有没有输出什么错误信息。
      

  5.   


    我刚才把Action中调用方法的实例对象的getter和setter方法删除,启动服务器,发现会出错,说缺少setter方法,说明配置文件是加载了,既然加载了,说明注入成功,我用该对象调用方法就不会有错,可是我方法执行到对象调用方法处就抛出空指针异常,这是怎么回事?
      

  6.   


    public class SysManagerAction extends ActionSupport {
      private static final long serialVersionUID = 1L;
     
      private HttpServletRequest request;
      private Student student;
      public SysManageImpl sysManager;
            //setter、getter方法        /**
       * 管理员添加学生
       * @return
       */
      public String add(){ 
      try{
      sysManager.sysUpdateStudent(student);//执行到此处时就抛出空指针异常
      return "addSuccess";
      }catch (Exception e) {
      e.printStackTrace();
      return "addFail";
      }
      }
    }
      

  7.   


    <!-- SysManageImpl -->
    <bean id="sysManage" class="com.simpleton.CourseSystem.Service.SysManageImpl">
      <property name="dao" ref="baseDao"></property>
      </bean>
    <!-- SysManagerAction -->
      <bean id="sysManagerAction" class="com.simpleton.CourseSystem.Action.SysManagerAction">
      <property name="sysManager" ref="sysManage"/>
      </bean>
    这是applicationContext.xml中的配置,我用JUnit做过测试,都没有问题。