如题,起初配置的hibernate5,通过servlet调用hibernateUtil生成session一切正常。
后来改成了hibernate4.3.11,并修改了对应的配置文件。
结果在main方法里面调用hibernateUtil,再进行操作一切正常。但如何通过servlet访问,会马上报:**java.lang.ClassNotFoundException: org.hibernate.service.ServiceRegistry**
这个问题百度了很久,网上也有类似的疑问,但没有一个正确解决了的,希望能够得到大神的帮助。
以下是异常和相关代码:
异常
java.lang.ClassNotFoundException: org.hibernate.service.ServiceRegistry
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
at findLose.backGroud.wsz.service.UserService.(UserService.java:32)
at findLose.backGroud.wsz.control.web.LoginControl.(LoginControl.java:34)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:526)
at java.lang.Class.newInstance(Class.java:379)
at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:116)
at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1148)
at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:864)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:134)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:503)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:421)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2466)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2455)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
相关代码
@WebServlet("/dologin.html")
public class LoginControl extends HttpServlet {
UserService userService = new UserService(); //出错代码,这个里面调用了hibernateUtil来获取currentSession
…………
}
public class HibernateUtil {
private static SessionFactory sessionFactory;
private static Session session;
static {
// 创建Configuration,该对象用于读取hibernate.cfg.xml,并完成初始化
Configuration config = new Configuration().configure();
StandardServiceRegistryBuilder ssrb = new StandardServiceRegistryBuilder()
.applySettings(config.getProperties());
ServiceRegistry ssr = ssrb.build();
sessionFactory = config.buildSessionFactory(ssr);
}
/**
* 获取SessionFactory
*
* @return
*/
public static SessionFactory getSessionFactory() {
return sessionFactory;
}
public static Session getCurrentSession() {
session = sessionFactory.openSession();
return session;
}
public static void closeSession(Session session) {
if (null != session) {
session.close();
}
}
}
配置:
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/findlose</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password">123456</property>
<!--方言-->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- ORM映射产生表的策略:update 实体和表的结构和数据 -->
<property name="hibernate.hbm2ddl.auto">update</property>
<!-- 产生的SQL语句显示 -->
<property name="hibernate.show_sql">true</property>
<!-- 产生的SQL语句格式化 -->
<property name="hibernate.format_sql">true</property>
<!-- 产生一个session在一个线程上 -->
<property name="hibernate.current_session_context_class">thread</property>
<!--罗列所有持久化类的类名 ,类名重复会抛异常,即使不在一个包下-->
<mapping class="findLose.backGroud.wsz.entity.Face"/>
<mapping class="findLose.backGroud.wsz.entity.Group"/>
<mapping class="findLose.backGroud.wsz.entity.Person"/>
<mapping class="findLose.backGroud.wsz.entity.User"/>
</session-factory>
</hibernate-configuration>