用struts+hibernate做网站中遇到的问题与解决过程(转贴)

本文档详细解析了在使用Struts与Hibernate框架时常见的错误及其解决方案,涵盖了配置文件错误、数据库连接问题、属性映射不匹配等多种情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境:tomcat5+struts1.1+hibernate2.1

1.如果:去除web.xml,或web.xml中

<servlet-name>action</servlet-name>

    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>

 写错。

则:报错信息:

javax.servlet.ServletException: Cannot find message resources under key org.apache.struts.action.MESSAGE

web.xml在tomcat启动时读取。

2.net.sf.hibernate.MappingException: Error reading resource: hibernate/Hello_Bean.hbm.xml

如果出现这行错误说明你的hibernate的XML配置文件有错

3.net.sf.hibernate.MappingException: Resource: hibernate/Hello_Bean.hbm.xml not found

如果出现这行错误说明hibernate的XML配置文件没有找到,你应该把XML文件放在与你的类文件同个目录下,本文中是放在hibernate/classes/hibernate/目录下,也就是跟Hello_Bean.c

lass类文件一起。

4.net.sf.hibernate.PropertyNotFoundException: Could not find a setter for property name in class hibernate.Hello_Bean

如果出现这行错误说明你的xml文件里设置的字段名name的值与Hello_Bean.java类里的getXXX或setXXX方法不一致。

5.net.sf.hibernate.HibernateException: JDBC Driver class not found: org.gjt.mm.mysql.Driver

如果出现这行错误说明你的MYSQL驱动没有加进JB库里或者不在CLASSPATH里。

6.报错:

javax.servlet.ServletException: Exception creating bean of class cn.org.sppc.ipmanager.struts.form.LoginForm: {1}

分析:

在WEB-INF/classes中找不到相对应的LoginForm文件,或者LoginForm没有继承ActionForm类。

7.报错:

javax.servlet.ServletException: persistent class not found: User

分析:

类名User没有在User.hbm.xml文件中写上包名全称,或类持久化类没有找到。

8.报错:

javax.servlet.ServletException: JDBC Driver class not found: org.gjt.mm.mysql.Driver

[WARN] SessionFactoryImpl - -No dialect set - using GenericDialect: Dialect class not found:

   net.sf.hibernate.dialect.MySQLDialect

 

[FATAL] DriverManagerConnectionProvider - -JDBC Driver class not found:

   org.gjt.mm.mysql.Driver

 

[WARN] RequestProcessor - -Unhandled Exception thrown: class net.sf.hibernate.HibernateException

 将hibernate.cfg.xml: <property >net.sf.hibernate.dialect.MySQLDialect</property>

  改成:<property >net.sf.hibernate.dialect.MySQLDialect</property>

9.报错:

javax.servlet.ServletException: Cannot find bean articles in any scope

分析:

可能的原因:

1。和tomcat/common/lib/数据库连接jar有关

2。和tomcat/conf/server.xml数据库连接参数有关,ip地址,数据库名称,用户名,密码错误

3。和数据库用户权限更改,权限缩小有关。******重要关系

4。和连接数据库专用class有关。

5。和hibernate.properties中的参数有关。数据库名称,用户名,密码错误。

10.报错:

[FATAL] DatasourceConnectionProvider - -Could not find datasource: java:comp/env/jdbc/soos <javax.naming.NameNotFoundException: Name jdbc is not bound in this

Context>javax.naming.NameNotFoundException: Name jdbc is not bound in this Context

分析:

和tomcat/conf/server.xml数据库连接参数有关。ip地址,数据库名称,用户名,密码错误。

11.javax.servlet.ServletException: Servlet execution threw an exception

[FATAL] DatasourceConnectionProvider - -Could not find datasource: java:comp/env/jdbc/soos <javax.naming.NameNotFoundException: Name jdbc is not bound in this

Context>javax.naming.NameNotFoundException: Name jdbc is not bound in this Context

分析:

和tomcat/conf/server.xml数据库连接参数有关。ip地址,数据库名称,用户名,密码错误。

和tomcat/conf/server.xml中的<Context path="/soos" docBase="soos">有关

12.net.sf.hibernate.QueryException: could not resolve property type: username [select user.password from cn.org.sppc.ipmanager.User user where user.username=?]

解决方法:username在Form类中、在Hibernate的xml文件中和相对应的PO对象中名称都要保持一致(包括大小写)。包括struts-config.xml中的。

13.javax.servlet.jsp.JspException: No getter method for property username of bean org.apache.struts.taglib.html.BEAN

username名称在jsp文件中和在Form类中的不一致。包括struts-config.xml中的。

14.[ERROR] ManagerBase - -IOException while loading persisted sessions: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException:

org.apache.commons.logging.impl.SimpleLog <java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException:

