写了一个简单的hibernate查找操作,单独建立一个project作为java application运行完全没问题,放到用struts2的web project就会报错异常信息:java.lang.reflect.InvocationTargetException at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452) at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254) at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263) at org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:138) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:270) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:145) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:171) at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187) at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248) at org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52) at org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:498) at org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77) at org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:185) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:151) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:269) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1773) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.NoClassDefFoundError: org/hibernate/Session at hibernate.UsersManager.verifyPwdByName(UsersManager.java:27) at log.LoginAction.execute(LoginAction.java:70) ... 69 more Caused by: java.lang.ClassNotFoundException: org.hibernate.Session at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678) at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523) ... 71 more 

解决方案 »

  1.   

    Caused by: java.lang.NoClassDefFoundError: org/hibernate/Session at hibernate.UsersManager.verifyPwdByName(UsersManager.java:27)
    at log.LoginAction.execute(LoginAction.java:70) ... 
    69 more Caused by: java.lang.ClassNotFoundException: org.hibernate.Session at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678) 
     在执行loginAction的时候,去访问你的hibernate反向生成的bean ,报错,没找到该类的异常。
      配置问题
      

  2.   

    User.java
    package users;public class Users
    {
    private Integer id; private String name; private String pwd;

    private String ath;
    public void setId(Integer id)
    {
    this.id = id;
    }
    public Integer getId()
    {
    return this.id;
    }
    public void setname(String name)
    {
    this.name = name;
    }
    public String getname()
    {
    return this.name;
    }
    public void setpwd(String pwd)
    {
    this.pwd = pwd;
    }
    public String getpwd()
    {
    return this.pwd;
    }

    public void setath(String ath)
    {
    this.ath = ath;
    }
    public String getath()
    {
    return this.ath;
    }
    }Users.hbm.xml
    <?xml version="1.0" encoding="GBK"?>
    <!-- 指定Hiberante3映射文件的DTD信息 -->
    <!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
    <!-- hibernate-mapping是映射文件的根元素 -->
    <hibernate-mapping package="users">
    <!-- 每个class元素对应一个持久化对象 -->
    <class name="Users" table="usertable">
    <!-- id元素定义持久化类的标识属性 -->
    <id name="id">
    <!-- 指定主键生成策略 -->
    <generator class="identity"/>
    </id>
    <!-- property元素定义常规属性 -->
    <property name="name"/>
    <property name="pwd"/>
    <property name="ath"/>
    </class>
    </hibernate-mapping>hibernate.cfg.xml
    <?xml version="1.0" encoding="GBK"?>
    <!-- 指定Hibernate配置文件的DTD信息 -->
    <!DOCTYPE hibernate-configuration PUBLIC
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <!-- hibernate- configuration是连接配置文件的根元素 -->
    <hibernate-configuration>
    <session-factory>
    <!-- 指定连接数据库所用的驱动 -->
    <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property>
    <!-- 指定连接数据库的url,hibernate连接的数据库名 -->
    <property name="connection.url">jdbc:sqlserver://localhost:1433;databasename=users</property>
    <!-- 指定连接数据库的用户名 -->
    <property name="connection.username">fyswords</property>
    <!-- 指定连接数据库的密码 -->
    <property name="connection.password">fyswords</property>
    <!-- 指定连接池里最大连接数 -->
    <property name="hibernate.c3p0.max_size">20</property>
    <!-- 指定连接池里最小连接数 -->
    <property name="hibernate.c3p0.min_size">1</property>
    <!-- 指定连接池里连接的超时时长 -->
    <property name="hibernate.c3p0.timeout">5000</property>
    <!-- 指定连接池里最大缓存多少个Statement对象 -->
    <property name="hibernate.c3p0.max_statements">100</property>
    <property name="hibernate.c3p0.idle_test_period">3000</property>
    <property name="hibernate.c3p0.acquire_increment">2</property>
    <property name="hibernate.c3p0.validate">true</property>
    <!-- 指定数据库方言 -->
    <property name="dialect">org.hibernate.dialect.SQLServerDialect</property>
    <!-- 根据需要自动创建数据表 -->
    <property name="hbm2ddl.auto">update</property>
    <!-- 显示Hibernate持久化操作所生成的SQL -->
    <property name="show_sql">true</property>
    <!-- 将SQL脚本进行格式化后再输出 -->
    <property name="hibernate.format_sql">true</property>
    <!-- 罗列所有的映射文件 -->
    <mapping resource="users/Users.hbm.xml"/>
    </session-factory>
    </hibernate-configuration>
    应该怎么配置呢?
      

  3.   

    顶一下啊,我现在只是把hibernate和struts2整合,没有用到springhibernate在j2se和j2ee下有什么区别呢?为什么相同的代码相同的配置文件作为java application运行就没问题,放到j2ee就错误呢?
      

  4.   

    action应该没错的,之前用JDBC时候都好好的
      

  5.   

    UsersManager.java
    package hibernate;import org.hibernate.*;
    import java.util.*;
    import users.Users;public class UsersManager
    {
    public static boolean verifyPwdByName(String name,String pwd)
    {
    //获得Hibernate Session
    Session sess = HibernateUtil.currentSession();
    //开始事务
    Transaction tx = sess.beginTransaction();
    //以HQL语句创建Query对象.
    //执行setString方法为HQL语句的参数赋值
    //Query调用list方法访问查询的全部实例
    List pl = sess.createQuery("from Users u where u.name=:n")
    .setString("n", name)
    .list();
    tx.commit();
    HibernateUtil.closeSession();

    Iterator pit = pl.iterator() ;
    if(!pit.hasNext())
    {
    System.out.println("no such username");
    return false;
    }
    else
    {
    Users p = (Users)pit.next();
    if(pwd.equals(p.getpwd()))
    {
    return true;
    }
    else
    {
    System.out.println("password wrong");
    return false;
    }
    }
    //提交事务
    }
    }
    直接用别人写好的HibernateUtil.java
    package hibernate;import org.hibernate.*;
    import org.hibernate.cfg.*;/**
     * Description:
     * <br/>网站: <a href="http://www.crazyit.org">疯狂Java联盟</a> 
     * <br/>Copyright (C), 2001-2012, Yeeku.H.Lee
     * <br/>This program is protected by copyright laws.
     * <br/>Program Name:
     * <br/>Date:
     * @author  Yeeku.H.Lee [email protected]
     * @version  1.0
     */
    public class HibernateUtil
    {
    public static final SessionFactory sessionFactory;

    static
    {
    try
    {
    //采用默认的hibernate.cfg.xml来启动一个Configuration的实例
    Configuration configuration = new Configuration()
    .configure();
    //由Configuration的实例来创建一个SessionFactory实例
    sessionFactory = configuration.buildSessionFactory();
    }
    catch (Throwable ex)
    {
    System.err.println("Initial SessionFactory creation failed." + ex);
    throw new ExceptionInInitializerError(ex);
    }
    }

    //ThreadLocal可以隔离多个线程的数据共享,因此不再需要对线程同步
    public static final ThreadLocal<Session> session
    = new ThreadLocal<Session>();

    public static Session currentSession()
    throws HibernateException
    {
    Session s = session.get();
    //如果该线程还没有Session,则创建一个新的Session
    if (s == null)
    {
    s = sessionFactory.openSession();
    //将获得的Session变量存储在ThreadLocal变量session里
    session.set(s);
    }
    return s;
    }

    public static void closeSession()
    throws HibernateException 
    {
    Session s = session.get();
    if (s != null)
    s.close();
    session.set(null);
    }
    }运行到UsersManager.java中Session sess = HibernateUtil.currentSession();就会抛出InvocationTargetException,不能进到HibernateUtil.currentSession()里面
      

  6.   

    http://blog.csdn.net/Gentle_bird/article/details/4395625解决了,相关jar必须拷到lib下面,不能作为library引用