问题场景: Java Servlet
中利用 try_catch
捕捉异常,若发生异常则在 catch
里 response.getWriter().writer("error!")
响应一句话。
问题:如果发生 Java 自身提供的一些异常比如 Exception
, ArithmeticException
等等,可以成功响应;但若发生 commons-upload 提供的异常比如 UploadException
, FileSizeLimitExceededException
这些,则无法响应,request
转发也同样失效!!!浏览器信息:无法显示!
这是咋回事啊?我查了老半天,别人也是这样写,真的把我搞懵逼了~求救啊!!!
commons-fileupload-1.3.2
commons-io-2.5
tomcat-8
JDK8
回复中贴的源码是出问题的源码。我描述的情况是实验了很多次得出的结论。
这是实验的代码: 选择性的发生异常,观察后~我发生了这个离奇的问题,才来求救的
sfu.setFileSizeMax(1024*1024);
try {
items = sfu.parseRequest(request);
int i = 1/0;
} catch (Exception e) {
if(e instanceof FileUploadBase.FileSizeLimitExceededException) {
System.out.println("异常啦!"+e.getMessage());
response.getWriter().write("上传响应了吗?");
return;
}
response.getWriter().write("/ by zero 响应了吗?");
}
// 如果发生文件大小限制异常,控制台打印了信息,但是无法响应;若 sfu解析请求无异常,1/0 引发了异常
// 则可以成功响应!!!
1
zhiyuan91 2017-01-30 22:15:30 +08:00
代码怎么写的?
|
2
alonezero OP @zhiyuan91
``` java DiskFileItemFactory factory = new DiskFileItemFactory(); ServletFileUpload sfu = new ServletFileUpload(factory); List<FileItem> fileItems = new ArrayList<FileItem>(); sfu.setFileSizeMax(3*1024*1024); // 限制单个文件大小 try { fileItems = sfu.parseRequest(request); } catch (FileUploadException e) { // throw new RuntimeException("文件上传失败~"+e.getMessage()); response.getWriter().write("文件上传失败"); return; } ``` 代码就是这样,就一个 try_catch 情况就是我说的那样。真的是见了鬼了 |
3
NeinChn 2017-01-30 22:47:50 +08:00
"如果发生 Java 自身提供的一些异常比如 Exception, ArithmeticException 等等,可以成功响应"
但是代码贴的 catch 语句是:"catch (FileUploadException e) " ArithmeticException 不可能被 Catch 住的,楼主你这到底在表达什么... |
5
codingadog 2017-01-30 22:49:02 +08:00 via iPhone
这个 catch 的 exception 类型不大对啊……
|