Struts 2和Hibernate中的exception处理
假设我们已经在Struts2,Hibernate,MySQL中开发了一个网站,我们在这里添加了一些try/catch
块,它们通过Hibernate包含数据库调用。 我的问题是
-
在catch块内,我正在向记录器发送适当的消息。 在这里,我们不能使用
System.out.println
作为其网页,还可以做些什么来提醒用户有关exception的信息? -
作为测试的一部分,我更改了
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要么过于笼统,要么过于繁琐。
- 在Hadoop 2上运行作业时无法初始化集群exception
- 你能弄清楚为什么这个程序会触发IllegalStateException吗?
- java.lang.IllegalStateException:在servlet中提交响应后无法转发
- 如何在JSP页面中打印错误堆栈跟踪?
- RestEasy – 无法找到MessageBodyReader?
- java.lang.ClassNotFoundException:org.apache.log4j.Level
- AsycTask抛出IllegalStateException – 片段未附加到活动
- 为什么我不能在Java 8 lambda表达式中抛出exception?
- 如何使用java配置和没有Web.xml处理Spring MVC中的404页面未找到exception