Как избежать получения пользователями 500 ошибок при исключении сервера - PullRequest
3 голосов
/ 06 марта 2012

В журнале сервера появляются следующие ошибки.

  • 2012-03-06 09:20:43 HTTP JVM: CLFAD0211E: Возникло исключение.Более подробную информацию см. В файле error-log-0.xml, расположенном в папке D: / Lotus / Domino / data / domino / workspace / logs
  • 2012-03-06 09:20:43 HTTP JVM: CLFAD0229E: Произошло исключение безопасности: запрос на обслуживание для: /demo.nsf/home.xsp - HTTP-код: 500. Более подробную информацию см. В файле error-log-0.xml, расположенном в D: / Lotus / Domino / data / domino / workspace/ logs

Пользователь видит это только в веб-браузере (источник)

<html>
<head>
<title>Error</title></head>
<body text="#000000">
<h1>Error 500</h1>HTTP Web Server: Command Not Handled Exception</body>
</html>

Таким образом, по журналу сервера я могу сказать, что на сервере возникло исключение безопасности,вероятно, потому что у меня неправильные настройки в моем файле java.policy.но моя проблема не в том, что вызывает ошибку, а в том, как я могу избежать того, чтобы пользователи получали эти ужасные 500 ошибок.

Я бы хотел, чтобы страница с ошибками, которую я установил в приложении, была представлена ​​пользователю так же, каклюбое другое исключение.

возможно?

Ответы [ 6 ]

5 голосов
/ 06 марта 2012

Чем больше блоков try / catch у вас есть в коде, тем лучше (в разумных пределах, конечно):

try {
 // code that might throw an error
} catch (e) {
 // examine the error to see if there's a workaround
 // if not, log it and inform the user
} finally {
 // any code that needs to run whether or not there was an error
}

Таким образом, если что-то не получается, оно терпит неудачу изящно.Просто убедитесь, что для пользователя очевидно, что что-то пошло не так (и, предпочтительно, предоставьте ему инструкции, на которых они действительно могут следовать) ... молчаливый сбой даже хуже, чем ужасная страница с ошибкой, если что-то пошло не так, и пользователь думаетвсе было хорошо.

PS Как указывает Стефан, есть некоторые ошибки, которые просто не могут быть обнаружены.Если XPage не был подписан кем-то, имеющим доступ к запуску XPages, например, он даже не доходит до попытки запустить ваш код ... сама страница недействительна, поэтому вы ничего не можете сделать во время выполнения.Всегда проверяйте, что ваши XPages подписаны во время развертывания.

5 голосов
/ 06 марта 2012

Существует ряд ошибок, которые «прорываются», даже если у вас есть определенная страница ошибок.Например, когда вы перетаскиваете элемент управления на себя.Безопасность кажется другой областью.Все это вещи, с которыми вы должны справиться в процессе разработки.Я не видел ошибок, которые «обычно» случаются (истинное время выполнения после завершения разработки и проверенный тип ошибок), выходящих за пределы пользовательской страницы ошибок.Кроме того, следуйте совету Деклана.

4 голосов
/ 06 марта 2012

У меня была такая проблема, когда моя страница с ошибкой не отображалась, а вместо этого отображалась страница с ошибкой 500.

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

Лучший способ проверить, является ли это причиной вашей конкретной проблемы, - начать с простой страницы ошибок,нет темы, нет библиотек ssjs, нет кода ssjs на странице и т. д., просто пустая xpage со статическим текстом, указывающим, что это страница ошибки.

После того, как вы подтвердите, что это является возможной причинойОшибка 500, затем вы можете начать создавать эту страницу ошибок и постепенно добавлять динамические элементы, пока они вам не понадобятся.

2 голосов
/ 09 марта 2012

У Дмитрия Пастовенского есть хорошая статья http://dpastov.blogspot.com/2012/01/error-pages-in-domino.html о страницах ошибок в Domino.

Чтобы быть в безопасности, у меня есть статическая html-страница с надписью «Произошла ошибка». На эту страницу ссылается параметр HTTPMultiErrorPage в файле notes.ini на вашем сервере.

Затем существует правило «заголовки ответа HTTP», адресованное специальным кодам ошибок.

Основная проблема заключается в том, что это глобальные настройки. Поэтому нет простого способа отловить все ошибки специально для вашего приложения. Но, по крайней мере, пользователь не получает эту надоедливую страницу с белой ошибкой.

1 голос
/ 08 марта 2012

У меня были похожие проблемы с этим. Сообщения об ошибках всплывают из-за некоторой основной ошибки, которая переопределяет определенную страницу ошибок для приложения. Это не очень хорошее поведение (с точки зрения пользователя) и заставляет вас чувствовать себя немного голым. Я понимаю, что приложению трудно их перехватить - но должен быть хотя бы способ настроить это сообщение - Страница ошибки 500 по умолчанию не очень полезна для обычного пользователя в любом случае ...

Единственный (?) Способ избежать того, чтобы ваш код выдавал такую ​​ошибку (ssjs / java), - это (как уже упоминал Тим Трипкон) всегда использовать операторы try / catch вокруг кода (как ты уже знаешь :))

getDocumentByUNID () - это «хороший» пример метода, который приведет к отображению страницы с уродливой (но стандартной) ошибкой 500 вместо определенной в приложении.

Как и для любых других типов ошибок (система / безопасность и т. Д.) - я не думаю, что можно перенаправить их на страницу ошибок вызываемых приложений (пользователем), поскольку они вызываются не из приложения, а до приложение вызывается (надеюсь, я ошибаюсь).

0 голосов
/ 06 марта 2012

Создайте новый XPage с именем error.xsp (например). Поместите некоторую базовую информацию о том, что что-то пошло не так, извинитесь за этот факт и предоставьте несколько ссылок, как продолжить работу (даже если его / ее данные могут быть потеряны навсегда - history.go (-1) обычно не решает проблему) , В фоновом режиме вы можете записать ошибку (рекомендуется использовать OpenLog).

Открыть свойства приложения, вкладка XPages. Снимите флажок Отображение страницы ошибок времени выполнения XPages . В комбо Страница ошибки выберите свою страницу (ошибка).

...