1.我写这段代码实现的愿望,ssh验证提示使用的不是很顺手,可能是我用的不太熟悉吧,最后我考虑了一下自己的SSH消息提示信息。主要是通过struts2中的自定义异常与strut2的拦截器实现消息提示。
2.拦截器中分为两种异常一种为系统中已经定义好的异常,处理方式为直接转跳到一个固定页面进行友好提示,第二种方式为自定义系统中的消息提示。如下提出代码:
自定义异常类:
package com.finance.exception; import com.finance.util.ApplicationContextUtils; import com.finance.util.PropertiesUtils; /** * 请求运行时异常 * * @author guyw * * 2014-3-9 */ public class AppContextException extends RuntimeException{ /** * 根据状态判断错误 * @param sate 错误状态 * @param message 错误信息 */ public AppContextException(String state,String message) { // PropertiesUtils propertiesUtils=(PropertiesUtils) ApplicationContextUtils.getApplicationContext().getBean("propertiesUtils"); // String errorMessage=(String) propertiesUtils.getProperties().get(state); super(state+":"+message); } /** * 根据状态判断错误 * @param sate 错误状态 */ public AppContextException(String state) { // PropertiesUtils propertiesUtils=(PropertiesUtils) ApplicationContextUtils.getApplicationContext().getBean("propertiesUtils"); // String errorMessage=(String)propertiesUtils.getProperties().get(state); super(state); } }
自定义:拦截器
package com.finance.intercepter;
import java.io.IOException;
import java.sql.SQLException;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts2.ServletActionContext;
import org.springframework.dao.DataAccessException;
import com.finance.exception.AppContextException;
import com.finance.util.ApplicationContextUtils;
import com.finance.util.PropertiesUtils;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionInvocation;
import com.opensymphony.xwork2.interceptor.Interceptor;
/**
*
* 全局异常拦截器
*
* @author guyw
*
* 2014-3-9
*/
public class AppContextExceptionIntercepter implements Interceptor {
private static final long serialVersionUID = 1L;
private String errorMessage;
@Override
public void destroy() {
}
@Override
public void init() {
}
@Override
public String intercept(ActionInvocation invocation) {
ActionContext ctx = invocation.getInvocationContext();
HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);
String result=null;
try {
result=invocation.invoke();
} catch (DataAccessException ex) {
throw new AppContextException("10001", "数据库操作失败!");
} catch (NullPointerException ex) {
throw new AppContextException("10001", "调用了未经初始化的对象或者是不存在的对象!");
} catch (IOException ex) {
throw new AppContextException("10001", "IO异常!");
} catch (ClassNotFoundException ex) {
throw new AppContextException("10001", "指定的类不存在!");
} catch (ArithmeticException ex) {
throw new AppContextException("10001", "数学运算异常!");
} catch (ArrayIndexOutOfBoundsException ex) {
throw new AppContextException("10001", "数组下标越界!");
} catch (IllegalArgumentException ex) {
throw new AppContextException("10001", "方法的参数错误!");
} catch (ClassCastException ex) {
throw new AppContextException("10001", "类型强制转换错误!");
} catch (SecurityException ex) {
throw new AppContextException("10001", "违背安全原则异常!");
} catch (SQLException ex) {
throw new AppContextException("10001", "操作数据库异常!");
} catch (NoSuchMethodError ex) {
throw new AppContextException("10001", "方法末找到异常!");
} catch (InternalError ex) {
throw new AppContextException("10001", "Java虚拟机发生了内部错误");
}
catch (AppContextException ex) {
PropertiesUtils propertiesUtils = (PropertiesUtils) ApplicationContextUtils.getApplicationContext().getBean("propertiesUtils");
String state=ex.toString();
String message=(String) propertiesUtils.getProperties().get(state);
if(errorMessage!=null){
errorMessage=state+","+message;
}else{
errorMessage=state;
}
request.setAttribute("errorMessage",errorMessage);
return "success";
}
catch (Exception ex) {
throw new AppContextException("10001", "程序内部错误,操作失败!");
}
return "exceptionErrorMessage";
}
}
如上红色代码 return "success"; 此处有一个疑问 如果在Action中抛出异常后拦截器捕获后返回结果集为 404错误,不知道改则么处理:错误页面代码:
HTTP Status 404 - result 'null' not found
type Status report
message result 'null' not found
description The requested resource (result 'null' not found) is not available.
Apache Tomcat/6.0.13
PropertiesUtils 为一些自定义的消息固定提示信息key-value 比如:10001=登录失败!。
使用方式为 此处有一个上传功能:
/** * 保存合作机构 * @return */ public String saveOrg(){ if(true){ throw new AppContextException("10001", "上传文件错误!"); } return SUCCESS; }
这样就能构建全局的消息提示信息。新手发帖赶紧喷吧。
请教问题:如上红色代码 return "success"; 此处有一个疑问 如果在Action中抛出异常后拦截器捕获后返回结果集为 404错误,不知道改则么处理,是不是如果在Action抛出异常后,在拦截器中返回的结果集与Action的拦截器就无关了?
相关推荐
本文将深入探讨Struts2的拦截器使用,结合实例和源码分析,帮助你更好地理解和运用这一特性。 一、拦截器的概念与作用 拦截器是Struts2框架的核心组件之一,它是在动作执行前后插入的一段代码,能够对请求进行...
### Struts2拦截器的使用 #### 一、概述 Struts2框架是基于MVC设计模式的一个开源框架,它提供了强大的功能来帮助开发者构建Web应用程序。在Struts2中,拦截器是一种非常重要的机制,它可以在Action执行前后进行...
"基于Struts2拦截器的权限控制.doc"文档很可能是提供了一个具体的案例,详细讲解了如何创建并使用拦截器进行权限控制。文档可能会涵盖以下内容: 1. 创建自定义拦截器类,实现`Interceptor`接口,重写`intercept()`...
自定义拦截器需要继承`org.apache.struts2.interceptor.StrutsPrepareAndExecuteInterceptor`或`org.apache.struts2.interceptor.BaseAroundInterceptor`,并重写`intercept()`方法。在`intercept()`中,你可以添加...
- **功能**:定义了 Struts2 的配置信息,包括 Action 的映射、拦截器栈等。 - **示例**: ```xml <struts> <package name="default" namespace="/" extends="struts-default"> <result name="success">/WEB-...
你可以自定义一个拦截器,捕获异常并将其转换为ActionError,然后将错误信息传递给结果页面。 通过以上步骤,你就可以在Struts2项目中实现全局异常提示,使错误处理更加统一和用户友好。同时,这种方法也方便了代码...
在实际应用中,你还需要在Struts2的配置文件(通常是`struts.xml`)中注册这个自定义拦截器,并将其应用到相应的Action上,以确保在执行Action之前先经过拦截器的检查。 总结来说,防止重复提交的自定义拦截器主要...
Struts2的拦截器机制允许我们在执行Action之前或之后插入额外的处理逻辑,如登录验证。我们可以自定义拦截器来实现复杂的功能,例如,确保用户已登录才能访问某些页面。 7. **持久化数据** 注册功能涉及到用户...
Struts2与AJAX的结合,使得Web应用程序能够提供更流畅、更快速的用户体验。通过集成JSON、JSON-RPC等技术,可以实现异步数据交换和页面局部刷新。 #### 11. 集成Hibernate与Spring 为了构建复杂的企业级应用,...
Struts2允许自定义异常处理策略,可以捕获并优雅地处理业务逻辑中的异常,提供友好的错误提示给用户。 十二、国际化与本地化 网上书店可能需要支持多语言,Struts2提供了国际化支持,通过资源文件来管理不同语言的...
8. **错误与异常处理**:Struts2提供了全局和局部两种错误处理方式,可以自定义错误页面,实现友好的错误提示。 9. **表单验证**:Struts2的Validator组件可以对用户输入进行验证,支持JSR303/JSR349 Bean ...
4. **集成拦截器**:使用Struts2的拦截器机制,添加Shiro的`authc`拦截器,该拦截器会在每个Action执行前检查用户是否已登录。 5. **权限控制**:在Action或Action方法上添加注解,指定需要的权限,Shiro会根据这些...
Struts2Demo是一个基于Struts2框架的示例项目,主要展示了如何利用Struts2...同时,这个项目也可以作为进一步探索Struts2其他高级特性的起点,如拦截器的自定义、AOP(面向切面编程)的应用、 strut2与Spring的集成等。
8. **国际化(Internationalization, i18n)**:对于错误消息和提示信息,Struts2支持国际化,你可以看到DEMO中可能包含资源文件如`messages.properties`,用来存储不同语言环境下的文本。 通过这个Struts2登录DEMO...
在"Struts2拦截器学习.doc"中,可能会详细讲解如何定义、配置和使用拦截器,包括在struts.xml配置文件中声明拦截器,以及使用@InterceptorRef注解在Action类中引用拦截器。 接下来是Common-FileUpload组件。在...
4. **Interceptor(拦截器)**:拦截器是Struts2中的一个重要特性,允许在Action调用前后插入自定义逻辑,如日志、权限检查、事务管理等。开发者可以通过实现`com.opensymphony.xwork2.interceptor.Interceptor`接口...
总的来说,"Struts 友好错误提示"涵盖了如何在Struts框架中优雅地处理错误,包括配置异常映射、使用拦截器、处理Action中的异常、以及实现本地化的错误信息。理解并掌握这些知识点,能够帮助开发者提升Web应用的质量...
2. **配置文件**:Struts2的配置文件(通常为struts.xml)用于定义Action、结果类型、拦截器等。在这里,你需要定义登录和注册Action的URL映射,以及它们对应的结果页面。 3. **拦截器(Interceptors)**:Struts2...
Struts2是Java EE领域中一个流行的MVC(Model-View-Controller)框架,它提供了强大的动作调度、拦截器机制以及丰富的结果类型,使得开发者能够构建结构清晰、可维护性强的Web应用。 1. **Struts2框架介绍** ...