使用struts2上传文件时,使用timer拦截器,创建加载页面后,action内创建request对象,报(空指针异常)NullPointException

使用struts2上传文件时,由于上传总是要有个时间差,老是让用户看着提交的页面,用户可能以为没提交成功,又点一遍?又点一遍?得!本来没毛病的程序可能就这样就搞出毛病了。

在这样的背景下,加载转圈,进度条等表现技术应运而生,主要是用来显式地告诉user,嗯,程序正在玩命上传呢,不用重复提交了!

这里,可以使用struts2自带的interceptor,timer拦截器!

在使用过程中,莫名奇妙的发现,用着很不稳定,尤其是,上传需要的时间越长,在action内创建request对象,报(空指针异常)NullPointException的概率越大!

这里我大胆猜测了一下,不确定我的猜想是否正确,但是却很好的解决了问题!

先把我的过程贴出来,再说说问题在哪块。。

首先,表现层就不用说了,一个form表单,提交到action的默认execute方法上。

先看看struts.xml的配置:

<action name="upload" class="com.****.action.UploadFile">
			
	<interceptor-ref name="timer" />
	<interceptor-ref name="defaultStack" />
	<interceptor-ref name="execAndWait">
	        <!-- 设置等待时间为1000ms -->
		<param name="delay">1000</param>
	</interceptor-ref>
	<!-- 这是当1000ms内结果没有出来时,默认加载的加载页面,注意!必须放在其他所有的result的前面 -->        
        <result name="wait">/pages/wait.jsp</result>
	
	<result name="input">/pages/uploadPage.jsp</result>
	<result name="success">/pages/success.jsp</result>
</action>

wait.jsp:

只有一个地方要加上:在head中加:

<meta http-equiv="refresh" content="3;url=upload.action">
3:是每隔3秒,调用一下upload.action,查看是否已经上传成功!成功则跳转到success.jsp,如何还在继续上传,则继续在wait.jsp页面。
action:

之前总是抛空指针的地方,就是,在execute方法内,当上传成功后,使用

HttpServletRequest request = ServletActionContext.getRequest();
HttpSession session = request.getSession();
session.save(***);
就是这里,每当创建request对象是,总是报错空指针!

后来我先是把这个timer加加载页面的功能块去掉之后,该怎样就这样,世界是很美好的!

但是一加上!真是B了狗了!怎么搞怎么错!

仔细琢磨了下,当三秒过后的时候,再次访问的时候,我怀疑,是这里的request已经被第一次访问的时候的action线程占用了,再次访问就拿不到了,之前的线程也没有释放!毕竟这实在一个request中的!

这样我就开始了又一轮的探险:

这次我不再是需要request对象时才进行获取,我选择了一进如action中,就获取,让其成为全局变量。只获取一次!之后就直接调用,具体如下:

private HttpServletRequest request = null;
private HttpSession session = null;
	public CreateStartupsAction() {
		request = ServletActionContext.getRequest();
		session = request.getSession();
	}

就这样,一次成功!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值