public
abstract
class
BaseException
extends
RuntimeException
{
private
static
final
long
serialVersionUID
=
-
6765360320533958383L
;
private
String messageCode;
public
String getMessageCode()
{
return
messageCode;
}
public
void
setMessageCode(String messageCode)
{
this
.messageCode
=
messageCode;
}
public
BaseException()
{
super
();
}
public
BaseException(String message)
{
super
(message);
}
public
BaseException(String message, Throwable cause)
{
super
(message, cause);
}
public
BaseException(Throwable cause)
{
super
(cause);
}
public
BaseException(String messageCode, String message)
{
super
(message);
setMessageCode(messageCode);
}
public
BaseException(String messageCode, String message, Throwable cause)
{
super
(message, cause);
setMessageCode(messageCode);
}
public
class
BusinessException
extends
BaseException
{
private
static
final
long
serialVersionUID
=
-
1657938434382769721L
;
public
BusinessException()
{
super
();
}
public
BusinessException(String message, Throwable cause)
{
super
(message, cause);
}
public
BusinessException(Throwable cause)
{
super
(cause);
}
public
BusinessException(String messageCode, String message)
{
super
(messageCode, message);
setMessageCode(messageCode);
}
public
BusinessException(String messageCode, String message, Throwable cause)
{
super
(messageCode, message, cause);
setMessageCode(messageCode);
}
}
拦截器类:ErrorHandlingInterceptor.java 用于拦截异常,并在此统一处理
public
class
ErrorHandlingInterceptor
extends
AbstractInterceptor
{
private
static
final
long
serialVersionUID
=
1L
;
@Override
public
String intercept(ActionInvocation invocation)
throws
Exception
{
try
{
return
invocation.invoke();
}
catch
(Exception e)
{
e.printStackTrace();
handleException(e);
}
return
Action.INPUT;
}
/** */
/**
* 处理异常
*
@param
e
*/
private
void
handleException(Exception e)
{
boolean
handled
=
false
;
Throwable throwEx
=
e;
while
(throwEx
!=
null
)
{
if
(throwEx
instanceof
BusinessException)
{
BusinessException be
=
(BusinessException)throwEx;
String errorCode
=
be.getMessageCode();
//
从缓存中通过ErrorCode取得对应message
//
实现略
String errorMsg
=
getMessage(errorCode);
//
页面显示错误提示信息
fillError4Display(errorMsg);
handled
=
true
;
}
throwEx
=
throwEx.getCause();
}
if
(
!
handled)
{
fillDefaultError();
}
}
private
HttpServletRequest getRequest()
{
return
(HttpServletRequest)ActionContext.getContext().get(StrutsStatics.HTTP_REQUEST);
}
private
void
fillDefaultError()
{
fillError4Display(
"
系统忙,请稍候再试。
"
);
}
private
void
fillError4Display(String msg)
{
getRequest().setAttribute(
"
_error_msg_
"
, msg);
}
}
拦截所有的异常,并对其进行处理。
当为 自定义的BusinessException时,根据抛出异常时的msgCode,取得对应的显示信息。
msgCode与显示信息的对应关系 可先配置好,系统启动时将其缓存起来。
如果非BusinessException,则统一显示为 “系统忙,请稍候再试。”
将要显示的信息设置到Request中,下面来看看Freemarker模板的写法:
msg.ftl
<
div
id
='_err_msg_div'
>
<
#if
Request['_error_msg_']?exists
>
${Request['_error_msg_']}
</
#if
>
</
div
>
<
script
type
="text/javascript"
>
if
(
!
this
.Message)
{
this
.Message
=
{}
;
(
function
()
{
/**/
/*
*
* show client message
*/
Message.showMsg
=
function
(msg)
{
document.getElementById(
"
_err_msg_div
"
).innerHTML
=
msg;
}
;
}
)();
}
;
</
script
>
在使用时,只要在页面上想要展现异常信息的地方插入如下代码即可:
<
#include
"/msg.ftl"
>
这样 系统中的异常 将会被统一的显示。
当使用js做前台的表单验证的时候,提示用户的输入有问题,则可以使用 Message.showMsg('...'),提示信息也会显示在同一个位置。
这样就实现了异常提示信息的统一展示了。
这是一个比较简易的实现,只提供一个思路。
分享到:
相关推荐
通过全局异常映射,可以统一处理不同类型的应用程序异常,并返回相应的错误页面或提示信息。 在安全方面,Struts2集成了许多安全插件,如S2-005、S2-016等安全漏洞的修复,以及防止XSS、CSRF等攻击的防护措施。 ...
4. **异常处理**:通过配置,Struts2可以捕获和处理各种运行时异常,提供统一的错误页面和提示信息。 5. **AJAX支持**:Struts2提供了内置的AJAX支持,使得异步更新页面变得更加简单。 6. **RESTful风格的支持**:...
Struts2框架提供了异常处理机制,可以帮助开发者统一处理可能出现的问题,提供友好的错误提示信息。 10. **视图层设计**: 视图层通常使用JSP(JavaServer Pages)或FreeMarker模板技术来创建动态网页。这些页面会...
org.apache.struts2.views.freemarker.FreemarkerResult 16 httpheader 16 控制特殊http行为的结果类型 16 org.apache.struts2.dispatcher.HttpHeaderResult 16 stream 16 向浏览器发送InputSream对象,通常用来处理...
同时,框架提供了全局异常处理机制,可以统一处理未捕获的异常,提供友好的错误提示。 **7. 模板技术与拦截器** Struts 2支持FreeMarker、Velocity等模板技术,可以灵活地定制视图。拦截器是Struts 2的一个重要特性...
7. **异常处理**:Struts2提供了全局的异常处理机制,可以统一处理应用程序中抛出的异常,并根据异常类型返回不同的错误页面或提示信息。 8. **国际化(i18n)**:Struts2支持多语言环境,通过资源配置文件,可以...
Struts2提供了全局异常处理机制,可以捕获并处理Action执行过程中抛出的异常,统一返回错误页面或提示信息。 **10. 国际化** Struts2支持多语言,通过资源包(properties文件)可以轻松实现应用的国际化。 以上...
3. 错误处理:Struts2 的拦截器可以捕获和处理由Hibernate引发的异常,提供统一的错误提示。 4. 性能优化:通过合理配置,可以利用缓存机制提高性能,例如二级缓存和查询缓存。 四、整合步骤 1. 添加依赖:在项目的...
7. **异常处理**:Struts2提供了全局和Action级别的异常处理机制,允许开发者定义不同类型的异常对应的动作或结果,以实现统一的错误处理。 8. **国际化(i18n)**:Struts2支持多语言环境,通过资源文件管理不同...
5. **处理异常**:当RalaSafe检测到无权访问时,应捕获异常并重定向到合适的错误页面或提示信息。 ### 安全实践 在实际应用中,RalaSafe和Struts2结合使用可以帮助开发者: 1. **实现细粒度的访问控制**:通过...
6. **异常处理**:Struts2提供了全局的异常处理机制,允许开发者定义特定类型的异常映射到特定的结果,从而实现统一的错误页面或消息提示。 7. **国际化与本地化**:Struts2支持多语言,通过资源文件可以轻松实现...
Struts2是一个基于MVC(Model-View-Controller)设计模式的Java web应用程序框架,它极大地简化了Java web开发过程。Struts2的核心是Action,它处理来自客户端的请求,并通过Result来展示响应。在本压缩包"struts-...
10. **异常处理**:Struts2提供了统一的异常处理机制,可以捕获并处理应用程序中的异常,提供了更友好的错误提示。 通过深入学习Struts2.18的源码,开发者不仅可以理解框架的工作原理,还能根据实际需求进行定制和...
8. **异常处理**:Struts2提供了统一的异常处理机制,允许开发者自定义错误页面和处理策略。 9. **生命周期管理**:了解Action实例的生命周期,以及何时创建和销毁,这对于性能优化和内存管理至关重要。 10. **...
7. **错误处理和国际化**:Struts2允许你通过配置文件定义全局错误消息和异常处理器,这使得错误信息的显示更加统一。此外,通过使用资源文件,可以轻松实现应用的国际化和本地化。 8. **部署与测试**:完成上述...
6. **异常处理**:通过配置全局异常处理,Struts2可以捕获并处理Action执行过程中出现的异常,统一返回错误页面或提示信息。 7. **国际化与本地化**:Struts2支持多语言环境,可以通过资源文件轻松实现应用的国际化...
7. **异常处理**:通过全局的Exception Handler,可以统一处理应用程序中的异常,提供友好的错误提示界面。 8. **数据库交互**:通常结合DAO(Data Access Object)模式,使用Hibernate或iBatis等持久层框架进行...
Struts2支持全局异常处理,可以通过配置文件定义一个全局的ExceptionMappingInterceptor,或者在Action类中抛出特定的异常,然后在JSP页面中统一处理。 8. **安全性考虑** 实现CRUD操作时,还需要注意安全性问题。...
在Struts2中,我们可以自定义拦截器来捕获和处理异常。这样,我们可以在一个中心位置统一管理所有可能出现的异常,而不是在每个Action类中单独处理。这不仅提高了代码的可维护性,也使得错误消息的呈现更加规范。...
5. **异常处理**:通过配置全局异常处理,可以统一管理可能出现的运行时错误,提供友好的错误提示页面。 **SQL2000数据库** SQL Server 2000是微软推出的关系型数据库管理系统,广泛应用于企业级应用。在这个电商...