ITPub博客

首页 > Linux操作系统 > Linux操作系统 > spring+hibernate+struts 问题解决

spring+hibernate+struts 问题解决

原创 Linux操作系统 作者:airdream 时间:2009-03-04 10:53:40 0 删除 编辑
加红颜色的部分是最容易出现的错误!
Java代码 复制代码
  1. 1.地址栏中:http://localhost:8088/sshtest/user.do?act=register   
  2.   
  3.   报错:HTTP Status 404 - Servlet action is not available   
  4.   
  5.   原因是:struts-config.xml配置文件中的请求处理器类出错了(找不到类路径)   
  6.   "com.xj.requestprocessor.MyProcessor">   
  7.   解决办法:   
  8.   "org.springframework.web.struts.DelegatingRequestProcessor">   
  9.     
1.地址栏中:http://localhost:8088/sshtest/user.do?act=register

  报错:HTTP Status 404 - Servlet action is not available

  原因是:struts-config.xml配置文件中的请求处理器类出错了(找不到类路径)
  
  解决办法:
  
  

 

Java代码 复制代码
  1. 2.报错 :javax.servlet.ServletException: Cannot find ActionMappings or ActionFormBeans collection   
  2.   原因: 工程里面的struts包.有损坏或某些struts包没有存在.   
  3.   解决办法:重新创建一个工程,并且导入struts,然后将导入的struts包copy到目前的工厂的   
  4.   WEB-INf/lib目录,重新部署,重新启动服务,就ok了  
2.报错 :javax.servlet.ServletException: Cannot find ActionMappings or ActionFormBeans collection
  原因: 工程里面的struts包.有损坏或某些struts包没有存在.
  解决办法:重新创建一个工程,并且导入struts,然后将导入的struts包copy到目前的工厂的
  WEB-INf/lib目录,重新部署,重新启动服务,就ok了

Java代码 复制代码
  1. 3.报错:java.lang.Long cannot be cast to java.lang.Integer    
  2.   Long 无法转化成Integer类型.   
  3.   这个异常 经常出现在hinbernate分页查询的时候.   
  4.   例如:    
  5.            注: super.pageQuery(hql,null,null,null);调用了一个父类的一个封装方法.查询时候使用   
  6.            List list = this.getHibernateTemplate().executeFind(new HibernateCallback(){});   
  7.   
  8.           /**  
  9.       * 查询所有用户记录总数  
  10.       */  
  11.       public Integer getUsersCount() {   
  12.         String hql = "select count(*) from Users";   
  13.         List list = super.pageQuery(hql, nullnullnull);   
  14.         return (Integer) list.get(0);   
  15.       }   
  16.       原因:   
  17.   
  18.         这里在Hibernate2.0之前版本list.get(0)返回的是Integer类型.   
  19.         但是在Hibernate3.0以后版本list.get(0)返回的是Long类型.   
  20.         所以在这里不可以由Long型强转成Integer类型.   
  21.       
  22.         
  23.          解决办法:   
  24.   
  25.          public Integer getUsersCount() {   
  26.         String hql = "select count(*) from Users";   
  27.         List list = super.pageQuery(hql, nullnullnull);   
  28.         Number num = (Number) list.get(0);   
  29.         return num.intValue();   
  30.      }   
  31.          注:java.lang.Number是Integer,Long的父类.  
3.报错:java.lang.Long cannot be cast to java.lang.Integer 
  Long 无法转化成Integer类型.
  这个异常 经常出现在hinbernate分页查询的时候.
  例如: 
           注: super.pageQuery(hql,null,null,null);调用了一个父类的一个封装方法.查询时候使用
           List list = this.getHibernateTemplate().executeFind(new HibernateCallback(){});

          /**
   * 查询所有用户记录总数
   */
   public Integer getUsersCount() {
  String hql = "select count(*) from Users";
  List list = super.pageQuery(hql, null, null, null);
  return (Integer) list.get(0);
   }
      原因:

        这里在Hibernate2.0之前版本list.get(0)返回的是Integer类型.
        但是在Hibernate3.0以后版本list.get(0)返回的是Long类型.
        所以在这里不可以由Long型强转成Integer类型.
   
     
         解决办法:

         public Integer getUsersCount() {
  String hql = "select count(*) from Users";
  List list = super.pageQuery(hql, null, null, null);
  Number num = (Number) list.get(0);
  return num.intValue();
  }
         注:java.lang.Number是Integer,Long的父类.

