This interceptor forms the core functionality of the exception handling feature. Exception handling allows you to map an exception to a result code, just as if the action returned a result code instead of throwing an unexpected exception. When an exception is encountered, it is wrapped with an ExceptionHolder
and pushed on the stack, providing easy access to the exception from within your result. Note: While you can configure exception mapping in your configuration file at any point, the configuration will not have any effect if this interceptor is not in the interceptor stack for your actions. It is recommended that you make this interceptor the first interceptor on the stack, ensuring that it has full access to catch any exception, even those caused by other interceptors.
Interceptor parameters:
- logEnabled (optional) - Should exceptions also be logged? (boolean true|false)
- logLevel (optional) - what log level should we use (
trace, debug, info, warn, error, fatal
)? - defaut isdebug
- logCategory (optional) - If provided we would use this category (eg.
com.mycompany.app
). Default is to usecom.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor
.
The parameters above enables us to log all thrown exceptions with stacktace in our own logfile, and present a friendly webpage (with no stacktrace) to the end user.
Extending the interceptor:
If you want to add custom handling for publishing the Exception, you may override publishException(com.opensymphony.xwork2.ActionInvocation, ExceptionHolder)
. The default implementation pushes the given ExceptionHolder on value stack. A custom implementation could add additional logging etc.
Example code:
<xwork> <package name="default" extends="xwork-default"> <global-results> <result name="success" type="freemarker">error.ftl</result> </global-results> <global-exception-mappings> <exception-mapping exception="java.lang.Exception" result="error"/> </global-exception-mappings> <action name="test"> <interceptor-ref name="exception"/> <interceptor-ref name="basicStack"/> <exception-mapping exception="com.acme.CustomException" result="custom_error"/> <result name="custom_error">custom_error.ftl</result> <result name="success" type="freemarker">test.ftl</result> </action> </package> </xwork>
This second example will also log the exceptions using our own category com.mycompany.app.unhandled
at WARN level.
<xwork>
<package name="something" extends="xwork-default">
<interceptors>
<interceptor-stack name="exceptionmapping-stack">
<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="i18n"/>
<interceptor-ref name="static-params"/>
<interceptor-ref name="params"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="exceptionmapping-stack"/>
<global-results>
<result name="unhandledException">/unhandled-exception.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="unhandledException"/>
</global-exception-mappings>
<action name="exceptionDemo" class="org.apache.struts2.showcase.exceptionmapping.ExceptionMappingAction">
<exception-mapping exception="org.apache.struts2.showcase.exceptionmapping.ExceptionMappingException"
result="damm"/>
<result name="input">index.jsp</result>
<result name="success">success.jsp</result>
<result name="damm">damm.jsp</result>
</action>
</package>
</xwork>
相关推荐
声明式异常处理基于Struts2的核心组件——`ExceptionMappingInterceptor`拦截器。这个拦截器会捕获并处理在执行Action时抛出的异常。在Struts2的配置文件(通常是`struts.xml`或`struts.properties`)中,我们可以...
它使用了拦截器(Interceptor)的概念,其中`ExceptionMappingInterceptor`是专门处理异常的拦截器。在`struts-default.xml`或自定义的配置文件中,你可以配置异常拦截器栈来定义如何处理异常。例如: ```xml ...
拦截器是Struts2.0实现业务逻辑的重要手段,如ValidationInterceptor进行数据校验,ExceptionMappingInterceptor处理异常,LoginInterceptor实现登录控制等。拦截器可以自由组合,形成拦截器栈,实现复杂的功能。 ...
XWork-2.1.6提供了许多内置拦截器,如ValidationInterceptor用于表单验证,ExceptionMappingInterceptor处理异常等。 **6. 源码分析** 拥有XWork-2.1.6的源码,开发者可以深入理解其内部机制,学习如何编写自定义...
当Action执行过程中抛出异常时,ExceptionMappingInterceptor会捕获它,并根据预先配置的异常映射规则来决定如何响应。 3. **struts.xml配置** 在`struts.xml`配置文件中,可以通过`<exception-mapping>`元素定义...
`ExceptionMappingInterceptor`负责捕捉并处理异常,它可以将异常映射到特定的结果,比如错误页面或者重定向URL。这使得开发者能够统一处理各种异常情况,保持代码整洁。 6. **配置管理** XWork的配置文件通常是...
默认拦截器栈包含了Struts2框架预定义的一些拦截器,如`ExceptionMappingInterceptor`用于处理异常,`PrepareInterceptor`用于准备Action,`ModelDrivenInterceptor`用于模型驱动等。 3. `destroy()`: 这个方法在...
在Struts2框架中,异常处理主要依赖于两个关键组件:`ExceptionMappingInterceptor`(异常映射拦截器)和`ActionError`。当一个Action执行过程中抛出未捕获的异常时,`ExceptionMappingInterceptor`会介入并根据配置...
总结,Struts2配置涉及多个方面,包括核心库的引入、配置文件的编写、Action、Result、Interceptor的定义以及与Spring的整合等。通过合理配置,可以构建出高效、灵活的Web应用。在实际项目中,应根据需求调整和优化...
例如,`ValidationInterceptor`用于验证用户输入,`ExceptionMappingInterceptor`则处理异常并映射到相应的错误页面。 动态方法调用是Struts2的一个特色,它允许开发者直接调用Action类的方法,而不仅仅局限于一个...
常见的拦截器有ValidationInterceptor进行表单验证,ExceptionMappingInterceptor处理异常,以及TilesPlugin提供的视图解析等。 框架还支持多种结果类型(Result Types),如dispatcher用于常规的HTTP请求转发,...
通过`ExceptionMappingInterceptor`和`UnknownHandlerManager`,XWork2能够将运行时异常映射到特定的结果,提供了友好的错误页面和异常处理策略。 总的来说,这份2010年的XWork2源代码为我们揭示了Struts2背后的...
- Struts2提供全局和局部异常处理策略,通过ExceptionMappingInterceptor处理未捕获的异常。 - 错误页面和全局结果可以配置来展示错误信息。 6. **国际化与本地化**: - Struts2支持多语言环境,通过资源bundle...
例如,`ValidationInterceptor`用于验证表单输入,`ExceptionMappingInterceptor`处理异常,`PrepareInterceptor`则负责初始化Action实例。 此外,Struts2支持多种视图技术,如JSP、FreeMarker、Velocity等,允许...
Struts2内置了一些常用的拦截器,如ValidationInterceptor用于字段验证,ExceptionMappingInterceptor用于处理异常。开发者可以根据需要组合和配置拦截器栈,这些拦截器会在Action执行前后按顺序执行。 视图组件在...
- **ExceptionMappingInterceptor**: 处理Action执行时可能出现的异常,将其转换为指定的结果。 - **LoggerInterceptor**: 记录Action执行过程中的日志信息。 **4. 国际化(i18n)支持** Struts2支持多语言环境,...
4. Interceptor栈:提供了一组默认的拦截器,如ValidationInterceptor用于表单验证,ExceptionMappingInterceptor处理异常。 随着版本的演进,Struts 2.3.15.1引入了许多改进和新特性: 1. 更强的安全性:针对之前...
Struts2的拦截器(Interceptor)也可以参与到异常处理中,通过实现`ExceptionMappingInterceptor`接口,可以在拦截器中捕获并处理异常,提供更灵活的异常处理策略。 通过以上机制,Struts2允许开发者在处理业务...
常见的拦截器如`ValidationInterceptor`用于验证表单数据,`ExceptionMappingInterceptor`处理异常。 4. **Value Stack**:值栈是Struts2中存储模型对象的地方,它允许开发者通过OGNL(Object-Graph Navigation ...