org.apache.commons.logging.impl.SimpleLog>java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException:

org.apache.commons.logging.impl.SimpleLog

Caused by: java.io.NotSerializableException: org.apache.commons.logging.impl.SimpleLog

[ERROR] ManagerBase - -Exception loading sessions from persistent storage <java.io.WriteAbortedException: writing aborted;

java.io.NotSerializableException: org.apache.commons.logging.impl.SimpleLog>java.io.WriteAbortedException: writing aborted;

java.io.NotSerializableException: org.apache.commons.logging.impl.SimpleLog

Caused by: java.io.NotSerializableException: org.apache.commons.logging.impl.SimpleLog

和其他web服务中有logging服务有关。

15.问题:从jsp表单中提交的中文到了action 中从ActionForm中获得的,以及从request.getParameter()中获得的都是乱码的问题。

解决:虽然打印在tomcat console上的是乱码,但是写到数据库中的却是正确的。

16.Missing message for key  XXXX.XXXX

1.检查 struts-config.xml中是否包含

 <message-resources parameter="com.abcde.ApplicationResources" />

2.在WEB-INF/classes/com/abcde/ApplicationResources.properties是否存在。注意在struts-config.xml中没有properties。

3.检查ApplicationResources.properties是否存在XXX.XXX,我就是因为名字太长没仔细看,一直以为写的是正确的,其实有一个字母写错。查了老半天。

总结:

在没有软件检查语法的地方,首先要仔细检查单词是否写错。例如eclipse不检查非java的代码,除非你装了某个插件。

即使是java代码,eclipse不会告诉你,request.getParameter()中的string参数是否正确,

不会告诉你sql语句是否正确。

17.自己程序中的log.trace, log.info, log.warn等,都没有显示在console中。

原因:发现eclipse没有保存时候自动编译,修改eclipse设置。

18.

<%

String s="ttt.ddd.txt";

String fileNameArray[]=s.split(".");

out.println(fileNameArray.length);

for (int i = 0;i<fileNameArray.length;i++)

{

 out.println(fileNameArray[i]);

}

%>

想把文件名分别保存,做了以上的jsp程序,发现不行。想了老半天原来应该这么写。

<%

String s="ttt.txt.abc.yyy.ssdsd";

String fileNameArray[]=s.split("//.");

out.println(fileNameArray.length);

for (int i = 0;i<fileNameArray.length;i++)

{

 out.println(fileNameArray[i]);

}

%>

以后玩字符串的时候要注意一些字符的转义了。

19.No action instance for path /dispatchwebshow could be created

解决方法:

struts.config.xml中的相关action 有名称写错,例如:type参数的值有错误。

20.在mysql数据库里定义index这种sql语句关键字作为数据库字段出错。

21.[DEBUG] RequestProcessor - - Looking for Action instance for class cn.org.sppc.ipmanager.struts.action.LogonAction

javax.naming.NameNotFoundException: Name hibernate_connection_factory is not bound in this Context

估计是修改*.hbm.xml文件后发生*.hbm.xml文件语法错误。

研究后发现是hbm.xml和Java之间的不匹配。

子类xml文件中的many-to-one 中name应该写子类中对应的父类属性,class=父类。

子类Java文件中应该定义 父类,和 父类的id号,

父类xml文件中的set中name应该是子类的集合。

父类java文件中应该定义 子类的集合属性.

否则就可能报以上错误。

22.hibernate 2个表联合查询的问题。

在编程过程中发现需要修改表结构,对某个表增加一个id来关联另一个表的主键。

表结构修改后,就开始写hibernate HQL语句,然后取出联合查询的结果,发现另一个表里的数据没有读出,老是报错:java.lang.NullPointException。

我一直以为要么是HQL语句语法错误,要么是HQL语句逻辑上写错,造成读出null数据来。

断断续续对着HQL语句写法搞了一天,终于查出原因,原本新建的用来关联另一个表的主键id,还没有手工添加数据,查出数据来倒真的成了怪事了。

看来还是HQL语句不熟练的问题,否则早就应该自信的想到是其他原因。

23.

HQL语法正确:

String queryString = "select type.typeid, type.typeName, type.comment, type.index, " +

   " type.parentTypeid, type.department.departmentName " +

   " ,type" + //有没有此对象都可以读出其他数据

   " from  cn.org.sppc.ipmanager.hibernate.Type as type " +       

   " inner join type.department as department " +

   " where type.parentTypeid=? "+

   //" and type.department.departmentid=type.departmentid "+//此处错误

   " order by type.index";

以下HQL也能得到同样的数据

   String queryString="select type,type.department " +

    " from cn.org.sppc.ipmanager.hibernate.Type as type"+

    " where type.parentTypeid=? "+

    " order by type.index " ;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值