Java代码 复制代码
  1. 4.报错:java.lang.NoSuchMethodError org.objectweb.asm.ClassVisitor.visit    
  2. (IILjavalangString;LjavalangString;[LjavalangString;LjavalangString;)V.txt   
  3.             
  4.      原因: 由于某些Spring和Hibernate的版本问题,其中导入包的时候,某些jar包发生了冲突.   
  5.               
  6.      解决办法: 删除工程下面WEB-INF/lib/asm-2.2.3.jar,然后在MyEclipse中刷新工程,   
  7.                再重新部署工程,然后重启 Tomcat.  
4.报错:java.lang.NoSuchMethodError org.objectweb.asm.ClassVisitor.visit 
(IILjavalangString;LjavalangString;[LjavalangString;LjavalangString;)V.txt
         
     原因: 由于某些Spring和Hibernate的版本问题,其中导入包的时候,某些jar包发生了冲突.
           
     解决办法: 删除工程下面WEB-INF/lib/asm-2.2.3.jar,然后在MyEclipse中刷新工程,
               再重新部署工程,然后重启 Tomcat.

Java代码 复制代码
  1. 5. 报错 : Servlet Action is not available    
  2.        
  3.              
  4.     (1). 将struts-config.xml文件中的   
  5.     
  6.         className="org.springframework.web.struts.ContextLoaderPlugIn">   
  7.         "contextConfigLocation"  
  8.         value="/WEB-INF/applicationContext.xml" />   
  9.       去掉   
  10.       
  11.   
  12.     (2).然后在web.xml文件中加上这段代码就可以了.   
  13.          
  14.        
  15.         contextConfigLocation   
  16.         /WEB-INF/applicationContext.xml   
  17.        
  18.        
  19.         context   
  20.         class>   
  21.             org.springframework.web.context.ContextLoaderServlet   
  22.         class>   
  23.         1   
  24.           
5. 报错 : Servlet Action is not available 
    
          
    (1). 将struts-config.xml文件中的
    
  
      去掉
   

    (2).然后在web.xml文件中加上这段代码就可以了.
      
 
  contextConfigLocation
  /WEB-INF/applicationContext.xml
 
 
  context
  
   org.springframework.web.context.ContextLoaderServlet
  
  1
        

Java代码 复制代码
  1. 6.报错:'sessionFactory' or 'hibernateTemplate' is required    
  2.         
  3.         原因: 在dao操作类中需要注入HibernateTemplate来创建sessionFactory.   
  4.               或者直接注入sessionFactory.   
  5.      
  6.         错误的写法:   
  7.        "depsdao" class="com.xj.dao.impl.DepsDao"  
  8.         lazy-init="true">   
  9.        
  10.        
  11.         "userdao" class="com.xj.dao.impl.UsersDao"  
  12.         lazy-init="true">   
  13.        
  14.   
  15.       解决办法:   
  16.   
  17.       要将这2个对象中的某一个注入到dao中.   
  18.     第一种方法:   
  19.                "depsdao" class="com.xj.dao.impl.DepsDao"  
  20.          lazy-init="true">   
  21.          "sessionFactory">   
  22.             "sessionFactory" />   
  23.             
  24.               
  25.          第二种方法:   
  26.                "hibernateTemplate"  
  27.         class="org.springframework.orm.hibernate3.HibernateTemplate">   
  28.         "sessionFactory" ref="sessionFactory">   
  29.               
  30.           
  31.                 "depsdao" class="com.xj.dao.impl.DepsDao"  
  32.         lazy-init="true">   
  33.         "hibernateTemplate">   
  34.             "hibernateTemplate" />   
  35.            
  36.               
6.报错:'sessionFactory' or 'hibernateTemplate' is required 
     
        原因: 在dao操作类中需要注入HibernateTemplate来创建sessionFactory.
              或者直接注入sessionFactory.
  
        错误的写法:
       
 
    
        
 

      解决办法:

      要将这2个对象中的某一个注入到dao中.
 第一种方法:
               
   
   
   
        
         第二种方法:
               
  
        
       
                
  
   
  
         

Java代码 复制代码
  1. 7.报错: java.lang.IllegalStateException:   No   WebApplicationContext   found:     
  2.  no  ContextLoaderListener   registered?   
  3.   
  4.    原因: web.xml文件中的配置写错了     
  5.           解决办法:在web.xml中加上   
  6.            
  7.          contextConfigLocation    
  8.            
  9.         /WEB-INF/classes/applicationContext.xml   
  10.            
  11.            
  12.            
  13.          context    
  14.         class>   
  15.             org.springframework.web.context.ContextLoaderServlet   
  16.         class>   
  17.          1    
  18.           
7.报错: java.lang.IllegalStateException:   No   WebApplicationContext   found:  
 no  ContextLoaderListener   registered?

   原因: web.xml文件中的配置写错了  
          解决办法:在web.xml中加上
  
   contextConfigLocation 
  
  /WEB-INF/classes/applicationContext.xml
  
  
  
   context 
  
         org.springframework.web.context.ContextLoaderServlet
  
   1 
  

 

Java代码 复制代码
  1. 8.报错:No bean named 'sessionFactory' is defined   
  2.    错误可能原因1:   
  3.                  在web.xml中加载applicationContext.xml文件的时候没有加载成功,看你的路径是否 正确,   
  4.                  这个配置错误,服务器启动的时候不会报错   
  5.    错误可能原因2:   
  6.                  没有删除asm-2.2.3.jar文件.一定要直接从磁盘目录删除.然后刷新工程,重新部署  重启服务.  
8.报错:No bean named 'sessionFactory' is defined
   错误可能原因1:
                 在web.xml中加载applicationContext.xml文件的时候没有加载成功,看你的路径是否 正确,
                 这个配置错误,服务器启动的时候不会报错
   错误可能原因2:
                 没有删除asm-2.2.3.jar文件.一定要直接从磁盘目录删除.然后刷新工程,重新部署  重启服务.

Java代码 复制代码
  1. 9.报错:sessionFactory或者hibernateTemplate找不到   
  2.        有的时候,我们明明就在dao中注入了sessionFactory或hibernate,但是还是总是报错,说   
  3.        sessionFactory或者hibernateTemplate找不到   
  4.        
  5.   下面这种情况会引发这种情况:    
  6.          在struts中的formbean中的reset方法,往往我们用来初始化界面的一些显示值.   
  7.          如一个注册,可能在这里先查询数据库,找到所有的部门信息,然后绑定在界面的下拉框中.   
  8.          所以可能会在reset方法中调用业务层方法.(也有可能请求页面之前,先经过一个servlet或jsp,   
  9.                                                                    在servlet里面调用业务层方法)    
  10.          如果你在formbean中是这样写会报上面的错误:   
  11.           ApplicationContext ap = new FileSystemXmlApplicationContext(   
  12.             new String[] {   
  13.     "E:\\MyWorkPlace\\sshtest\\WebRoot\\WEB-INF\\applicationContext.xml",   
  14.     "E:\\MyWorkPlace\\sshtest\\WebRoot\\WEB-INF\\operatorbeans.xml",   
  15.         "E:\\MyWorkPlace\\sshtest\\WebRoot\\WEB-INF\\actionbeans.xml" });   
  16.        
  17.          IUserService us = (IUserService) ap.getBean("userservice");   
  18.          然后用us 直接调用方法.   
  19.             
  20.          原因: 在这里ApplicationContext ap = new FileSystemXmlApplicationContext(   
  21.             new String[] {});    
  22.         启动的实际上是另外一个spring容器,而不是刚刚启动服务的时候创建的那个spring容器.   
  23.         
  24.     解决办法:   
  25.           在reset方法中:     
  26.             ServletContext context = servlet.getServletContext();    
  27.             ApplicationContext app = (ApplicationContext) context.getAttribute    
  28.               (WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);     
  29.                  
  30.                 IDeptService ds = (IDeptService) app.getBean("deptservice");     
  31.                 this.depList = ds.selectAllDeps();   
  32.             注:servlet是struts框架中间的一个对象,保存了web容器的很多信息   
  33.   
  34.              那么之前是怎样设置进去的呢?   
  35.          // context.setAttribute(   
  36. WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,启动的时候创建的那个spring器);  
9.报错:sessionFactory或者hibernateTemplate找不到
       有的时候,我们明明就在dao中注入了sessionFactory或hibernate,但是还是总是报错,说
       sessionFactory或者hibernateTemplate找不到
    
  下面这种情况会引发这种情况: 
         在struts中的formbean中的reset方法,往往我们用来初始化界面的一些显示值.
         如一个注册,可能在这里先查询数据库,找到所有的部门信息,然后绑定在界面的下拉框中.
         所以可能会在reset方法中调用业务层方法.(也有可能请求页面之前,先经过一个servlet或jsp,
                                                                   在servlet里面调用业务层方法) 
         如果你在formbean中是这样写会报上面的错误:
          ApplicationContext ap = new FileSystemXmlApplicationContext(
   new String[] {
 "E:\\MyWorkPlace\\sshtest\\WebRoot\\WEB-INF\\applicationContext.xml",
 "E:\\MyWorkPlace\\sshtest\\WebRoot\\WEB-INF\\operatorbeans.xml",
        "E:\\MyWorkPlace\\sshtest\\WebRoot\\WEB-INF\\actionbeans.xml" });
 
         IUserService us = (IUserService) ap.getBean("userservice");
         然后用us 直接调用方法.
         
         原因: 在这里ApplicationContext ap = new FileSystemXmlApplicationContext(
   new String[] {}); 
        启动的实际上是另外一个spring容器,而不是刚刚启动服务的时候创建的那个spring容器.
     
    解决办法:
          在reset方法中:  
           ServletContext context = servlet.getServletContext(); 
          ApplicationContext app = (ApplicationContext) context.getAttribute 
              (WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);  
              
                IDeptService ds = (IDeptService) app.getBean("deptservice");  
                this.depList = ds.selectAllDeps();
            注:servlet是struts框架中间的一个对象,保存了web容器的很多信息

             那么之前是怎样设置进去的呢?
         // context.setAttribute(
WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE,启动的时候创建的那个spring器);

Java代码 复制代码
  1. 10.报错:  org.apache.jasper.JasperException: $Proxy3 cannot be cast to    
  2.             com.xj.service.impl.RoleService     
  3.           java.lang.ClassCastException: $Proxy3 cannot be cast to com.xj.service.impl.RoleService   
  4.   
  5.     原因:很明显又是一个代理时候,强转错误:   
  6.              
  7.                ServletContext context = servlet.getServletContext();    
  8.             ApplicationContext app = (ApplicationContext) context.getAttribute   
  9.              (WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);     
  10.                 IDeptService ds = (DeptService) app.getBean("deptservice");     
  11.                 this.depList = ds.selectAllDeps();   
  12.                   就是这段示例代码中的   IDeptService ds = (DeptService) app.getBean ("deptservice");出错了    
  13.                 不能直接强转成接口的实现类,一定要转成接口.   
  14.                IDeptService ds = (IDeptService) app.getBean("deptservice");     
  15.      
  16.      

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/659894/viewspace-559930/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-03-04

  • 博文量
    3
  • 访问量
    3184