我正在编写我的第一个JAVA servlet,我有一个问题。
说我的servlet将从Google Web Toolkit(AJAX)中调用可能很重要
我做的第一件事是创建PrintWriter并开始在其中写入我的JSON输出
PrintWriter out = response.getWriter();
...
out.println("[");
out.println(" {");
out.println(" \"validation\" : {");
...
但如果同时我得到一个错误条件会发生什么?
将错误返回给客户端的正确方法是什么? (AJAX客户端)
我是否必须缓冲输出(如何?)并将错误返回为JSON(而不是输出) 要么 我必须抛出ServletException?
答案 0 :(得分:2)
正如@McDowell所说,在servlet中请求处理期间处理错误的正确方法是在响应对象中设置HTTP状态代码。
但是有一个问题。
HTTP状态代码实际上是在HTTP响应的第一行传递的。当响应“已提交”时会写入,这通常在您致电response.getOutputStream()
或response.getWriter()
时发生。之后,您无法更改状态代码。
处理它的方法是执行以下操作之一:
答案 1 :(得分:2)
使用例如StringBuilder
在内存中构建字符串。在完成字符串构建之前,不要将任何字符写入响应。那是“缓冲”。
StringBuilder builder= new StringBuilder();
builder.append("[");
builder.append(" {");
builder.append(" \"validation\" : {");
// ...
// When finished:
response.getWriter().write(builder.toString());
当某些内容同时失败时,要么抛出ServletException
(最终会在状态码为500的服务器默认错误页面中),要么使用HttpServletResponse#sendError()
发送更具体的错误状态。但通常情况下,状态码500足以使XMLHttpRequest
客户端在服务器端出现故障。
try {
// Build and write JSON.
} catch (Exception e) {
throw new ServletException(e);
}
答案 2 :(得分:1)
请参阅HTTP status codes。您可以使用HttpServletResponse.setStatus来设置响应状态(还要注意该类定义的常量)。