是关于spring整合hibernate的问题。测试类可以实现功能,但是在Action中访问就出现空指针问题。感觉就是sessionFactory没有注入到里边去。
       下面是控制台报的错误
     
Error configuring application listener of class org.springframework.web.context.ContextLoaderListener
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener   
         有Spring.jar包呢,怎么会有这样的错误。
         测试类中是利用ClassPathXmlApplicationContext读取配置文件没有问题。
         在web中是tomcat自己读取的配置文件,web.xml里面配置的listener也没问题。
         
太郁闷了!!!! 大虾们指点指点。。在线等!!!!!!

解决方案 »

  1.   


    <servlet>
    <servlet-name>context</servlet-name>
    <servlet-class>
    org.springframework.web.context.ContextLoaderServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>
     
    别用监听,有时候容易出错,直接写成servlet试试!
      

  2.   

    web.xml 文件<?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
    xmlns="http://java.sun.com/xml/ns/javaee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>  <listener> <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> </listener> 
        <context-param>
    <param-name>contextConfigLocation</param-name><!-- 没有配这个参数的时候则从WEB-INF一级目录下查找 -->
    <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
    </context-param>  <filter>
          <filter-name>struts2</filter-name>
          <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
      </filter>
      <filter-mapping>
       <filter-name>struts2</filter-name>
       <url-pattern>/*</url-pattern>
      </filter-mapping></web-app>
      

  3.   

    看一下spring的jar是否是在项目的build path里。
      

  4.   


    不知道,我把我的贴出来,我运行时没有问题。<?xml version="1.0" encoding="UTF-8"?>
    <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
     
        <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    /WEB-INF/classes/applicationContext.xml
    </param-value>
    </context-param>
    <servlet>
    <servlet-name>context</servlet-name>
    <servlet-class>
    org.springframework.web.context.ContextLoaderServlet
    </servlet-class>
    <load-on-startup>1</load-on-startup>
    </servlet>
     
     
     
     
     
     
      <!-- 字符转换     过滤器--> 
      <filter>
    <filter-name>CharsetConvertFilter</filter-name>
    <filter-class>com.city.sxzlc.filter.CharsetConvertFilter</filter-class>
    </filter>
    <!--  字符转换     过滤器   mapping --> 
    <filter-mapping>
    <filter-name>CharsetConvertFilter</filter-name>
    <url-pattern>/*</url-pattern>
    </filter-mapping>

     
     
     
    <!-- 核心控制器 --> 
      <servlet>
        <servlet-name>action</servlet-name>
        <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
        <init-param>
          <param-name>config</param-name>
          <param-value>/WEB-INF/struts-config.xml</param-value>
        </init-param>
        <init-param>
          <param-name>config/login</param-name>
          <param-value>/WEB-INF/struts-config-login.xml</param-value>
        </init-param>
         <init-param>
          <param-name>config/admin</param-name>
          <param-value>/WEB-INF/struts-config-admin.xml</param-value>
        </init-param>
         <init-param>
          <param-name>config/teacher</param-name>
          <param-value>/WEB-INF/struts-config-teacher.xml</param-value>
        </init-param>
         <init-param>
          <param-name>config/departmentchoose</param-name>
          <param-value>/WEB-INF/struts-config-departmentchoose.xml</param-value>
        </init-param>
        
        <init-param>
          <param-name>debug</param-name>
          <param-value>3</param-value>
        </init-param>
        <init-param>
          <param-name>detail</param-name>
          <param-value>3</param-value>
        </init-param>
        <load-on-startup>0</load-on-startup>
      </servlet>
      
      
      
       <!-- 验证码  --> 
      <servlet>
        <description>This is the description of my J2EE component</description>
        <display-name>This is the display name of my J2EE component</display-name>
        <servlet-name>AuthenticationCode</servlet-name>
        <servlet-class>com.city.sxzlc.servlet.AuthenticationCode</servlet-class>
      </servlet>
      
      
       <!--成绩录入后的 session释放  --> 
      <servlet>
        <description>This is the description of my J2EE component</description>
        <display-name>This is the display name of my J2EE component</display-name>
        <servlet-name>PreScoreActionSessionDestroy</servlet-name>
        <servlet-class>com.city.sxzlc.servlet.PreScoreActionSessionDestroy</servlet-class>
      </servlet>
      
      
      
      
      

    <!-- 核心控制器    apping --> 
      <servlet-mapping>
        <servlet-name>action</servlet-name>
        <url-pattern>*.do</url-pattern>
      </servlet-mapping>
      
       <!-- 验证码     mapping  --> 
      <servlet-mapping>
        <servlet-name>AuthenticationCode</servlet-name>
        <url-pattern>/login/AuthenticationCode</url-pattern>
      </servlet-mapping>
      
         <!--成绩录入后的 session释放  --> 
      <servlet-mapping>
        <servlet-name>PreScoreActionSessionDestroy</servlet-name>
        <url-pattern>/teacher/PreScoreActionSessionDestroy</url-pattern>
      </servlet-mapping>  
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
    </web-app>
      

  5.   


    <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>
    /WEB-INF/applicationContext.xml </param-value>
    </context-param>
    <listener>
    <listener-class>
    org.springframework.web.context.ContextLoaderListener
    </listener-class>
    </listener>
      

  6.   

    看一下是否有没加到项目的buildpath里...
      

  7.   

    难倒不是这里的问题?关键是我在test类中可以实现的
    test类代码 public static void main(String args[]) throws SQLException
     {
       BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
     Service h=(Service)factory.getBean("categoryService");
    List<Category>list= h.getCategory();
          System.out.print(list);
     }
      

  8.   

    action中的代码  
    public String list() throws SQLException {
    this.categories=categoryService.getCategory();
     return SUCCESS;
    }
      

  9.   

    lz是用Eclipse吗?
    如果是,你到项目的根目录下,有一个.classpath文件,这个文件记录了web项目的classpath。
    你打开贴上来看看
      

  10.   

    你看看struts中的代理用的有没有问题
    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"><struts-config>
      <data-sources />
      <form-beans >
     <form-bean name="loginForm" type="com.sxzlc.score.login.struts.form.LoginForm" />
      </form-beans>  <global-exceptions />
      <global-forwards />
      <action-mappings >
          <action
          parameter="method"
          path="/preLogin"
          type="com.sxzlc.score.login.struts.action.PreLoginAction">
          <forward name="login" path="/../login/login.jsp" />
        </action>
        <action
          attribute="loginForm"
          input="/../login/login.jsp"
          name="loginForm"
          path="/login"
          scope="request"
          type="com.sxzlc.score.login.struts.action.LoginAction">
          <forward name="teacher" path="/../teacher/main/main.jsp" />
          <forward name="admin" path="/../admin/main/main.jsp" />
        </action>
      
         </action-mappings>  <controller
    processorClass="org.springframework.web.struts.DelegatingRequestProcessor">
      </controller>
      <message-resources parameter="com.sxzlc.score.struts.ApplicationResources" />
      <plug-in
    className="org.springframework.web.struts.ContextLoaderPlugIn">
    <set-property property="contextConfigLocation"
    value="/WEB-INF/classes/applicationContext.xml" />
     </plug-in>
    </struts-config>
      

  11.   

    都比较一下看看<?xml version="1.0" encoding="UTF-8"?>
    <beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
    <bean id="datasource"
    class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName"
    value="com.mysql.jdbc.Driver">
    </property>
    <property name="url"
    value="jdbc:mysql://localhost:3307/dultscore?useUnicode=true&amp;characterEncoding=gbk">
    </property>
    <property name="username" value="root"></property>
    <property name="password" value="root"></property>
    </bean>
    <bean id="sessionFactory"
    class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
    <ref bean="datasource" />
    </property>
    <property name="hibernateProperties">
    <props>
    <prop key="hibernate.dialect">
    org.hibernate.dialect.MySQLDialect
    </prop>
    <prop key="hibernate.show_sql">true</prop>
    </props>
    </property>
    <property name="mappingResources">
    <list>
    <value>
    com/sxzlc/score/login/value/LoginValue.hbm.xml
    </value>
    <value>
    com/sxzlc/score/admin/value/TeacherValue.hbm.xml
    </value>
    <value>
    com/sxzlc/score/admin/value/ProfessionalValue.hbm.xml
    </value>
    <value>
    com/sxzlc/score/admin/value/CollageValue.hbm.xml
    </value>
    <value>
    com/sxzlc/score/admin/value/SemesterValue.hbm.xml
    </value>
    <value>
    com/sxzlc/score/admin/value/SchoolyearValue.hbm.xml
    </value>
    <value>
    com/sxzlc/score/admin/value/CourseValue.hbm.xml
    </value>
    <value>
    com/sxzlc/score/departmentchoose/value/ProSemesterValue.hbm.xml
    </value>
    <value>
    com/sxzlc/score/teacher/value/SemesterTeacherValue.hbm.xml
    </value>
    <value>
    com/sxzlc/score/teacher/value/SemesterCourseValue.hbm.xml
    </value>
    <value>
    com/sxzlc/score/teacher/value/SemesterStudentValue.hbm.xml
    </value>
    <value>
    com/sxzlc/score/teacher/value/SemesterScoreValue.hbm.xml
    </value></list>
    </property></bean>


    <bean id="hibernateTemplate"
    class="org.springframework.orm.hibernate3.HibernateTemplate">
    <property name="sessionFactory">
    <ref bean="sessionFactory"/>
    </property>
    </bean><!-- 登录模块  对DAO注入  loginDao -->
    <bean id="loginDao" class="com.sxzlc.score.login.dao.impl.LoginDaoImpl">
    <property name="hibernateTemplate">
    <ref bean="hibernateTemplate"></ref>
    </property>
    </bean>
    <!-- 登录模块  对 Action注入  loginAction -->
        <bean name="/login/login" class="com.sxzlc.score.login.struts.action.LoginAction">
    <property name="loginDao">
    <ref bean="loginDao"/>
    </property>
    </bean>
      

  12.   


    用的MyEclipse
    <?xml version="1.0" encoding="UTF-8"?>
    <classpath>
    <classpathentry kind="src" path="src"/>
    <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
    <classpathentry kind="con" path="melibrary.com.genuitec.eclipse.j2eedt.core.MYECLIPSE_JAVAEE_5_CONTAINER"/>
    <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/hibernate3.3.2"/>
    <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/spring"/>
    <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/xwork-2.1.2.jar" sourcepath="D:/share/0701-Struts2/xwork/xwork-2.1.2-sources.jar"/>
    <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/ognl-2.6.11.jar"/>
    <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/freeer-2.3.13.jar"/>
    <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/commons-fileupload-1.2.1.jar"/>
    <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/commons-io-1.3.2.jar"/>
    <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/struts2-core-2.1.6.jar" sourcepath="D:/share/0701-Struts2/struts-2.1.6/src"/>
    <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/mysql-connector-java-3.1.13-bin.jar"/>
    <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/c3p0-0.9.0.4.jar"/>
    <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/dom4j-1.6.1.jar"/>
    <classpathentry kind="lib" path="WebRoot/WEB-INF/lib/commons-pool.jar"/>
    <classpathentry kind="output" path="WebRoot/WEB-INF/classes"/>
    </classpath>
     
      

  13.   

    <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/spring"/>
    确认一下spring lib里有没有spring.jar.
    如果有,就不是jar没导入的原因了。。
      

  14.   

    我测试过如果我把public String list() throws SQLException {
     this.categories=categoryService.getCategory();
     return SUCCESS;
    }
    这段代码改成 public String list() throws SQLException {
     
     BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
     HibernateDaoImpl h=(HibernateDaoImpl)factory.getBean("CategoryDao"); 
         
     this.categories= h.getCategory();  
     return SUCCESS;
    }  就没有问题!!!
      

  15.   

    <listener-class> org.springframework.web.context.ContextLoaderListener </listener-class> 
    去掉所有的空行,和空格。
    些成一行试试。。
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 以前遇到过因为配置是从别的地方copy过来的,因为编码问题导致错误的情形。
      

  16.   

    Illegal access: this web application instance has been stopped already.  Could not load java.net.BindException.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
    java.lang.IllegalStateException
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1273)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    at com.mysql.jdbc.CommunicationsException.<init>(CommunicationsException.java:155)
    at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2757)
    at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2650)
    at com.mysql.jdbc.MysqlIO.quit(MysqlIO.java:1366)
    at com.mysql.jdbc.Connection.realClose(Connection.java:4475)
    at com.mysql.jdbc.Connection.cleanup(Connection.java:1975)
    at com.mysql.jdbc.Connection.finalize(Connection.java:3124)
    at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method)
    at java.lang.ref.Finalizer.runFinalizer(Unknown Source)
    at java.lang.ref.Finalizer.access$100(Unknown Source)
    at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)
    2010-7-24 23:00:15 org.apache.catalina.loader.WebappClassLoader loadClass
    信息: Illegal access: this web application instance has been stopped already.  Could not load com.mysql.jdbc.Messages.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
    java.lang.IllegalStateException
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1273)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)
    at java.lang.ClassLoader.loadClassInternal(Unknown Source)
    at com.mysql.jdbc.CommunicationsException.<init>(CommunicationsException.java:174)
    at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2757)
    at com.mysql.jdbc.MysqlIO.send(MysqlIO.java:2650)
    at com.mysql.jdbc.MysqlIO.quit(MysqlIO.java:1366)
    at com.mysql.jdbc.Connection.realClose(Connection.java:4475)
    at com.mysql.jdbc.Connection.cleanup(Connection.java:1975)
    at com.mysql.jdbc.Connection.finalize(Connection.java:3124)
    at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method)
    at java.lang.ref.Finalizer.runFinalizer(Unknown Source)
    at java.lang.ref.Finalizer.access$100(Unknown Source)
    at java.lang.ref.Finalizer$FinalizerThread.run(Unknown Source)空格我都删了。保存了一下。控制台报这个错误。
      

  17.   

    之前的
    java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener 
    错误应该解决了。
    这是新的错误了。  
      

  18.   

    看一下 这个吧:
    http://blog.sina.com.cn/s/blog_4a9eb8290100al4b.html
      

  19.   

    不是。之前的java.lang.ClassNotFoundException:org.springframework.web.context.ContextLoaderListener   是tomcat报的错。
    后来的那个是我redeploy项目报的错
      

  20.   

    有包并不代表着有类啊,进包里看看是否真的有你配置的那个Listener类
      

  21.   

    不是这个的问题。因为tomcat会读取配置文件。如果配置文件错了,tomcat 也会报错。
      

  22.   

    有人用过CVS么?感觉程序在修改的时候经常出现错误。想回到错误之前很麻烦!!!!
      

  23.   

    如果测试能通过,action报错的话,是不是你没有加这个包:
    struts2-spring-plugin-2.1.8.1.jar
    并且struts的xml文件中要申明:
    <!-- 配置Spring与Struts2集成,action对象由Spring容器创建 -->
    <constant name="struts.objectFactory" value="spring" />