关于一个WEB项目中的异常处理问题。。。。。。。。。。 想问一下,在一个项目中大家都是如何处理异常的。是开发者自己去捕获抛出异常,还是把异常给一个统一的类去处理。在SSH框架中异常是怎么处理的,是在事务层处理?最好说的详细一些。谢谢了 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那现在异常都不用统一类来处理吗,就自己在程序中try catch吗 struts有异常处理模型,只是一般书上都不说而已实际上struts的异常处理个人认识还是非常优雅的,在XML里可以指定不同的异常给不同的处理页面详细用法GOOGLE一下吧 做了个简单的示例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是一个空白的页面,用来表示正常操作 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> MagicDraw.UML.Enterprise 使用 在finalize方法中关闭数据库连接安全么? 不同操作系统页面显示问题 JSF+Hibernate问题 hibernate的关联问题 快来加入J2EE技术讨论群吧32643880 请问下,高手 jdom 处理xml 的汉子问题。 下面的狂简单的语句,就是不对,帮我看看吧!UP有分~~ 定义资源引用的目的何在? Struts2传值问题 长时间等待页面,如何防止页面失效?
实际上struts的异常处理个人认识还是非常优雅的,在XML里可以指定不同的异常给不同的处理页面
详细用法GOOGLE一下吧
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是一个空白的页面,用来表示正常操作
<!-- 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>