本人总结出了一些SSH整合时候的常见错误,并且附上了自己的实践中的解决方法,文笔有些生涩,如果解决办法欠佳或者有更好的解决办法又或者我的表述,措辞,技术方面有误的地方,请各位朋友纠正过来.大家一起讨论,学习.
1.地址栏中:http://localhost:8088/sshtest/user.do?act=register
报错:HTTP Status 404 - Servlet action is not available
原因是:struts-config.xml配置文件中的请求处理器类出错了(找不到类路径)
<controller processorClass="com.xj.requestprocessor.MyProcessor"></controller>
解决办法:
<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor">
</controller>
2.报错 :javax.servlet.ServletException: Cannot find ActionMappings or ActionFormBeans collection
原因: 工程里面的struts包.有损坏或某些struts包没有存在.
解决办法:重新创建一个工程,并且导入struts,然后将导入的struts包copy到目前的工厂的
WEB-INf/lib目录,重新部署,重新启动服务,就ok了
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的父类.
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.
5. 报错 : Servlet Action is not available
(1). 将struts-config.xml文件中的
<plug-in
className="org.springframework.web.struts.ContextLoaderPlugIn">
<set-property property="contextConfigLocation"
value="/WEB-INF/applicationContext.xml" />
</plug-in> 去掉
(2).然后在web.xml文件中加上这段代码就可以了.
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/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>
6.报错:'sessionFactory' or 'hibernateTemplate' is required
原因: 在dao操作类中需要注入HibernateTemplate来创建sessionFactory.
或者直接注入sessionFactory.
错误的写法:
<bean id="depsdao" class="com.xj.dao.impl.DepsDao"
lazy-init="true">
</bean>
<bean id="userdao" class="com.xj.dao.impl.UsersDao"
lazy-init="true">
</bean>
解决办法:
要将这2个对象中的某一个注入到dao中.
第一种方法:
<bean id="depsdao" class="com.xj.dao.impl.DepsDao"
lazy-init="true">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
</bean>
第二种方法:
<bean id="hibernateTemplate"
class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
<bean id="depsdao" class="com.xj.dao.impl.DepsDao"
lazy-init="true">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate" />
</property>
</bean>
7.报错: java.lang.IllegalStateException: No WebApplicationContext found:
no ContextLoaderListener registered?
原因: web.xml文件中的配置写错了
解决办法:在web.xml中加上
<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>
8.报错:No bean named 'sessionFactory' is defined
错误可能原因1:
在web.xml中加载applicationContext.xml文件的时候没有加载成功,看你的路径是否 正确,
这个配置错误,服务器启动的时候不会报错
错误可能原因2:
没有删除asm-2.2.3.jar文件.一定要直接从磁盘目录删除.然后刷新工程,重新部署 重启服务.
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器);
10.报错: org.apache.jasper.JasperException: $Proxy3 cannot be cast to
com.xj.service.impl.RoleService
java.lang.ClassCastException: $Proxy3 cannot be cast to com.xj.service.impl.RoleService
原因:很明显又是一个代理时候,强转错误:
ServletContext context = servlet.getServletContext();
ApplicationContext app = (ApplicationContext) context.getAttribute
(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
IDeptService ds = (DeptService) app.getBean("deptservice");
this.depList = ds.selectAllDeps();
就是这段示例代码中的 IDeptService ds = (DeptService) app.getBean ("deptservice");出错了
不能直接强转成接口的实现类,一定要转成接口.
IDeptService ds = (IDeptService) app.getBean("deptservice");
分享到:
相关推荐
在"struts2 hibernate spring整合(出错的)"这个项目中,开发者可能遇到了在集成这三个框架时遇到的问题。这通常涉及到配置问题、依赖注入问题、数据访问问题等。以下是一些可能遇到的知识点: 1. **Struts2配置**:...
《Spring+Struts+Hibernate(SSH)项目调试精要》 在Java Web开发领域,Spring、Struts和Hibernate组成的SSH框架组合是应用广泛的技术栈。它们分别负责不同层面的职责:Spring作为整体的容器,管理对象和依赖;...
### Spring+Struts+Hibernate应用知识点详解 #### 1. 概述 Spring、Struts 和 Hibernate 是 Java 开发领域非常流行的三个框架,它们分别在不同的层面提供了强大的支持:Spring 主要在 IoC 和 AOP 方面提供服务;...
Spring、Struts 和 Hibernate 是Java Web开发中的三大框架,它们共同构建了SSH(Spring、Struts、Hibernate)架构,为开发者提供了强大而灵活的应用程序开发基础。这些框架各自承担着不同的职责,使得企业级应用的...
Struts、Spring和Hibernate是Java开发中非常著名的三个开源框架,它们共同构成了经典的"SSH"企业级应用开发架构。这三大框架分别承担了MVC(Model-View-Controller)架构中的不同职责,使得开发者能够更高效地构建...
"Struts,Spring,Hibernate优缺点" Struts 的优点: 1. 实现 MVC 模式,结构清晰,...Struts、Spring、Hibernate 都是 Java Web 开发中常用的框架,每个框架都有其优缺点,在选择框架时,需要根据实际情况进行选择。
在Java EE开发领域,Eclipse、Struts、Hibernate和Spring是四大重要的开源框架,它们各自在Web应用程序开发中扮演着核心角色。这个整合应用案例旨在深入解析如何将这些框架有效地结合在一起,以构建高效、可维护的...
通过以上步骤,您可以轻松地在MyEclipse 2013环境中搭建起基于Spring 2.5、Struts 2.1 和 Hibernate 3.1的SSH框架。这为您的Java Web项目开发提供了坚实的基础。需要注意的是,随着技术的发展,建议根据最新的框架...
在人力资源管理系统中,Spring作为"胶水"框架,整合了Struts和Hibernate,管理着整个应用的生命周期和组件依赖。同时,Spring的事务管理功能确保了数据操作的一致性和完整性,为系统的稳定性提供了保障。 在实际的...
在这个会员管理系统中,Spring作为容器管理了所有的Bean,包括Struts的Action和Hibernate的数据访问对象(DAO),通过DI实现了组件间的解耦。Spring的AOP则可以方便地进行日志记录、权限控制等横切关注点的处理。 ...
标题提到的问题是“struts2+spring+hibernate整合中spring注入出错,页面中报空指针异常”,这通常是由于Spring的依赖注入没有正确配置导致的。 首先,让我们深入了解一下Struts2、Spring和Hibernate各自的核心概念...
"会员管理系统(struts+hibernate+spring)130226.rar" 是一个针对计算机专业的JSP源码资料包,它集成了Struts、Hibernate和Spring框架,旨在为用户提供一个高效、稳定且易于维护的会员管理解决方案。这个系统通过使用...
在 Struts、Spring 和 Hibernate 的集成中,表现层由 Struts 控制,负责接收用户请求、处理响应、进行基本的验证和展示模型数据。Spring 在业务层工作,处理事务管理和业务逻辑,同时作为 Struts 和 Hibernate 之间...
Spring、Struts和Hibernate是Java开发中非常经典的三大框架,它们分别负责控制层、业务逻辑层和数据访问层。SSH整合就是将这三个框架结合起来,实现一个高效、灵活且可维护的Web应用程序。以下是对SSH整合的详细介绍...
标题中的"基于struts+hibernate+spring银行开发的接口小系统"表明这是一个使用了经典Java企业级开发框架组合的项目,主要涉及到Struts、Hibernate和Spring三个核心技术。这三者构成了MVC(Model-View-Controller)...
Struts、Hibernate和Spring是Java开发中的三大框架,它们各自承担着不同的职责并协同工作,以提高开发效率和代码质量。在本项目中,我们使用的是Struts2.1.6、Spring2.5.6和Hibernate3.3的老版本,尽管这些版本相对...
Struts、Hibernate 和 Spring 是Java开发领域中三个非常重要的开源框架,它们构成了经典的“SSH”企业级应用开发栈。这三大框架分别专注于Web层、持久层和业务层的管理,帮助开发者构建高效、可维护的Java应用。 1....
Struts、Hibernate和Spring是Java开发中非常重要的三个框架,它们分别在MVC(Model-View-Controller)架构、持久层管理和依赖注入方面发挥着关键作用。将这三个框架集成在一起,可以构建出高效、可维护的大型企业级...
SSH是Java Web开发中的一个流行框架组合,由Struts2、Hibernate和Spring三个组件组成。这个框架集成提供了模型-视图-控制器(MVC)架构,数据持久化以及依赖注入和事务管理等功能,大大简化了企业级应用的开发流程。...