想问一下,在一个项目中大家都是如何处理异常的。是开发者自己去捕获抛出异常,还是把异常给一个统一的类去处理。在SSH框架中异常是怎么处理的,是在事务层处理?最好说的详细一些。谢谢了

解决方案 »

  1.   

    那现在异常都不用统一类来处理吗,就自己在程序中try catch吗
      

  2.   

    struts有异常处理模型,只是一般书上都不说而已
    实际上struts的异常处理个人认识还是非常优雅的,在XML里可以指定不同的异常给不同的处理页面
    详细用法GOOGLE一下吧
      

  3.   

    做了个简单的示例
    struts.xml<?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
        "http://struts.apache.org/dtds/struts-2.0.dtd">
    <struts>
    <constant name="struts.objectFactory" value="spring" />
    <constant name="struts.i18n.encoding" value="utf-8" />
    <constant name="struts.custom.i18n.resources" value="global,struts" />
    <constant name="struts.action.extension" value=",do,action" ></constant>

    <package name="myPkg" extends="struts-default">
    <!-- 定义两种错误的转向 -->
    <global-results>
    <result name="ex1">/ex1.jsp</result>
    <result name="ex2">/ex2.jsp</result>
    </global-results>
    <!-- 定义两种假设的异常 -->
    <global-exception-mappings>
    <exception-mapping result="ex1" exception="java.lang.ClassNotFoundException"></exception-mapping>
    <exception-mapping result="ex2" exception="java.lang.ClassCastException"></exception-mapping>
    </global-exception-mappings>
    </package>

    <package name="my" extends="myPkg" namespace="/">
    <global-results>
    <result name="success">/ok.jsp</result>
    </global-results>
    <!-- 1和2是假设的异常 -->
    <action name="myDoing_1" class="testAction" method="myDoing_1"/>
    <action name="myDoing_2" class="testAction" method="myDoing_2"/>
    <!-- 3返回一个正常的转向 -->
    <action name="myDoing_3" class="testAction" method="myDoing_3"/>
    </package>
    </struts>
    TestAction:import com.opensymphony.xwork2.ActionSupport;public class TestAction extends ActionSupport {
    public String myDoing_1() throws ClassNotFoundException {
    if(true)
    throw new java.lang.ClassNotFoundException();

    return SUCCESS;
    }

    public String myDoing_2() throws ClassCastException {
    if(true)
    throw new java.lang.ClassCastException();

    return SUCCESS;
    }

    public String myDoing_3() {
    return SUCCESS;
    }
    }spring配置<?xml version="1.0" encoding="UTF-8"?>
    <beans
    xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> <bean id="testAction" class="com.mo2.web.rsms.action.TestAction" />

    </beans>
    测试的页面
    test.html<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
    <title>test.html</title>
    <meta http-equiv="keywords" content="enter,your,keywords,here" />
    <meta http-equiv="description" content="A short description of this page." />
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" />

    <!--<link rel="stylesheet" type="text/css" href="styles.css">-->
    </head>
    <body>
    <p>
    第一个测试,返回ClassNotFoundException异常<br/>
    <a href="myDoing_1.action">第一个测试</a>
    </p>
    <p>
    第二个测试,返回ClassCastException异常<br/>
    <a href="myDoing_2.action">第二个测试</a>
    </p>
    <p>
    第三个测试,返回正常<br/>
    <a href="myDoing_3.action">第三个测试</a>
    </p>
    </body>
    </html>ex1.jsp<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        
        <title>My JSP 'ex1.jsp' starting page</title>
        
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->  </head>
      
      <body>
        异常的返回页面 1
      </body>
    </html>ex2.jsp
    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    <%@ taglib prefix="s" uri="/struts-tags" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
      <head>
        
        <title>My JSP 'ex1.jsp' starting page</title>
        
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">    
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->  </head>
      
      <body>
        异常的返回页面2
      </body>
    </html>
    OK.jsp是一个空白的页面,用来表示正常操作
      

  4.   

    spring的AOP配置
    <!-- aop 配置 -->
    <aop:config>
    <!-- 定义由哪一个业务类来管理 -->
    <aop:aspect ref="log">
    <!-- 定义一个切面 -->
    <aop:pointcut id="mycut" expression="execution(* com.xx.oa.service.*.*.*.*(..))"/>
                <!-- 方法正常执行完成之后 -->
                <aop:after-returning pointcut-ref="mycut" method="afterReturn"  returning="obj"/> 
                <!-- 方法异常 -->
                <aop:after-throwing pointcut-ref="mycut" method="doThrowing" throwing="ex"/>    
    </aop:aspect>
    </aop:config>
    <bean id="log" class="com.boxun.crm.log.LogAop"></bean>