Struts 2和Hibernate中的exception处理

假设我们已经在Struts2,Hibernate,MySQL中开发了一个网站,我们在这里添加了一些try/catch块,它们通过Hibernate包含数据库调用。 我的问题是

  1. 在catch块内,我正在向记录器发送适当的消息。 在这里,我们不能使用System.out.println作为其网页,还可以做些什么来提醒用户有关exception的信息?

  2. 作为测试的一部分,我更改了hibernate.cfg.xml并输入了错误的数据库密码,以便模拟数据库崩溃场景。

正如我所料,它引发了错误

  javax.servlet.ServletException: Filter execution threw an exception java.lang.NoClassDefFoundError: com_cenqua_clover/CoverageRecorder my.com.employee.(employee.java:29) com.action.employeeAction.(employeeAction.java:23) sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27) java.lang.reflect.Constructor.newInstance(Constructor.java:513) java.lang.Class.newInstance0(Class.java:355) java.lang.Class.newInstance(Class.java:308) com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:119) com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:150) com.opensymphony.xwork2.ObjectFactory.buildBean(ObjectFactory.java:139) com.opensymphony.xwork2.ObjectFactory.buildAction(ObjectFactory.java:109) com.opensymphony.xwork2.DefaultActionInvocation.createAction(DefaultActionInvocation.java:288) com.opensymphony.xwork2.DefaultActionInvocation.init(DefaultActionInvocation.java:388) com.opensymphony.xwork2.DefaultActionProxy.prepare(DefaultActionProxy.java:187) org.apache.struts2.impl.StrutsActionProxy.prepare(StrutsActionProxy.java:61) org.apache.struts2.impl.StrutsActionProxyFactory.createActionProxy(StrutsActionProxyFactory.java:39) com.opensymphony.xwork2.DefaultActionProxyFactory.createActionProxy(DefaultActionProxyFactory.java:47) org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:478) org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395) note The full stack trace of the root cause is available in the Apache Tomcat/7.0.20 logs. 

从用户的角度来看,这是不可取的,所以如何解决这些问题。 我正在使用Eclipse Juno,Windows XP,MySQL 5.5。

例外是程序或开发人员无法处理exception行为的情况的结果。 在这种情况下,开发人员可以知道抛出exception并可以采取一些措施来解决案例。

普通用户不需要知道任何exception,但系统管理员实际上是这样做的。 因此,记录exception很有可能进一步解决任何问题。

这在开发阶段也很有用,当开发人员需要通过打印堆栈跟踪调试问题时,重新抛出exception。 在这种情况下很少适用于捕获和忽略exception。

在正常情况下,应该捕获,记录和重新抛出exception。 但是在Struts2中,您可以通过创建默认的应用程序拦截器堆栈来处理未捕获的exception

   true ERROR   

将记录此应用程序未捕获的任何exception,然后由全局exception映射处理

     /error_page.jsp  

用户不需要知道开发人员有数据库exception。

应记录特定的exception。 用户应该看到操作失败。 通常,您只需通过正常的S2方式报告此情况,例如错误消息。

您还可以抛出特定于应用程序的exception并使用S2的声明性exception处理。

可以使用声明性exception处理来处理任何或所有低级别exception,但IMO要么过于笼统,要么过于繁琐。