要点:你如何处理jQuery的ajax请求中的服务器端HTTP 4nn/5nn错误?此案例涉及服务器端的JSP/Servlet Web应用程序.在这里,我不是在谈论琐碎的运行时异常,例如NullPointerException等等.假设他们都处理得很好.这种HTTP 4nn/5nn错误的一个很好的例子是401未授权(用户权限不足)和500内部服务器错误(数据库关闭,I/O错误,Errors等).假设他们不能(或不应该)在编码级别被捕获.
现在,我刚刚宣布了<error-page>在web.xml这些类型的错误.它基本上将请求转发到预定义的JSP/HTML错误页面,其中最终用户被告知发生了严重错误,并且用户可以联系xx@xx.xx以获得进一步的帮助.同一页面还显示有关错误/异常的全局详细信息.
它在常规HTTP请求中完美运行,但是如何使用jQuery在XMLHtttp请求中处理它?什么是最好的用户体验?对我来说,它只是显示整个错误页面,就好像它是一个普通的HTTP请求.我解决了它如下:
function init() {
$.ajaxSetup({
error: handleXhrError
});
}
function handleXhrError(xhr) {
document.open();
document.write(xhr.responseText);
document.close();
}
Run Code Online (Sandbox Code Playgroud)
虽然它完美无缺,但我觉得它像黑客一样.用HTTP错误页面的内容替换整个文档.但这也是你会遵循的方式吗?如果没有,你可以详细说明为什么不以及你更喜欢什么方式?我看到的唯一选择是使用JS显示一些警报/消息框以通知用户有关不可解析的错误,但是用户可以将其关闭并继续使用该页面,而这是不可能的.
首先,我的框架是带有JSF,托管bean,EJB和JPA的Java EE 6.我编写了一个简单的程序来查询数据库中的信息.因此,当我单击一个按钮时,它会触发一个事件到托管bean,其中事件侦听器方法将访问EJB方法.EJB方法将对select实体进行简单查询.如果数据库在I之前或期间关闭select,我会收到异常
Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.0.1.v20100213-r6600): org.eclipse.persistence.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 51,460 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.
Error Code: 0
Run Code Online (Sandbox Code Playgroud)
如何防止此异常?肯定是try, catch在这里,但不知道在哪里放.当我em.createNamedQuery还是em.remove,我试图抓住com.mysql.jdbc.exceptions.jdbc4.CommunicationsException,但我得到了一个错误说:Exception com.mysql.jdbc.exceptions.jdbc4.CommunicationsException is never thrown in body of corresponding try statement.
以下是我的代码,我会在哪里捕获异常?
这是我的 EJB
@Stateless
@LocalBean
public class DocumentSBean {
@PersistenceContext …Run Code Online (Sandbox Code Playgroud)