在做项目的时候,jsp在运行的时候出现了一些问题,现将我的问题解决方法做一个小结,供以后作项目的参考。
问题1: weblogic 的数据库连接数目在程序运行中不断增长,最后连接数目超过最大数,导致weblogic服务关闭 原因: 在操作完数据库后,没有关闭数据库连接;或者是返回结果集(Resultset),而无法在jsp中关闭数据库连接。 解决方法: 1. 在操作完数据库要关闭数据库连接。 2. 尽量不要返回结果集Resultset, 可以返回Vector(一个字段)、Hashtable(多个字段),这样可以在javabean中关闭数据库。 3. 如果javabean中返回的是结果集(Resultset),也可以在javaBean中写一个connectDB(连接数据库)、closeDB(关闭数据库)的方法,然后jsp里面调用connectDB(),建立数据库连接,同时就可以对数据库进行操作了,操作数据库完毕,可以通过closeDB() 来关闭数据库。 使用第二种方法 问题2: 在运行某一个jsp 程序的时候,weblogic 的内存陡然增长,而且居高不下。最终导致weblogic 内存不足,甚至当机。 原因: 过度使用内存。 解决方法: 1. 由于数据量比较大,在对字符串进行操作的时候,使用 + 进行字符串连接,而 相信大家对String都非常熟悉,我们也经常要用它来做字符串的连接什么的,例如: String a =b+c file://b,c 都是String 但是在实际的编译中却是这样: String a=new StringBuffer().append(b).append(c).toString() 显然,在一个简单的语句中却意外的多生成了2个对象: .StringBuffer() .toString返回的一个String 我们比较一下这两段程序的性能: 程序片断一: StringBuffer s=new StringBuffer(); long start = System.currentTimeMillis(); for (int i=0;i<10000;i++){ s1+="a"; } long stop = System.currentTimeMillis(); System.out.println(stop-start); 程序片断二: StringBuffer s=new StringBuffer(10000);// long start=System.currentTimeMillis(); for (int i=0;i<10000;i++){ s.append("a"); } long stop=System.currentTimeMillis(); System.out.println(stop-start); 比较一下结果,差距很明显。 至于为什么String的连接这么做,因为String无法直接改变其长度,而必须采用StringBuffer的用法。 因此建议使用StringBuffer 的append 方法来进行字符串相连。 2. 在解决这个问题的时候,我也尝试使用上面的方 |