是关于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也没问题。
太郁闷了!!!! 大虾们指点指点。。在线等!!!!!!
下面是控制台报的错误
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也没问题。
太郁闷了!!!! 大虾们指点指点。。在线等!!!!!!
解决方案 »
- 问个关于异常处理的例子
- 外企面试后发了张联络函是什么意思?
- 谁知道163和yahoo油箱的接口啊?
- 出乎意料的部署运行servlet未成功!!
- hibernate高手请进,exception setting property value with CGLIB 问题
- 进者有分!
- 如何 拖动JBuilder9 中的可视化控件 到我想要的位置
- hibernate的困惑,1天了,请教,呜~~
- 已知类名,怎么动态生成该类的对象,急.
- 哪位大哥可以告诉小弟CORBA,CCM,和分布式对象之间的关系
- SOA方面的新手,问一个低级的问题。如何保存soap message?
- 没办法了,谁教下我的SSH框架配置文件如何加连接池??
<servlet>
<servlet-name>context</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
别用监听,有时候容易出错,直接写成servlet试试!
<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>
不知道,我把我的贴出来,我运行时没有问题。<?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>
<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>
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);
}
public String list() throws SQLException {
this.categories=categoryService.getCategory();
return SUCCESS;
}
如果是,你到项目的根目录下,有一个.classpath文件,这个文件记录了web项目的classpath。
你打开贴上来看看
<?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>
<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&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>
用的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>
确认一下spring lib里有没有spring.jar.
如果有,就不是jar没导入的原因了。。
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;
} 就没有问题!!!
去掉所有的空行,和空格。
些成一行试试。。
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 以前遇到过因为配置是从别的地方copy过来的,因为编码问题导致错误的情形。
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)空格我都删了。保存了一下。控制台报这个错误。
java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderListener
错误应该解决了。
这是新的错误了。
http://blog.sina.com.cn/s/blog_4a9eb8290100al4b.html
后来的那个是我redeploy项目报的错
struts2-spring-plugin-2.1.8.1.jar
并且struts的xml文件中要申明:
<!-- 配置Spring与Struts2集成,action对象由Spring容器创建 -->
<constant name="struts.objectFactory" value="spring" />