`
a275924501
  • 浏览: 1829 次
  • 性别: Icon_minigender_1
  • 来自: 邯郸
最近访客 更多访客>>
社区版块
存档分类
最新评论

使用struts2拦截器与struts自定义异常构建自定义提示信息

阅读更多

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拦截器的使用

    ### Struts2拦截器的使用 #### 一、概述 Struts2框架是基于MVC设计模式的一个开源框架,它提供了强大的功能来帮助开发者构建Web应用程序。在Struts2中,拦截器是一种非常重要的机制,它可以在Action执行前后进行...

    Struts2权限控制

    "基于Struts2拦截器的权限控制.doc"文档很可能是提供了一个具体的案例,详细讲解了如何创建并使用拦截器进行权限控制。文档可能会涵盖以下内容: 1. 创建自定义拦截器类,实现`Interceptor`接口,重写`intercept()`...

    struts 2.0 的拦截器

    自定义拦截器需要继承`org.apache.struts2.interceptor.StrutsPrepareAndExecuteInterceptor`或`org.apache.struts2.interceptor.BaseAroundInterceptor`,并重写`intercept()`方法。在`intercept()`中,你可以添加...

    struts2 学习重点笔记

    - **功能**:定义了 Struts2 的配置信息,包括 Action 的映射、拦截器栈等。 - **示例**: ```xml <struts> <package name="default" namespace="/" extends="struts-default"> <result name="success">/WEB-...

    struts2 全局异常提示定义属性文件使用

    你可以自定义一个拦截器,捕获异常并将其转换为ActionError,然后将错误信息传递给结果页面。 通过以上步骤,你就可以在Struts2项目中实现全局异常提示,使错误处理更加统一和用户友好。同时,这种方法也方便了代码...

    自定义拦截器实现防止重复提交

    在实际应用中,你还需要在Struts2的配置文件(通常是`struts.xml`)中注册这个自定义拦截器,并将其应用到相应的Action上,以确保在执行Action之前先经过拦截器的检查。 总结来说,防止重复提交的自定义拦截器主要...

    struts2登录注册简单实现

    Struts2的拦截器机制允许我们在执行Action之前或之后插入额外的处理逻辑,如登录验证。我们可以自定义拦截器来实现复杂的功能,例如,确保用户已登录才能访问某些页面。 7. **持久化数据** 注册功能涉及到用户...

    struts2 入门书籍

    Struts2与AJAX的结合,使得Web应用程序能够提供更流畅、更快速的用户体验。通过集成JSON、JSON-RPC等技术,可以实现异步数据交换和页面局部刷新。 #### 11. 集成Hibernate与Spring 为了构建复杂的企业级应用,...

    网上书店struts2

    Struts2允许自定义异常处理策略,可以捕获并优雅地处理业务逻辑中的异常,提供友好的错误提示给用户。 十二、国际化与本地化 网上书店可能需要支持多语言,Struts2提供了国际化支持,通过资源文件来管理不同语言的...

    struts2电子书书籍系列

    8. **错误与异常处理**:Struts2提供了全局和局部两种错误处理方式,可以自定义错误页面,实现友好的错误提示。 9. **表单验证**:Struts2的Validator组件可以对用户输入进行验证,支持JSR303/JSR349 Bean ...

    struts2和shiro完美整合解决方案

    4. **集成拦截器**:使用Struts2的拦截器机制,添加Shiro的`authc`拦截器,该拦截器会在每个Action执行前检查用户是否已登录。 5. **权限控制**:在Action或Action方法上添加注解,指定需要的权限,Shiro会根据这些...

    Struts2Demo

    Struts2Demo是一个基于Struts2框架的示例项目,主要展示了如何利用Struts2...同时,这个项目也可以作为进一步探索Struts2其他高级特性的起点,如拦截器的自定义、AOP(面向切面编程)的应用、 strut2与Spring的集成等。

    Struts2登录DEMO

    8. **国际化(Internationalization, i18n)**:对于错误消息和提示信息,Struts2支持国际化,你可以看到DEMO中可能包含资源文件如`messages.properties`,用来存储不同语言环境下的文本。 通过这个Struts2登录DEMO...

    两篇网文:拦截器 Common-FileUpload

    在"Struts2拦截器学习.doc"中,可能会详细讲解如何定义、配置和使用拦截器,包括在struts.xml配置文件中声明拦截器,以及使用@InterceptorRef注解在Action类中引用拦截器。 接下来是Common-FileUpload组件。在...

    struts2_api.rar_STRUTS2-API_structs2 api_struts2 api_struts2 res

    4. **Interceptor(拦截器)**:拦截器是Struts2中的一个重要特性,允许在Action调用前后插入自定义逻辑,如日志、权限检查、事务管理等。开发者可以通过实现`com.opensymphony.xwork2.interceptor.Interceptor`接口...

    Struts 友好错误提示

    总的来说,"Struts 友好错误提示"涵盖了如何在Struts框架中优雅地处理错误,包括配置异常映射、使用拦截器、处理Action中的异常、以及实现本地化的错误信息。理解并掌握这些知识点,能够帮助开发者提升Web应用的质量...

    Struts2登录注册

    2. **配置文件**:Struts2的配置文件(通常为struts.xml)用于定义Action、结果类型、拦截器等。在这里,你需要定义登录和注册Action的URL映射,以及它们对应的结果页面。 3. **拦截器(Interceptors)**:Struts2...

    struts2CRUD

    Struts2是Java EE领域中一个流行的MVC(Model-View-Controller)框架,它提供了强大的动作调度、拦截器机制以及丰富的结果类型,使得开发者能够构建结构清晰、可维护性强的Web应用。 1. **Struts2框架介绍** ...

Global site tag (gtag.js) - Google Analytics