在myeclipse10.0中 hibernate3.2和hibernate3.3他们有什么区别吗?还有spring2.5和spring3.0有什么区别?

我在做ssh时用struts2.1+spring2.5+hibernate3.2中在myeclipse10.0中总是报错但是当我无意加包事spring包加成了spring... 我在做ssh时用struts2.1+spring2.5+hibernate3.2中在myeclipse10.0中总是报错 但是当我无意加包事spring包加成了spring3.0错误就没有了 主要报错是没有映射文件 但是我查看application.xml文件中有映射文件 这是问什么啊?对了我在看web底层中的包时发现他们的包总数不一样,还有包有的不同而且存在少包和多包(两者比较)请问为什么
如果说我现在要做一个ssh 我应该怎么配他们这些包呢?他们的版本怎么搭配最合适?在看网上视频中我发现大多数都是struts2.1+spring2.5+hibernate3.2,但是为什么在myeclipse10.0中他们总是报错呢?
展开
 我来答
百度网友2f61011855
2013-01-11 · TA获得超过250个赞
知道小有建树答主
回答量:234
采纳率:0%
帮助的人:92.2万
展开全部
有包冲突,

1.在搭建SSH开发平台的时候,由MyEclipse自动导入的包存在一些冲突,主要有
(1) asm.jar与asm-2.2.3.jar
asm-2.2.3是spring所依赖,而asm.jar是hibernate依赖的,应该删除asm-2.2.3.jar这个包

(2). commons-logging-1.0.4.jar与commons-logging-api-1.1.jar
这两个包中commons-logging-1.0.4.jar是spring和hibernate以及struts都要用的包,但是struts2.1以上的版本还需要commons-logging-api-1.1.jar,其实这两个包几乎一样,commons-logging-api-1.1.jar版本较新而已。

(3)异常
严重: Exception starting filter struts2
java.lang.NullPointerException
at com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance(SpringObjectFactory.java:203)
...
可能的原因是spring的默认配置文件applicationContext.xml改了名,或者没有放在classpath的根路径下面,并且没有在web.xml文件中配置spring的监听器,解决办法在web.xml中添加
<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
(4)异常
严重: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListenerorg.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/applicationContext.xml]

可能的原因是虽然配置了spring的监听器,但是没有在web.xml中配置contextConfigLocation来指定spring配置文件列表及相应的具体路径。解决的办法是在web.xml文件中添加,例如:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/csdn-spring*.xml</param-value>
</context-param>

(5)异常
org.springframework.transaction.CannotCreateTransactionException: Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.GenericJDBCException: Cannot open connection
可能的原因是缺少相应的JDBC驱动包,请把驱动包拷贝到/WEB-INF/lib下面,或者是数据源的配置有问题,例如用户名、者密码或者URL错误。

(6)错误提示:Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassVisitor.visit(IILjava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;)V

解决方法如下:
当你把spring包和hibernate相应包打进项目里,然后在打包的文件里把把
asm.jar,asm-attrs.jar,cglib-2.1.3.jar三个文件从项目里导出,并删掉就OK了
原因:由于cglib-2.1.3 依赖的asm 跟在外边的asm版本不一致导致,
把cglib换成 cglib-nodep版本的就可以了

Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/spring_config/applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoClassDefFoundError: Serializable

ID的属性搞错了,用逆向工程重新生成一下*.hbm.xml,发现它的<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
generator class="native" 而之前手写的是identity

(7)错误提示:CGLIB Enhancement failed
解决:
Spring的AOP编程时,会用到这几个lib:
asm-2.2.3.jar
asm-commons-2.2.3.jar
asm-util-2.2.3.jar
cglib-nodep-2.1_3.jar

Hibernate也包含类似的包lib:
asm.jar
asm-attrs.jar
cglib-2.1.3.jar
而导致的包冲突。
只要将hibernate用到的三个包都删掉就应该没有问题了,可是正常情况下这样是解决不了问题的,因为tomcat下已经放在webapps文件夹下的包却还没有删除,所以我们要手工删除它,找到C:/Program Files/Apache Software Foundation/Tomcat 5.5/webapps/目录下,你的项目,WEB-INF文件夹,lib文件夹,将三个包删除就ok了

原因:其实是包冲突的问题。
Spring2.0 AOP Liberaries里的asm2.2.3.jar和Hiberate中的生成代理用的asm.jar冲突
把asm2.2.3.jar , asm-util-2.2.3.jar, asm-commons-2.2.3.jar 这三个包删除就可以了。。。

