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