Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java =================================================================== diff -u -r20085 -r20154 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java (.../RecyclingRecordAction.java) (revision 20085) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java (.../RecyclingRecordAction.java) (revision 20154) @@ -102,6 +102,7 @@ import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseMaterialErrorDamageManager; import com.forgon.disinfectsystem.tousseitem.service.TousseItemManager; +import com.forgon.exception.service.ExceptionHandler; import com.forgon.security.model.User; import com.forgon.tools.MathTools; import com.forgon.tools.SqlBuilder; @@ -188,7 +189,12 @@ private ContainerManager containerManager; private MaterialInstanceManager materialInstanceManager; private TousseItemManager tousseItemManager; + private ExceptionHandler exceptionHandler; + public void setExceptionHandler(ExceptionHandler exceptionHandler) { + this.exceptionHandler = exceptionHandler; + } + public void setTousseItemManager(TousseItemManager tousseItemManager) { this.tousseItemManager = tousseItemManager; } @@ -668,7 +674,7 @@ } catch (Exception e){ e.printStackTrace(); success = false; - message = e.getMessage(); + message = exceptionHandler.handleException(e); } } HttpSession session = request.getSession(); Index: forgon-tools/src/main/java/com/forgon/exception/service/ExceptionHandler.java =================================================================== diff -u --- forgon-tools/src/main/java/com/forgon/exception/service/ExceptionHandler.java (revision 0) +++ forgon-tools/src/main/java/com/forgon/exception/service/ExceptionHandler.java (revision 20154) @@ -0,0 +1,22 @@ +package com.forgon.exception.service; + +import javax.servlet.ServletResponse; + +/** + * 异常处理 + * @author kzh + * + */ +public interface ExceptionHandler { + /** + * 处理异常并输出消息到客户端 + * @param response + * @param e + */ + public void handleException(ServletResponse response,Exception e); + /** + * 处理异常并返回给用户的提示消息 + * @param e + */ + public String handleException(Exception e); +} Index: forgon-tools/src/main/java/com/forgon/exception/service/ExceptionHandlerImpl.java =================================================================== diff -u --- forgon-tools/src/main/java/com/forgon/exception/service/ExceptionHandlerImpl.java (revision 0) +++ forgon-tools/src/main/java/com/forgon/exception/service/ExceptionHandlerImpl.java (revision 20154) @@ -0,0 +1,56 @@ +package com.forgon.exception.service; + +import javax.servlet.ServletResponse; + +import org.apache.log4j.Logger; +import org.springframework.dao.CannotAcquireLockException; +import org.springframework.dao.DataIntegrityViolationException; + +import com.forgon.exception.SystemException; +import com.forgon.tools.StrutsResponseUtils; + +public class ExceptionHandlerImpl implements ExceptionHandler { + private static final Logger logger = Logger.getLogger(ExceptionHandlerImpl.class); + private static final String DATA_BASE_LOCK = "数据库处理异常,请重新操作"; + private static final String DATA_UNIQUE_EXCEPTION = "数据库违反唯一约束,操作失败"; + + @Override + public void handleException(ServletResponse response, Exception ex) { + String message = handleException(ex); + StrutsResponseUtils.output(false, message, response); + } + @Override + public String handleException(Exception ex){ + String message = ""; + if(ex instanceof CannotAcquireLockException){ + //数据库死锁的时候,会报这个异常 + message = DATA_BASE_LOCK; + }else if(ex instanceof DataIntegrityViolationException){ + //违反唯一约束时会抛出此异常 + message = DATA_UNIQUE_EXCEPTION; + }else if(ex instanceof SystemException){ + //自定义的异常,异常消息都是可以直接给用户看的 + message = ex.getMessage(); + }else if(ex instanceof RuntimeException){ + //目前有很多提示消息使用了RuntimeException.但是RuntimeException的message并不都合适显示给用户看到。 + //后面都应该要改为自定义异常 + message = ex.getMessage(); + }else{ + //这里就是很严重的异常了 + message = "服务器处理异常"; + } + doLog(ex, message); + return message; + } + /** + * 记录日志 + * @param ex + */ + private void doLog(Exception ex,String message){ + if(ex instanceof RuntimeException){ + logger.warn(message, ex); + }else{ + logger.error(message, ex); + } + } +} Index: forgon-tools/src/main/java/com/forgon/exception/SystemException.java =================================================================== diff -u --- forgon-tools/src/main/java/com/forgon/exception/SystemException.java (revision 0) +++ forgon-tools/src/main/java/com/forgon/exception/SystemException.java (revision 20154) @@ -0,0 +1,18 @@ +package com.forgon.exception; +/** + * 系统自定义异常 + * @author kzh + * + */ +public class SystemException extends RuntimeException { + + private static final long serialVersionUID = -1174524132605727480L; + + public SystemException(String message){ + super(message); + } + + public SystemException(String message,Throwable cause){ + super(message,cause); + } +} Index: ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml =================================================================== diff -u -r20048 -r20154 --- ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 20048) +++ ssts-web/src/main/resources/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 20154) @@ -2442,5 +2442,8 @@ + + + \ No newline at end of file