(8)java.lang.AbstractMethodError:com.microsoft.jdbc.base.BaseDatabaseMetaData.supportsGetGeneratedKeys()Z
说是MS SQL Server 的driver有bug:Hibernate3与SQL连接时出现的java.lang.AbstractMethodError: com.....
解决办法的不用msbase.jar、mssqlserver.jar、msutil.jar三个驱动包,而是使用jtds-1.2.5.jar,并修改更改hibernate配置文件:
原驱动连接配置:
<property name="connection.driver_class">com.microsoft.jdbc.sqlserver.SQLServerDriver</property> <property name="connection.url">jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=hibernate</property>更改jtds连接: <property name="connection.driver_class">net.sourceforge.jtds.jdbc.Driver</property> <property name="connection.url">jdbc:jtds:sqlserver://127.0.0.1:1433;DatabaseName=hibernate</property>
经测试确实可以,但也可能是spring和hibernate的jar包冲突的问题:
如果先为项目增加spring capability并带好Spring3.0 AOP Libraries、Spring 3.0 Core Libraries、Spring 3.0 Persistence Core Libraries、Spring 3.0 Persistence JDBC Libraries四个类库,而在添加Hibernate capability时不选这四个类库,则不会出现问题。

(9)java.lang.NoClassDefFoundError: org/objectweb/asm/Type
缺少asm.jar包,增加即可。

(10)java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter
删除cglib-*.jar和asm-*.jar删除,添加spring中的cglib-2.1.3.jar,hibernate中可能引入了cglibb-2.2.jar这个包,应该用cglib-2.1.3.jar。

(11)java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
web.xml中的struts2配置:
<filter>
<filter-name>struts2</filter-name>
<!-- 工具自动添加的处理类,用下面的FilterDispatcher替代 <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> -->
<filter-class>cn.venice.util.AuthorityFilter</filter-class>
</filter>
AuthorityFilter类是自写的过滤类。出现这个异常的原因未知,重启了一次tomcat消失了

(12)Cannot locate the chosen ObjectFactory implementation: spring
用struts2,在struts.xml中写了
<constant name="struts.objectFactory" value="spring" />
但忘了导入struts2-spring-plugin-*.jar包,导入即可。

(6)异常
javax.servlet.ServletException: Error applying decorator: null
org.apache.struts2.sitemesh.FreeMarkerPageFilter.applyDecorator(FreeMarkerPageFilter.java:164)
org.apache.struts2.sitemesh.TemplatePageFilter.applyDecorator(TemplatePageFilter.java:116)
com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:62)
org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionContextCleanUp.java:102)
org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:96)
org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)

Struts2的sitemesh插件struts2-sitemesh-plugin-2.1.6的一个BUG,是FreeMarkerPageFilter的getLocale方法没有对invocation添加非空判断造成的,解决办法是解压包,然后找到org.apache.struts2.sitemesh.FreeMarkerPageFilter这个类,将
view plaincopy to clipboardprint?
1. protected Locale getLocale(ActionInvocation invocation, Configuration configuration) {
2. if (invocation.getAction() instanceof LocaleProvider) {
3. return ((LocaleProvider) invocation.getAction()).getLocale();
4. } else {
5. return configuration.getLocale();
6. }
7. }
修改为:
view plaincopy to clipboardprint?
1. protected Locale getLocale(ActionInvocation invocation, Configuration configuration) {
2. if (invocation != null && invocation.getAction() instanceof LocaleProvider) {
3. return ((LocaleProvider) invocation.getAction()).getLocale();
4. } else {
5. return configuration.getLocale();
6. }
7. }
servletxf
2012-03-09 · 超过23用户采纳过TA的回答
知道答主
回答量:147
采纳率:0%
帮助的人:61.9万
展开全部
确实有区别,如果没特别需求。还是用你自己顺手的稳定的吧,除非修复bug不然你升级那版本多的功能也不见得就用的着
追问
但是我用的最熟的是myeclipse8.6 但是在我安装后,没打开一个类时总是报一个框显示日期什么的,这是怎么回事??还有我问的那个区别:主要是我在做得时候把一个spring2.5改成spring3.0后在myeclipse10.0中就不报错了 所以我想问问他们的本质区别是什么?这样在做项目的时候我也更加的能够了解,麻烦帮忙解答下谢谢
追答
你改了东西,架包变了啊,路径啊什么的,都变了,或者方法调用啊什么的。。显然嘛
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
多豆
2012-07-20 · 超过19用户采纳过TA的回答
知道答主
回答量:60
采纳率:0%
帮助的人:44.5万
展开全部
有一个包冲突了,我记得是a..2.几.什么的包
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
luo1003596635
2012-03-10 · 超过29用户采纳过TA的回答
知道答主
回答量:120
采纳率:0%
帮助的人:70.1万
展开全部
里面有的包位置改了,加了一些jar包,不过你那个怎么用这么高的版本?
追问
我的8.6安装上总是报时间框 ,提示,打开一个报一个都无语了
追答
你那个显示是程序有问题,你如可以,放程序看下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式