首页 > 技术文章 > Myeclipse 6.5 整合SSH(三)

xxw-ak 2017-07-05 17:52 原文

现在,关于“客户信息维护”的SSH框架已经结束,涉及到的后端操作包括增、删、查、改、生成Excel表格等。现在主要说说在创建过程中我经常遇到其中的几个问题。

问题一: 

出现

严重:Exception sending context initialized event to listenerinstance of class org.springframework.web.context.ContextLoaderListener   
org.springframework.beans.factory.BeanCreationException: Errorcreating bean with name 'entityManagerFactory' defined inServletContext resource [/WEB-INF/classes/applicationContext.xml]:Invocation of init method failed; nested exception isjava.lang.ExceptionInInitializerError   
Caused by: java.lang.ExceptionInInitializerError  

或者

Error Creating SessionFactory java.lang.SecurityException: class"org.apache.commons.collections.SequencedHashMap

以上两个报错,是由于Spring 和 Hibernate 共用的一些 jar 文件发生了版本冲突, 删除 WEB-INF/lib/asm-2.2.3.jar即可

 

 

问题二:

org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException: Line 15 in XML document from ServletContext resource [/WEB-INF/applicationContext.xml] is invalid;
nested exception is org.xml.sax.SAXParseException; lineNumber: 15; columnNumber: 3;
The markup in the document following the root element must be well-formed.

启动服务,出现以上报错 ,网上搜了一下,主要原因有:

1、复制粘贴时,可能粘贴进去乱码了。需要手动输入。

2、在applicationContext.xml文件中,开头有空格,导致识别不了文件。即要确保xml的第一句<?xml version="1.0" encoding="UTF-8"?>之前没有空格。

3、配置文件声明中缺少context。

4、在配置spring的配置文件时,抛出nested exception is org.xml.sax.SAXParseException; lineNumber: 15; columnNumber的异常,原因就是没有正确的添加命名空间。 

 5、在xml中这样引用 properties文件的:<import resource="classpath:application.properties"/>

改成  <context:property-placeholder location="classpath:application.properties" />就好了

6、元素 'property' 必须不含字符 [子级], 因为该类型的内容类型为“仅元素”。  

可以将

<property name="url">${hibernate.connection.url}</property>  

改为

<property name="url">${hibernate.connection.url}/>

7、开头缺少<web-app>,即XML文档中标记的地方格式不合法,通不过dtd的验证,所以要符合规范,在xml文件的开头加上

<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
</web-app>  

 

 问题三:

org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/classes/applicationContext.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/classes/applicationContext.xml]

Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/classes/applicationContext.xml]
View Code

出现如上错误,查了下,网上说的错误原因基本都是:发生在web.xml的配置有问题,要加上如下代码如下:

  在web.xml文件中加入:  

 <context-param>  
     <param-name>contextConfigLocation</param-name>  
     <param-value>/WEB-INF/config/applicationContext.xml</param-value>  
 </context-param>  

或者

<init-param>  
    <param-name>contextConfigLocation</param-name>  
    <param-value>/WEB-INF/classes/applicationContext.xml</param-value>  
</init-param>  

问题的原因主要是:问题主要由于加载spring的默认配置文件位置一般是在/WEB-INF/下找applicationContext.xml文件,eclipse文件自动生成的applicationContext文件是放在/WEB-INF/classes/applicationContext.xml,所以在默认加载中是找不到applicationContext.xml文件的,必须加入上面配置。 

 

无论加了哪种,我的加上以后又报下面的错:

org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from ServletContext resource [/WEB-INF/classes/applicationContext.xml]; nested exception is java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/classes/applicationContext.xml]

Caused by: java.io.FileNotFoundException: Could not open ServletContext resource [/WEB-INF/classes/applicationContext.xml]

1、查到的问题及解决办法有的跟上面的相同,即在web.xml中加入这些配置

<context-param>
    <param-name>contextConfigLocation </param-name>
    <param-value>/WEB-INF/classes/applicationContext.xml </param-value>
</context-param>

或者将IDE自动生成的applicationContext.xml放到WEB-INF 文件夹下即可。

2、可能是你的applicationContext.xml没有正确引入外部数据源

例如:<!-- 引入数据源 -->
   <context:property-placeholder location="classpath:db.properties"/>

 

问题四:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.InvalidMappingException: Could not parse mapping document from input stream

Caused by: org.hibernate.InvalidMappingException: Could not parse mapping document from input stream

 这个错误我遇到好几次,网上找了好多方法来试,都没成功。

最后,将bean下的Cust.hbm.xml文件中的

"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">   

改为

"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

这样就可以了。

 

 

问题五:

  在开发SSH 集成项目过程中,在打开的新增页面输入数据不能保存。即在一个save()方法中不能把数据提交到数据库,而在后台打印的sql语句来看已经执行了insert 操作。

在网上查到原因如下:

1、在写好一个save()方法后,在写一个get()的方法,然后先操作save(),再get()得到的 数据量却 增加了一条,有此可以知道 数据是保存在缓存中而未提交到数据库中的! 也可以说是因为事务没提交 或 是回滚了的结果 。

原因是你集成了spring  用myeclipse生产的代码 
修改策略 你在hibernate.xml配置文件里加上 
<property name="connection.autocommit">true </property> 变搞定 
或者自己写dao 不用myeclipse生成代码  基本都可以通过的

2、没连接网络(这是其他同学遇到的问题解决办法)。

 

推荐阅读