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