hibernate4.3在servlet中的无法找到ServiceRegistry

问题描述

hibernate4.3在servlet中的无法找到ServiceRegistry

如题,起初配置的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>

解决方案

提供三个思路:
1. org.hibernate.service.ServiceRegistry是包org.hibernate.service中的一个方法,而org.hibernate.service包在hibernate-core-xx.jar中,你看一下hibernate-core-xxx.jar这个核心包有没有导入,不过这个可能性不大。

  1. 与struts结合时就出现问题,可能是jar包没有拷贝到WEB-INF/lib文件夹下,你可能使用UserLibary自己加的包,也就是说WEB-INF/lib下在部署时没有拷贝你的jar包进来,所以你可以尝试这样去解决:看这篇文章的方法:http://blog.csdn.net/eson_15/article/details/51281079
    你将所有你自己添加的jar包全部选中即可。
  2. hibernate4获取sessionFactory你试试下面的方法:
 public class HibernateUtil {

    private static SessionFactory sessionFactory;
    private static Session session;
        private static Configuration configuration = new Configuration();
    private static ServiceRegistry serviceRegistry; 

    static {
       try {
                        configuration.configure();
                        serviceRegistry = new ServiceRegistryBuilder().applySettings(configuration.getProperties()).buildServiceRegistry();
                        sessionFactory = configuration.buildSessionFactory(serviceRegistry);
            } catch (Exception e) {
                        System.err.println("%%%% Error Creating SessionFactory %%%%");
                        e.printStackTrace();
            }
    }

解决方案二:

忘了标2和3了,2是试试博客里提到的方法,你将自己添加的jar包全选中。 3是你试试我给你的获取sessionFactory的方法

时间: 2024-07-28 19:41:25

hibernate4.3在servlet中的无法找到ServiceRegistry的相关文章

如何servlet中获取请求信息

问题描述 我们知道服务器接收到get请求后,由servlet处理业务. 但反过来,在servlet中,能不能获取到当前的请求到底还带有什么参数呢? 在filter里又是如何获得这些请求的信息的呢?(本人以为设置断点的变量里能直接找到,但分支太多不知在哪里),请问有没有方便获取这些东西的便捷方法???(不得已才用代码获得) 解决方案 protected void service(HttpServletRequest req, HttpServletResponse resp)从req里面获取呀,很

Spring开发 - 通过实现ApplicationContextAware在Servlet中调用注解的Service

用过Spring MVC的人都知道,我们如何在Controller中注入Service,可以使用@Resource注解的方法. 有时候,实际在项目的过程中,我们需要在某个Servlet中使用Service, 但是由于Spring MVC中的Servlet都是由 DispatcherServlet统一管理的,因此,像Controller方式的注解方式注入在普通的Servlet中是行不通的. 本文介绍通过实现ApplicationContextAware的方法在你自己的Servlet中也可以很轻松地

java-Jsp+Servlet怎么在form中指定要访问的servlet中的方法名

问题描述 Jsp+Servlet怎么在form中指定要访问的servlet中的方法名 Jsp+Servlet怎么在form中指定要访问的servlet中的方法名,在Jsp中写了一个form,然后想指定访问servlet中的regist()方法,而不是doGet()或者doPost()方法,应该怎么样指定 解决方案 servlet只能指定post,get请求,你随便请求一个,在调一下regist()呗,或者重写父类service方法,在里面加入regist() 解决方案二: dopost里面判断调

ajax返回中文乱码,servlet中的显示乱码,post提交的乱码问题,编码大总结

ajax|servlet|编码|问题|显示|中文|中文乱码 ajax返回中文乱码问题解决使用ajax获取服务器数据返回给客户端,出现中文乱码.在之前的一个ajax应用中指定codepage=936,将所有页面编码都指定为GB2312即可解决.这 次的应用中却无起作用了,经过多次的试验,客服端的编码应该绝对没有问题的.可以判断问题一定出在服务器端.稍微分析一下可知虽然服务器端指定了文件的编 码格式,但对于服务器输出流就成为了怀疑的对象.由于使用MS SQL2000,采用unicode编码,所以返回

JSP/Servlet中的汉字编码问题

js|servlet|编码|汉字|问题 网上就 JSP/Servlet 中 DBCS 字符编码问题有许多优秀的文章和讨论,本文对它们作一些整理,并结合 IBM WebSphere Application Server 3.5(WAS)的解决方法作一些说明,希望它不是多余的.内容: 问题的起源 GB2312-80,GBK,GB18030-2000 汉字字符集及 Encoding 中文转码时´?´.乱码的由来 JSP/Servlet 汉字编码问题及在 WAS 中的解决办法 结束语 参考文章 1. 问

JSP/Servlet 中的汉字编码问题(转)

js|servlet|编码|汉字|问题 . 问题的起源     每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的扩展 ASCII码, 中国的 GB2312-80,日本的 JIS 等,作为该国家/区域内信息处理的基础,有着统一编码的重要作用.字符编码集按长度分为 SBCS(单字节字符集),DBCS(双字节字符集)两大类.早期的软件(尤其是操作系统),为了解决本地字符信息的计算机处理,出现了各种本地化版本(L10N),为了区分,引进了 LANG, Codepage 等概念.但是由于各

JSP、Servlet中的相对路径和绝对路径

js|servlet JSP.Servlet中的相对路径和绝对路径 JSP和Servlet中的绝对路径和相对路径问题困扰了我好几天,经过努力之后将其部分心得和大家共享. 前提:假设你的Http地址为http://192.168.0.1/你的web应用为webapp,那么你的web应用URL为http://192.168.0.1/webapp/ web应用的目录结构: webapp/ web-inf/ classes/ lib/ web.xml <servlet-mapping> <ser

JSP/Servlet 中的汉字编码问题

js|servlet|编码|汉字|问题 网上就 JSP/Servlet 中 DBCS 字符编码问题有许多优秀的文章和讨论,本文对它们作一些整理,并结合 IBM WebSphere Application Server 3.5(WAS)的解决方法作一些说明,希望它不是多余的. 1.问题的起源 每个国家(或区域)都规定了计算机信息交换用的字符编码集,如美国的 ASCII,中国的 GB2312-80,日本的 JIS 等,作为该国家/区域内信息处理的基础,有着统一编码的重要作用.字符编码集按长度分为 S

Servlet中如何捕获Session事件?

servlet|session 捕获Session事件的意义:1.    记录网站的客户登录日志(登录,退出信息等)2.    统计在线人数3.    等等还有很多,呵呵,自己想吧--总之挺重要的. Session代表客户的会话过程,客户登录时,往Session中传入一个对象,即可跟踪客户的会话.在Servlet中,传入Session的对象如果是一个实现HttpSessionBindingListener接口的对象(方便起见,此对象称为监听器),则在传入的时候(即调用HttpSession对象的