Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / как перехватить FileSizeLimitExceededException / 25 сообщений из 26, страница 1 из 2
17.11.2014, 20:56
    #38808823
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
Как перехватить org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException в java коде?
...
Рейтинг: 0 / 0
17.11.2014, 21:12
    #38808836
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
FileUploadBase.FileSizeLimitExceededException
?
...
Рейтинг: 0 / 0
17.11.2014, 21:18
    #38808842
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
Basil A. Sidorov,

Код: xml
1.
2.
3.
SEVERE: Servlet.service() for servlet [control.FileUploadServlet] in context with path [/new_prog_2] threw exception [Servlet execution threw an exception] with root cause
java.lang.Error: Unresolved compilation problem: 
	The nested type org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException cannot be referenced using its binary name
...
Рейтинг: 0 / 0
17.11.2014, 21:26
    #38808851
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
Я, как бы, несколько другой разделитель использовал.
Американский рубль возникает из-за того, что внутренние классы эмулируются компилятором. На что, собственно, и указывает сообщение об ошибке.
...
Рейтинг: 0 / 0
17.11.2014, 21:29
    #38808853
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
Basil A. Sidorov,
да, уже нашел этот класс и обернул проблемную строку, но все-равно не ловит!
...
Рейтинг: 0 / 0
17.11.2014, 21:30
    #38808855
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
авторuploadFilePath = D:\Java\spring_workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\new_prog_2\uploads
java.lang.IllegalStateException: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field fileName exceeds its maximum permitted size of 3145728 bytes.
at org.apache.catalina.connector.Request.parseParts(Request.java:2804)
at org.apache.catalina.connector.Request.getParts(Request.java:2655)
at org.apache.catalina.connector.RequestFacade.getParts(RequestFacade.java:1075)
at control.FileUploadServlet.doPost(FileUploadServlet.java:44)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1070)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:611)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:744)
Caused by: org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException: The field fileName exceeds its maximum permitted size of 3145728 bytes.
at org.apache.tomcat.util.http.fileupload.FileUploadBase$FileItemIteratorImpl$FileItemStreamImpl$1.raiseError(FileUploadBase.java:637)
at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.checkLimit(LimitedInputStream.java:76)
at org.apache.tomcat.util.http.fileupload.util.LimitedInputStream.read(LimitedInputStream.java:135)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at org.apache.tomcat.util.http.fileupload.util.Streams.copy(Streams.java:99)
at org.apache.tomcat.util.http.fileupload.util.Streams.copy(Streams.java:68)
at org.apache.tomcat.util.http.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:296)
at org.apache.catalina.connector.Request.parseParts(Request.java:2737)
... 25 more
...
Рейтинг: 0 / 0
17.11.2014, 21:33
    #38808858
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
protected void doPost ... {

...
try {
	for (Part part : request.getParts()) {
		fileName = getFileName(part);				
		part.write(uploadFilePath + File.separator + fileName);
	}
	} catch (SizeLimitExceededException e) {
		System.out.println("------------------------------------------");
	}
...

}
...
Рейтинг: 0 / 0
17.11.2014, 21:43
    #38808863
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
Трасса стека английским по чёрному пишет "IllegalStateException". Вот его и надо перехватывать.
Далее, если getCause() вернул непустое значение - можете узнавать фактическую причину исключения.
Вполне стандартная практика - обернуть одно исключение другим.
...
Рейтинг: 0 / 0
17.11.2014, 21:43
    #38808864
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
все-таки FileSizeLimitExceededException,
не перехватывает...
...
Рейтинг: 0 / 0
17.11.2014, 21:51
    #38808869
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
Если:
Код: sql
1.
2.
MyCustomException ex = new MyCustomException("Еггог!");
throw new IllegalStateException(ex);

то бессмысленно ловить вложенное исключение.
Должно быть:
Код: sql
1.
catch (RuntimeException ex) { log.warn(ex.getMessage); }

или, если хочется заглянуть во внутрь:
Код: sql
1.
2.
3.
4.
catch (RuntimeException ex) {
  ex1 = ex.getCause();
  if (ex1 != null ) log.warn(ex1.getMessage());
  else log.warn(ex.getMessage());
...
Рейтинг: 0 / 0
17.11.2014, 22:09
    #38808875
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
Basil A. Sidorov,

не совсем понял вас, все перехватывает, но потом уже форвард не работает, так ошибка была на уровне контейнера.
как оттуда направить на страницу ошибок, или лучше на нужный экшин?

перехватывает:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
...
	catch (IllegalStateException e) {
		throw new Exception("Файл не загружен: максимальный размер файла 3Мb");
	}
} catch (Exception ex) {
	//ex.printStackTrace();
	request.setAttribute("message", ex.getMessage());
	System.out.println("forward");
	getServletContext().getRequestDispatcher("/local.action").forward(request, response); // не срабатывает
}
...
Рейтинг: 0 / 0
17.11.2014, 22:32
    #38808891
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
В Servlet API ошибка это или HttpServletResponse.setStatus() или HttpServletResponse.sendError() .
Поэтому, перехватив исключение, вы его протоколируете, если оно вам нужно, и устанавливаете статус HTTP-отклика.
...
Рейтинг: 0 / 0
17.11.2014, 22:46
    #38808895
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
после того как исключение перехвачено, я пробовал применять эти методы к респонсу, однако браузер выдает все то же "Во время загрузки страницы соединение с сервером было сброшено."
...
Рейтинг: 0 / 0
17.11.2014, 22:56
    #38808899
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
...
Рейтинг: 0 / 0
17.11.2014, 22:56
    #38808900
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
Basil A. Sidorovперехватив исключение, вы его протоколируете, если оно вам нужно, и устанавливаете статус HTTP-откликаоно и не получиться может
потому что всё закроется
...
Рейтинг: 0 / 0
17.11.2014, 23:23
    #38808918
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
grasoff.net,

