powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / как перехватить FileSizeLimitExceededException
26 сообщений из 26, показаны все 2 страниц
как перехватить FileSizeLimitExceededException
    #38808823
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Как перехватить org.apache.tomcat.util.http.fileupload.FileUploadBase$FileSizeLimitExceededException в java коде?
...
Рейтинг: 0 / 0
как перехватить FileSizeLimitExceededException
    #38808836
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FileUploadBase.FileSizeLimitExceededException
?
...
Рейтинг: 0 / 0
как перехватить FileSizeLimitExceededException
    #38808842
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
как перехватить FileSizeLimitExceededException
    #38808851
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я, как бы, несколько другой разделитель использовал.
Американский рубль возникает из-за того, что внутренние классы эмулируются компилятором. На что, собственно, и указывает сообщение об ошибке.
...
Рейтинг: 0 / 0
как перехватить FileSizeLimitExceededException
    #38808853
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorov,
да, уже нашел этот класс и обернул проблемную строку, но все-равно не ловит!
...
Рейтинг: 0 / 0
как перехватить FileSizeLimitExceededException
    #38808855
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор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
как перехватить FileSizeLimitExceededException
    #38808858
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
как перехватить FileSizeLimitExceededException
    #38808863
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Трасса стека английским по чёрному пишет "IllegalStateException". Вот его и надо перехватывать.
Далее, если getCause() вернул непустое значение - можете узнавать фактическую причину исключения.
Вполне стандартная практика - обернуть одно исключение другим.
...
Рейтинг: 0 / 0
как перехватить FileSizeLimitExceededException
    #38808864
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
все-таки FileSizeLimitExceededException,
не перехватывает...
...
Рейтинг: 0 / 0
как перехватить FileSizeLimitExceededException
    #38808869
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если:
Код: 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
как перехватить FileSizeLimitExceededException
    #38808875
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
как перехватить FileSizeLimitExceededException
    #38808891
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Servlet API ошибка это или HttpServletResponse.setStatus() или HttpServletResponse.sendError() .
Поэтому, перехватив исключение, вы его протоколируете, если оно вам нужно, и устанавливаете статус HTTP-отклика.
...
Рейтинг: 0 / 0
как перехватить FileSizeLimitExceededException
    #38808895
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
после того как исключение перехвачено, я пробовал применять эти методы к респонсу, однако браузер выдает все то же "Во время загрузки страницы соединение с сервером было сброшено."
...
Рейтинг: 0 / 0
как перехватить FileSizeLimitExceededException
    #38808899
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
как перехватить FileSizeLimitExceededException
    #38808900
Фотография grasoff.net
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorovперехватив исключение, вы его протоколируете, если оно вам нужно, и устанавливаете статус HTTP-откликаоно и не получиться может
потому что всё закроется
...
Рейтинг: 0 / 0
как перехватить FileSizeLimitExceededException
    #38808918
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
grasoff.net,

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

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

ну, не совсем все хорошо :)
как дальше разрулить, т.е. сделать вызов error page на сайте?
...
Рейтинг: 0 / 0
как перехватить FileSizeLimitExceededException
    #38808991
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
grasoff.netоно и не получиться может
потому что всё закроетсяВ зависимости от чувства прекрасного, ошибки на HttpServletResponse можно или обработать самому или предоставить обработку контейнеру.
...
Рейтинг: 0 / 0
как перехватить FileSizeLimitExceededException
    #38808998
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
как перехватить FileSizeLimitExceededException
    #38809176
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
как перехватить FileSizeLimitExceededException
    #38809258
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174хорошо, а куда произойдет return?А куда он происходит, когда "заканчивается" метод service() (doPost()/e.t.c)?
Когда установлен статус/отправлена ошибка, делать с откликом что-то ещё - нельзя. Поэтому return - самый короткий способ досрочно завершить исполнение.
Если вам нужна какая-то другая обработка - сами думайте. У меня фантазия бедная
...
Рейтинг: 0 / 0
как перехватить FileSizeLimitExceededException
    #38809269
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Basil A. Sidorovrema174хорошо, а куда произойдет return?досрочно завершить исполнение
это вообщем то, что в данной ситуации и задумано, хотелось сделать это красивее, чем просто отображать в браузере, что соединение было сброшено.
и на том спасибо - ситуация понятна.
...
Рейтинг: 0 / 0
как перехватить FileSizeLimitExceededException
    #38809302
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174,
у меня точно так-же, есть ошибка (системная), если например, оракл в ауте.
Которую я вывожу как HTTP.Error (Basil A. Sidorov )
Тут уже ничего поделать с ней нельзя, а код выбранной ошибки как раз много скажет по телефону тех-поддержки.
...
Рейтинг: 0 / 0
как перехватить FileSizeLimitExceededException
    #38809344
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rema174это вообщем то, что в данной ситуации и задумано, хотелось сделать это красивее, чем просто отображать в браузере, что соединение было сброшено.Когда пользователь прислал больше данных, чем мы желаем обработать, то:
1. Если установить статус отклика и сделать возврат, то инициатива переходит к контейнеру.
Контейнер примет все меры к тому, чтобы корректно остановить отправку данных клиентом. В браузере появится простенькое сообщение, "разукрашенное" в меру желания разработчиков браузера;
2. Если сделать sendError(код) и возврат, то всё будет почти также, но контейнер отправит стандартную или настроенную страничку об ошибке. Что должно решить проблему "как объяснить пользователю, что он слишком много хочет".
В обоих случаях код ошибки будет записан в журнале обращений к сайту (access log) и будет точно известно, что именно происходило.

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

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


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