本人总结出了一些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整合开发
Spring + struts + hibernate (原创) Validator 验证 系统配置 :myEclipse7.5 Spring 1.2 +hibernate3.1 +struts 1.3 添加的顺序不能乱否则会出错 很好的一个入门教材
用户注册和登录是每个系统的必须存在的一部分,基于Dwr+Struts2+Spring+Hibernate写了一个用户登录注册系统。 其中用Dwr去进行用户注册的用户是否存在的验证。 全部业务控制交由Spring去进行处理。事务处理也...
maven3.3.9+struts2.5.5+spring4.3.3+hibernate5.2.4框架搭建实例 ssh这么主流,但是在网上搜索的资料拿来用的时候经常出错或者是没有一个完整的搭建环境,这里给大家提供一个非常完整,而且基础的实例,本人是在...
NULL 博文链接:https://myeden.iteye.com/blog/760798
Myeclipse6.5GA struts1.2 spring2.5 hibernate3.2 整合实例(非常详细).docx 需要OFFICE2007,如果是2003的话需要装个什么东东,兼容软件才能看。
jar包:项目中除了使用了struts2,hibernate3.0和spring1.8以外(用spring2.0的包也可以.不能低于1.8的包.)还是用了junit,ajax,第三方的table组件.等等.所以需要下载相对应的包. 为了上传jar.我专门申请了一个网盘.所有...
Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...
大家好,上次上传的Demo没有Jar包,有些朋友在配置Jar包时候总出错,所以现在我用MyEclipse 8.6重新做的一个三国人物分页信息,Jar包全。直接附加项目和数据库就可以用了。欢迎探讨。
2.commons-logging-1.1.1.jar(ASF出品的日志包,struts2 2、spring、hibernate框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录) 3.common-annotations.jar(支持注解的包) 4.aspectjrt.jar(支持AOP的包) 5....
已经完全打包制作的SSH框架...由于文件大小限制,jar包中删除了hibernate的核心jar,需要大家自己下个添加,其余jar包已经完整!测试例子已经删除。需要手动编写。出错的话自己检查代码。这个包我一直在用,没见过报错
因为上传时文件不能大于15MB,所以我删掉了一些jar包,要是出错了,请自己添加jar包,但是源码是不会出错的。
Struts2+Spring3+Hibernate4[jar包版本]信息: Struts2-v2.3.4 Spring3-v3.1.2 Hibernate4-v4.1.6 声明:这个是下载后,直接解压到MyEclipse工作目录下,然后导入到MyEclipse。由于使用的MyEclipse8.5搭建的,所以...
但是,我们在实际应用中发现,SpringMVC可以完全替代Struts,配合注解的方式,编程非常快捷,而且通过restful风格定义url,让地址看起来非常优雅。 另外,MyBatis也可以替换Hibernate,正因为MyBatis的半自动特点,...
弃用了struts,用spring mvc框架做了几个项目,感觉都不错,而且使用了注解方式,可以省掉一大堆配置文件。本文主要介绍使用注解方式配置的spring mvc,之前写的spring3.0 mvc和rest小例子没有介绍到数据层的内容,...
IOIF以EXTJS为前端,以Spring、Struts、Hibernate为后端,整合了Proxool、Log4j、Quartz、Oscache、Castor、Memcached、redis等优秀的开源软件。 支持Tomcat6及Resin3等应用服务器,支持Oracle、MYSQL等数据库。IOIF...
2.commons-logging-1.1.1.jar(ASF出品的日志包,struts2 2、spring、hibernate框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录) 3.common-annotations.jar(支持注解的包) 4.aspectjrt.jar(支持AOP的包) 5....
2.commons-logging-1.1.1.jar(ASF出品的日志包,struts2 2、spring、hibernate框架使用这个日志包来支持Log4J和JDK 1.4+的日志记录) 3.common-annotations.jar(支持注解的包) 4.aspectjrt.jar(支持AOP的包) 5....
第一章 安装配置开发环境 18 1.1系统需求 18 1.2 JDK 的下载,安装和配置(可...10.7.2 MyEclipse生成的Spring+Hibernate无法保存数据问题的解决方法2 - 用 CGLIB 来实现事务管理 258 10.7.3 Spring相关的参考资料 261