Struts 2 Обработка ошибок - Как я могу получить stackTrace и атрибут исключения? - PullRequest
3 голосов
/ 24 июня 2010

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

Ниже приведен фрагмент моего файла struts.xml:

<default-interceptor-ref name="defaultStack"/>

    <global-results>
        <result name="Exception" type="redirect">/error.action</result>
    </global-results>

    <global-exception-mappings>
        <exception-mapping result="Exception"   exception="java.lang.Exception" />
    </global-exception-mappings>

    <action name="error" class="fend.ErrorAction">
        <result>/error.jsp</result>
        <interceptor-ref name="configStack"/>
    </action>

Заранее спасибо!

Ответы [ 3 ]

1 голос
/ 08 декабря 2014

в вашем JSP:

Exception : <s:property value="%{exception}" />

Exception stacktrace: <s:property value="exceptionStack"/>
0 голосов
/ 17 августа 2010

Вы можете использовать com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor для регистрации ваших исключений на желаемом уровне журнала (и также необходимом регистраторе).( Прочтите документацию здесь )

Самый простой способ - настроить defaultStack в вашем struts.xml, как показано ниже:

<interceptor-stack name="defaultStack">
  <interceptor-ref name="exception">
     <param name="logEnabled">true</param>
     <param name="logCategory">com.mycompany.app.unhandled</param>
     <param name="logLevel">WARN</param>
  </interceptor-ref>
  <interceptor-ref name="alias"/>
  <interceptor-ref name="servletConfig"/>
  ........
</interceptor-stack>
0 голосов
/ 06 июля 2010

У меня те же настройки, что и у вас, за исключением того, что я перенаправляю свое исключение на страницу JSP exception.jsp.

На этой странице у меня есть следующее:

 <s:set name="ex" value="%{exception}" scope="page"/>

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

В конце концов, я перенаправил на страницу JSP, включив вышеупомянутый тег s: set и следующий JSP sciptlet:

<%
Exception exMsg = (Exception)pageContext.getAttribute("ex");
logger.logException(application.getRealPath("")+ "/WEB-INF/error.txt",exMsg);
%>

<br/><br/>User friendly message here

Класс logger получил трассировку стека из класса Exception и записал ее в файл:

StackTraceElement[] stackTrace = exception.getStackTrace();

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

...