我们使用JSP做下载功能时,用response.getOutputStream() 将数据写到客户端。
但我有一个问题,如果写的过程中出了错,譬如服务器待下载的文件突然被其他人删除了,那么就会报FileNotFoundException。我可以捕获这个异常让下载操作结束,但是客户端是看不出来出错的,所以终端用户仍然认为下载成功了,直到打开下载的文件时,才发现根本打不开。
我的问题是,当发生这种错误时,我怎么才能把错误信息带回到原页面中?因为我知道因为已经开始下载操作,只是中间出错了,所以response其实已经被返回了。
那么我想再使用request.getRequestDispatcher("xxx.jsp").forward(request, response);将错误信息带回到页面的操作就失败了,请问大侠们,有没有什么办法既能终止掉已经出错的下载操作,还能将错误信息带回到原页面上显示给用户看的方法啊!?

解决方案 »

  1.   

    在Dao层:SQLException--->>>RuntimeException
    然后抛,service层继续抛,servlet层 try catch
      

  2.   

    SQLException你即使在Dao层捕获了,也做不出实质性的处理,所以把他抛出去,到servlet这层你就可以利用try...catch做判断了
      

  3.   


    关键问题是,我可以捕获到exception,但是因为是下载过程中出的错,那表示response其实已经开始向客户端下载东西了,只是下载过程中出了错。那么这时候response实际上是已经返回了。那我即便在这个时候捕获到了exception,也没办法再将错误信息发回到页面了,会报“Cannot forward after response has been committed!”
    想和大家请教一下,这种时候,我们是否有其他本法能将错误信息发回到页面让客户看到的!?