Spring2.5、Struts2.1、Hibernate3.2、sitemesh、freemarker整合开发常见问题及解决方案

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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

ng.NullPointerException

at

com.opensymphony.xwork2.spring.SpringObjectFactory.getClassInstance(SpringObjectF actory.java:203)

...

可能的原因是spring的默认配置文件applicationContext.xml改了名,或者没有放在classpath的根路径下面,并且没有在web.xml文件中配置spring的监听器,解决办法在web.xml中添加

org.springframework.web.context.ContextLoaderListener

(4)异常

严重: Exception sending context initialized event to listener instance of class

org.springframework.web.context.ContextLoaderListener

org.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文件中添加,例如:

contextConfigLocation

/WEB-INF/csdn-spring*.xml

(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错误。

javax.servlet.ServletException: Error applying decorator: null

org.apache.struts2.sitemesh.FreeMarkerPageFilter.applyDecorator(FreeM arkerPageFilter.java:164)

org.apache.struts2.sitemesh.TemplatePageFilter.applyDecorator(Templat ePageFilter.java:116)

com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilte r.java:62)

org.apache.struts2.dispatcher.ActionContextCleanUp.doFilter(ActionCon textCleanUp.java:102)

org.springframework.web.filter.CharacterEncodingFilter.doFilterIntern al(CharacterEncodingFilter.java:96)

org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerR equestFilter.java:76)

Struts2的sitemesh插件struts2-sitemesh-plugin-2.1.6的一个BUG,是FreeMarkerPageFilter的getLocale方法没有对invocation添加非空判断造成的,解决办法是解压包,然后找到org.apache.struts2.sitemesh.FreeMarkerPageFilter这个类,将

[java]view plaincopyprint?

1.protected Locale getLocale(ActionInvocation invocation, Configuration configura

tion) {

2. if (invocation.getAction() instanceof LocaleProvider) {

3. return ((LocaleProvider) invocation.getAction()).getLocale();

4. } else {

5. return configuration.getLocale();

6. }

7.}

相关文档
最新文档