а в чем тогда прикол от maxFileSize в @MultipartConfig, если потом ничего не сделаешь? ведь именно maxFileSize приводит к возникновению этого исключения.
...
Рейтинг: 0 / 0
17.11.2014, 23:26
    #38808920
grasoff.net
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
rema174а в чем тогда прикол от maxFileSize в @MultipartConfig, если потом ничего не сделаешь? ведь именно maxFileSize приводит к возникновению этого исключения.исключение возникло? сервер не принял? это и надо было?

если на все вопросы ответ "да", значит, всё хорошо :)
...
Рейтинг: 0 / 0
17.11.2014, 23:30
    #38808921
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
grasoff.net,

ну, не совсем все хорошо :)
как дальше разрулить, т.е. сделать вызов error page на сайте?
...
Рейтинг: 0 / 0
18.11.2014, 03:35
    #38808991
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
grasoff.netоно и не получиться может
потому что всё закроетсяВ зависимости от чувства прекрасного, ошибки на HttpServletResponse можно или обработать самому или предоставить обработку контейнеру.
...
Рейтинг: 0 / 0
18.11.2014, 04:07
    #38808998
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
rema174не совсем понял вас, все перехватывает, но потом уже форвард не работает, так ошибка была на уровне контейнера.
как оттуда направить на страницу ошибок, или лучше на нужный экшин?

перехватывает:
Код: java
1.
2.
3.
4.
...
	catch (IllegalStateException e) {
		throw new Exception("Файл не загружен: максимальный размер файла 3Мb");
	}

Если вы кидаете перехваченное или собственное исключение, то инициатива переходит к сервлет-контейнеру, который закроет входящее соединение и запротоколирует ошибку.
Поэтому повторю: перехватив исключение, протоколируем его, если это требуется и либо просто устанавливаем статус ошибки (setStatus) или отправляем страничку с ошибкой (sendError).
В вашем случае протоколировать превышение размера надо на отладочном уровне, т.к. "большой осётр" - ни разу не ошибка.
Как-то так:
Код: sql
1.
2.
3.
4.
5.
catch (FileUploadBase.SizeException ex) {
  debug(ipAddress, fileSizeLimit, fileSize);
  response.setStatus(HttpServletResponse.SC_REQUEST_ENTITY_TOO_LARGE);
  return;
}
...
Рейтинг: 0 / 0
18.11.2014, 10:48
    #38809176
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
Basil A. SidorovКак-то так:
Код: sql
1.
2.
3.
4.
5.
catch (FileUploadBase.SizeException ex) {
  debug(ipAddress, fileSizeLimit, fileSize);
  response.setStatus(HttpServletResponse.SC_REQUEST_ENTITY_TOO_LARGE);
  return;
}


хорошо, а куда произойдет return?
...
Рейтинг: 0 / 0
18.11.2014, 11:44
    #38809258
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
rema174хорошо, а куда произойдет return?А куда он происходит, когда "заканчивается" метод service() (doPost()/e.t.c)?
Когда установлен статус/отправлена ошибка, делать с откликом что-то ещё - нельзя. Поэтому return - самый короткий способ досрочно завершить исполнение.
Если вам нужна какая-то другая обработка - сами думайте. У меня фантазия бедная
...
Рейтинг: 0 / 0
18.11.2014, 11:51
    #38809269
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
Basil A. Sidorovrema174хорошо, а куда произойдет return?досрочно завершить исполнение
это вообщем то, что в данной ситуации и задумано, хотелось сделать это красивее, чем просто отображать в браузере, что соединение было сброшено.
и на том спасибо - ситуация понятна.
...
Рейтинг: 0 / 0
18.11.2014, 12:06
    #38809302
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
rema174,
у меня точно так-же, есть ошибка (системная), если например, оракл в ауте.
Которую я вывожу как HTTP.Error (Basil A. Sidorov )
Тут уже ничего поделать с ней нельзя, а код выбранной ошибки как раз много скажет по телефону тех-поддержки.
...
Рейтинг: 0 / 0
18.11.2014, 12:27
    #38809344
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как перехватить FileSizeLimitExceededException
rema174это вообщем то, что в данной ситуации и задумано, хотелось сделать это красивее, чем просто отображать в браузере, что соединение было сброшено.Когда пользователь прислал больше данных, чем мы желаем обработать, то:
1. Если установить статус отклика и сделать возврат, то инициатива переходит к контейнеру.
Контейнер примет все меры к тому, чтобы корректно остановить отправку данных клиентом. В браузере появится простенькое сообщение, "разукрашенное" в меру желания разработчиков браузера;
2. Если сделать sendError(код) и возврат, то всё будет почти также, но контейнер отправит стандартную или настроенную страничку об ошибке. Что должно решить проблему "как объяснить пользователю, что он слишком много хочет".
В обоих случаях код ошибки будет записан в журнале обращений к сайту (access log) и будет точно известно, что именно происходило.

Если делать перенаправления sendRedirect() или forward(), то ситуация кардинально другая: 3XX-коды - не ошибка и понять, что пользователь "слишком много хотел" можно будет только очень косвенным способом.

Кроме того, в самой форме можно указать максимальный размер поля. Предположительно, это будет ограничением, которое может "проверить" и сам браузер. Ещё до отправки данных на сервер.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / как перехватить FileSizeLimitExceededException / 25 сообщений из 26, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]