`

spring/hibernate/struts2常见异常总结

 
阅读更多
  • Spring

①ClassNotFoundException: org.aspectj.weaver.reflect.ReflectionWorld$ReflectionWorldException

缺少aspectjweaver.jar,该jar包常用于spring aop中

 

②java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderL 

http://blessht.iteye.com/blog/1104450

 

③java.lang.NoSuchMethodException: $Proxy7.方法名()

spring aop中常见,aop的实现是代理,java领域代理有两种:jdk自带的针对接口的代码和cglib针对类的代码。spring aop默认使用jdk接口代理,某些时候访问的bean没有接口故出现以上问题,解决方法:在aop配置中修改代理类型:

 

<aop:config proxy-target-class="true">

 

④ClassNotFoundException javax/mail/MessagingException

spring配置javamailsenderimpl时出错,原因是缺少mail.jar这个包,将该jar包放入项目lib中即可

 

⑤:cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element 'aop:config'.这个是spring配置未引入aop命名规则引起的。下面这段是相对较全的命名规则。

<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:util="http://www.springframework.org/schema/util"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
   http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd  
   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd"
   default-autowire="byName">

<beans>

 

⑥启动项目正常,访问Controller时报错

java.lang.NullPointerException

at org.springframework.web.servlet.DispatcherServlet.processHandlerException(DispatcherServlet.java:1003)

at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:792)

at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:716)

呵呵,这个问题在我搭建新环境时困扰我两小时!起初以为是exceptionResolver写错了,但注释掉也无济于事,然后各种注释不需要的东西还是报错。最后想到自己重新实现了org.springframework.web.servlet.DispatcherServlet,要不还原一下,使用spring默认的,结果一下就没错了。

然后我认真看自己的代码,发现问题了,看下面代码,initStrategies非常重要,开发人员可以在系统其中过程中添加各种初始化操作,但是千万别忘了调用super.initStrategies(context);这个方法是spring mvc自己做初始化必须使用的,我是因为把这句去掉了,添加了其它代码,所以导致莫名其妙的错误。

public class YdDispatcherServlet extends DispatcherServlet {
	private static final long serialVersionUID = -8834249973970757619L;
	
	/**
	 * 伴随servlet的init方法调用,执行数据的初始化操作
	 */
	@Override	
	protected void initStrategies(ApplicationContext context) {
		//super.initStrategies(context); 这句代码千万别注释
	}
}

 

 

 

  • Hibernate

①Unable to locate appropriate constructor on class

指定类找不到对应的构造方法,常出现于hql,确认hql中每个类型与Hibernate构造方法对应,并且构造方法的每个参数类型与hbm.xml文件对应

 

②org.hibernate.hql.ast.QuerySyntaxException: unexpected token: ON near line 1

异常发生在HQL上面:select a.name,b.age from TableA a left join TableB b ON a.id=b.id。原来Hibernate不支持ON这种表达式,如果要建立两表关系就将ON替代为WHERE即可:

select a.name,b.age from TableA a left join TableB b where a.id=b.id

 

③java.lang.NullPointerException at org.hibernate.dialect.Dialect$3.getReturnType(Dialect.java:125)

异常发生在HQL上:select a.name,sum(b.age) from TableA a left join TableB b where a.id=b.id,异常发生原因跟下面第④个是一样的。

 

④org.hibernate.hql.ast.QuerySyntaxException: Path expected for join! 

异常发生在HQL上:select a.name,count(b.age) from TableA a left join TableB b where a.id=b.id。③和④的异常是同一原因:就是left join!原来在Hibernate如果两张表没有设置one-to-many这样的映射关系的话,就不能使用join。第③个是因为sum和join同时出现造成的错误,第④个是因为有left join造成的。修改方法是将left join用逗号","取代:select a.name,sum(b.age) from TableA a,TableB b where a.id=b.id

 

⑤Batch update returned unexpected row count from update: 0 actual row count: 0 expected: 1。我的代码如下,hibernate有一个好特性是持久化的时候通过set方法可以自动update数据库,但是运行这段代码时还是报上面的错。

User user = session.get(User.class,userId);
user.setName("xxx");//更新名称

 最后找原因,发现是User表在数据库中是自增的,而其实这条数据是通过UUID保存的主键。最后我到数据库将主键自增去掉就不报错了,很是奇怪!

 

⑥HibernateException: No Session found for current thread

通过sesstionFactory.currentSession获取不到Session对象,不同环境不同场景有不同原因。我是针对Spring3+Hibernate4整合时遇到的问题。

考虑以下两种解决方案:

方案一:在spring配置sessionFactory Bean中,加入对hibernate.current_session_context_class属性的注入,如下代码:

<property name="hibernateProperties">
  <props>
    ......
    <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext</prop>
    ......		
  </props>
</property>

 

方案二:申明式事务配置的切面表达式不正确

如下表达式,我期望的事务范围是com.demo.任意层级.manager.下级类.任意方法(任意参数),但这里的**与*是一个意思,所以他真是的事务范围是com.demo.子级包.manager.下级类.任意方法(任意参数)。

<!-- 错误配置 -->
<aop:config >
    <aop:advisor advice-ref="txAdvice" pointcut="execution(* com.demo.**.manager.*.*(..)))" /> 
</aop:config>

 解决方法是将**修改为..,两点才表示任意层级,如下代码是正确的。

<aop:advisor advice-ref="txAdvice" pointcut="execution(* com.demo..manager.*.*(..)))" /> 

 

⑦ java.lang.IllegalArgumentException: node to traverse cannot be null!

执行HQL时报这种错误,表示HQL语法有问题,比如selec少一个t或者from写成form了。

 

⑧java.sql.SQLException: ORA-01722: 无效数字

问题出现在Oracle数据库环境下,看似很简单的字段类型都出错了:

 

select * from org_member,org_dept where deptPath LIKE memPath+'%';
原因是出在+号上:Oracle认为+号是数字操作,所以会将memPath varchar类型转换为number,这时就报错了。Oracle字符串拼接需要用||号。
改正后的SQL应该是这样的: 
select * from org_member where deptPath LIKE memPath || '%';

 

 

JSP

 

①Page directive: illegal to have multiple occurrences of contentType with different values (old: text/html; charset=utf-8, new: text/html; charset=UTF-8)

当前JSP有一个<%@ page>标签,并且引入了别的JSP

<%@ page contentType="text/html; charset=utf-8" isELIgnored="false"%>
<%@ include file="/WEB-INF/jsp/common/common.jsp"%>

 而别的JSP也有<%@ page>标签

<%@ page contentType="text/html; charset=UTF-8" isELIgnored="false"%>

 引起报错的原因是因为两个JSP的charset值不一样,一个是大写UTF-8一个是小写utf-8。改成一样即可。

 

Tomcat

①Setting property 'source' to 'org.eclipse.jst.jee.server:firstProject' did not find a matching property.

遇到的问题是在Eclipse下导入的firstProject这个dynamic web project无法被启动。

解决方法详见:http://blog.csdn.net/z69183787/article/details/19911935

作者说得很多,简单说,就是把Eclipse中配置的server删掉,重新创建一个就没问题了

1
0
分享到:
评论

相关推荐

    最新的S2SH整合:Spring4,Hibernate4,Struts2(源码)

    在IT行业中,S2SH框架整合是Web应用开发中一种常见的技术栈,它结合了Spring、Hibernate和Struts2三个强大的开源框架。本资源提供的"最新的S2SH整合:Spring4,Hibernate4,Struts2(源码)",旨在帮助开发者理解和实践...

    spring_struts_hibernate整合开发书籍

    书中会详细讲述如何配置这些框架,使它们协同工作,包括Spring与Hibernate的事务管理、数据源配置、以及Struts2与Spring的整合等。 除此之外,书中还可能涵盖了单元测试、异常处理、安全性配置等方面的内容,这些都...

    内容管理系统(hibernate3+struts2+spring2).rar

    - **异常处理**:SSH提供了统一的异常处理机制,如Struts2的全局结果和Spring的全局异常处理器,可以捕获并优雅地处理各种运行时异常。 - **安全性**:SSH框架都提供了安全相关的功能,如Spring Security可以实现...

    SSH(Spring+Hibernate+Struts2)框架整合必须的85个jar包

    SSH框架整合是Java Web开发中常见的一种技术栈,由Spring、Hibernate和Struts2三个开源框架组合而成。这个组合提供了一种高效、灵活且可扩展的解决方案,用于构建企业级的Web应用程序。以下是对SSH框架整合及其中...

    Hibernate、Spring和Struts工作原理及使用理由

    【标题】:“Hibernate、Spring和Struts工作原理及使用理由” 【内容】: Hibernate是一个流行的Java持久化框架,它的核心工作原理主要包括以下步骤: 1. **读取并解析配置文件**:Hibernate通过读取hibernate....

    Struts+Spring+Hibernate框架搭建

    ### Struts+Spring+Hibernate框架搭建 #### 1. SSH整合理念 在现代软件开发中,特别是Java Web应用开发领域,采用多个框架协同工作已成为一种常见的做法。这种做法旨在通过不同框架的优势互补来构建高性能、高灵活...

    struts2+spring+hibernate

    总的来说,Struts2+Spring+Hibernate的整合是一个常见的Java Web开发模式,通过它们的协作,开发者可以构建出高效、灵活且易于维护的Web应用。不过,要注意的是,尽管这个示例简化了框架的使用,但在实际项目中,还...

    Struts2+Spring+Hibernate框架技术与项目实战 源码(下).zip

    Struts2、Spring和Hibernate是Java Web开发中的三大主流框架,它们各自负责应用程序的不同层面:Struts2专注于表现层,Spring则在业务层提供服务,而Hibernate则在数据持久化层发挥重要作用。这个"Struts2+Spring+...

    【原創】Spring、Hibernate、Struts1整合的方式

    在IT行业中,Spring、Hibernate和Struts1是Java Web开发中的三大重要框架,它们的整合是构建企业级应用的常见方式。这篇原创博客探讨了如何将这三个框架有效地结合在一起,以实现更高效、更模块化的应用程序开发。 ...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    12.6 整合Struts、Spring和Hibernate实现用户管理 12.6.1 Struts、Spring和Hibernate的整合方式 12.6.2 编写用户注册画面regedit.jsp 12.6.3 编写用户登录画面login.jsp 12.6.4 编写注册控制器RegeditAction.java ...

    struts1+spring+hibernate整合实列

    Struts1、Spring和Hibernate是Java Web开发中的三大框架,它们各自在应用程序的不同层面上发挥作用,共同构建出高效、模块化的应用系统。Struts1主要负责控制层,Spring作为核心容器,提供依赖注入(DI)和面向切面...

    spring3+Hibernate4+struts2整合

    "Spring3+Hibernate4+Struts2整合"是将这三个框架集成到一起,以构建高效、可维护的企业级Web应用的常见实践。以下是对这三个框架及其整合的详细说明: **Spring框架:** Spring是Java领域的一个全面的轻量级应用...

    Struts2+Spring3+Hibernate4整合的jar包

    SSH(Struts2、Spring、Hibernate)是企业级应用开发的常见选择,这主要是因为它们各自在表现层、业务层和数据持久化层的优势。 Struts2是MVC(Model-View-Controller)架构模式的一个实现,它负责处理用户请求,...

    Struts2 Spring3 Hibernate3 整合必须包(很完整)

    Struts2、Spring3和Hibernate3是Java Web开发中的三个重要框架,它们分别负责MVC模式中的表现层、业务层和服务层。这三个框架的整合能够实现高效、灵活且可维护的Web应用程序。以下是对这三个框架及其整合的详细知识...

    spring3+hibernate4+struts2 ssh

    SSH,即Spring、Hibernate和Struts2,是Java Web开发中常见的三大框架。它们各自承担着不同的职责,Spring负责依赖注入和业务逻辑管理,Hibernate是持久层的优秀解决方案,而Struts2则作为MVC模式中的Controller层,...

    使用Spring、Hibernate、Struts的一些错误总结.txt

    在IT领域,特别是Java开发中,使用Spring、Hibernate和Struts框架进行项目开发时,开发者可能会遇到各种各样的错误和异常。以下是对给定文件中提及的一些常见问题的详细解析和解决方案,旨在帮助开发者理解并避免...

    Struts2+Spring+hibernate

    Struts2+Spring+Hibernate 是一种常见的企业级Java Web应用开发框架组合,它们各自负责不同的职责,协同工作以构建高效、可维护的后端系统。 Struts2 是一个基于MVC(Model-View-Controller)设计模式的Web框架,它...

    struts2 hibernate spring整合(出错的)

    总之,"struts2 hibernate spring整合(出错的)"意味着开发者可能在整合过程中遇到了困难,需要对每个框架的配置、相互间的配合以及常见的问题有深入理解,才能找出并修复错误。这通常需要对Java Web开发有扎实的基础...

    Hibernate struts2 spring 整合应用学生信息管理系统源码及文档

    在Java Web开发领域,整合Hibernate、Struts2和Spring框架是构建高效、可维护性高的应用程序的常见实践。本系统——"学生信息管理系统",正是这种整合应用的一个实例,旨在提供一个完整的、易于扩展的管理平台,用于...

Global site tag (gtag.js) - Google Analytics