显示上传进度与servlet的生命周期
显示上传进度
在上传文件时,如果不对表单做特殊处理,提交表单后悔转到另一个页面,造成页面的刷新。并且页面显示之前,游览器会因等待而
显示白屏。如果上传的文件很大,白屏时间会相当的长,直到文件上传结束,所以我们得去更改相应的From的target属性。距离呢如下
<iframe name=upload_iframe width=0 height=0></iframe>
<form action="servlet/progressuploadservlet" method="post" enctype="multipart/from-data" target="upload_iframe" onsubmit=
"showstatus();">
<input type="fille"name="file1" style="width": 350px;"><br />
<input type="file" name-"file2" style="width": 350px;"><br />
<input type="file" name-"file3" style="width": 350px;"><br />
<input type="file" name-"file4" style="width": 350px;"><br />
<input type="submit" value="开始上传name="btnsubmit">
</form>
target的默认属性为_self.如果target为默认属性,则提交后得心页面会在当前窗口显示,造成当前窗口短暂的白屏。而在target添加一个隐藏的iframe,把
target属性指定为iframe,则提交后得新页面会在iframe内显示,iframe内会暂时白屏。而因为iframe是隐藏的所以上传文件时看不出任何变化
注意这里的表单添加了哦你submit="showstatus()"事件,表单提交时会执行页面的showstatus()
方法。而这是一段javascript程序代码。该方法显示进度条,并用Ajax读取session里保存的上传进度,
实时刷新进度条。showstatus()的举例代码如下
<script type="text"/javascript">
var_finished=true;
function $(obj){
return document.getElemenById(obj);
}
function showstatus(){
var_finished=false;
$('status').style.display='block';
$('progressBarItem').style.width='1%';
$('btnsubmit').disabled=true;
setTimeout("requeststatus()",1000);
}
</script>
Ajax 能够不刷新页面而 改变页面内容。它的原理是创建一个 request,利用这个request获取其他页面的内容,并显示到页面上。因为没有在游览器中输入
新的地址,所以页面不会有刷新,抖动等。
Ajax的核心就是这个request,学名为XMLHttpRequest
servlet生命周期
在cgi编程中,用户没提交一次cgi程序,服务器就回开辟一个单独的进程来处理请求,处理完毕在将这些进程销毁。这样反复的开辟
与销毁不仅使得效率低下,而且占用很多的资源。
而servlet最终解决了这一问题。首先在servlet中服务器在启动或第一次请求servlet时其会初始化一个
servlet对象去处理所有的客户请求。只有服务器关闭是才回销毁这个对象这样便省去了对象的开辟与销毁的开销。当然这种机制也增加了对服务器维护的难度
在这样的前提下无论请求多少次servlet,最多只有一个servlet实例,多个客户端并发请求servlet时,服务器会启动多个线程分别执行servlet的service()方法
在servlet生命周期中,intit(servletconfig conf)方法与destroy()方法均会被服务器执行一次,而service()在每次客户端请求servlet时都会被执行。在servlet中有时会用到
一些初始化与销毁的资源,因此可以把初始化资源的代码放入intit()方法中,把销毁该资源的代码放到destroy()方法中而实现
不需要每次处理请求都要初始化与销毁资源
浙公网安备 33010602011771号