【讨论】如何不让连接池耗尽?代码位置换一下,可能产生项目安全漏洞。**例如:页面多个link指向同一个方法,参数不一样,进行多个同时下
一个APP服务器,一个DB服务器
页面中有多个文件下载连接,不过每个连接指向同一个方法,参数不一样,根据参数到数据库检索文件,BLOB型的,然后进行下载。
正常做法:
根据参数,打开连接,到数据库取数据,关闭连接,取到数据,然后可以WRITE出来。
如果文件很小,有可能一次就写完了。如果大数据,系统会再次读取,直到写完为止。
简单代码:
conn = A.getDBConnection() 取连接
b=Getdata 得数据
conn.close() 关连接
response.setContentType 写数据
response.write
close
这种写法没什么问题,缺陷就是一次只能下载一个文件,也就是说点一个LINK,出现下载对话框,
保存,必须等这个文件保存好了,才能点另外的连接,不然点第二个连接,也出现下载对话框,
但是保存的话,第一个没下载好,就会把第一个保存的冲掉。
为了解决上面的可以进行多个下载,把上面的代码改了一下
try{
conn = A.getDBConnection() 取连接
b=Getdata 得数据
response.setContentType 写数据
response.write
close
}finally{
conn.close() 关连接
}
这样就可以进行多个文件同时下载,甚至同一个link,不会冲掉前一个文件下载。
代价:文件没完成下载,有一个文件就会消耗一个数据库连接。
所以大文件下载不要按上面的方法写,按第一种方法写。
有人会说,小文件那就可以了,
注意最好不要这样,存在系统隐患,做法>>>>
当出现下载对话框时,点击保存,这个时候出现选择保存路径,不要点ok,放在这里,
重复这样的操作,点50下,出现50个保存选择,
此时就会消耗50个数据库连接,如此如此,有人恶意搞,会把数据库连接耗尽。
不安全。就算采取数据库连接超时就断方法,还是有点不妥。
针对上面的,谁有好办法解决多个文件同时下载,不被冲掉。