Я немного искал эту тему в Google и видел некоторые лучшие практики. Но мне нужен какой-то конкретный совет. Я работаю над приложением J2EE с сервлетами / Struts2 / Call to DAO от JSP. Так что приложение все запутано. Большая часть данных выбирается с помощью хранимых процедур, которые вызываются iBatis ORM / Spring. Иногда, когда ошибка происходит на стороне SP, она отображает пользователю ужасное сообщение, например ниже:
javax.servlet.ServletException: org.springframework.jdbc.BadSqlGrammarException: SqlMapClient operation; bad SQL grammar []; nested exception is com.ibatis.common.jdbc.exception.NestedSQLException:
--- The error occurred in debtowed.xml.
--- The error occurred while applying a parameter map.
--- Check the debtowed.getFormerTenantData.
--- Check the statement (update procedure failed).
--- Cause: java.sql.SQLException: ORA-06550: line 1, column 11:
PLS-00905: object package.GET_FORMER_ADDRESS is invalid
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
Caused by: java.sql.SQLException: ORA-06550: line 1, column 11:
PLS-00905: object package.GET_FORMER_ADDRESS is invalid
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored
В этот момент вышеуказанная информация отображается в браузере и регистрируется на сервере server.log.
Тем не менее, я хочу сделать следующее:
- Подарить пользователю страницу с пользовательской ошибкой
- записывать ошибки в myapp.log вместо server.log (мы делаем это в некоторых других местах, когда мы используем log4j)
Пожалуйста, скажите мне, как лучше всего это сделать? Должен ли я что-то добавить в web.xml? как слушатель? это будет единственное изменение или мне придется изменить существующий код?
Код не выполняет проверку ошибок. он просто вызывает SP, как показано ниже
getSqlMapClientTemplate().queryForList("sp.getfmrAddy", paramMap);