1

嗨,我对 Java Servlet 还很陌生。我想确保服务器端代码的执行没有异常,即我想检查服务器代码上是否抛出任何异常。如何使用我得到的响应来确定?

谢谢

4

3 回答 3

1

如果您从 servlet 获取内容,则没有未处理的异常。如果您想获取已处理异常的信息,请将它们记录在其catch子句中。

于 2013-06-13T18:31:32.730 回答
1

因为,Servlet 在服务器端执行,它是服务器端代码决定是否应该让客户端知道exception。除非没有处理异常(在 servlet 代码中)并且没有为 Web 应用程序设置错误页面(不推荐这两种方法),否则客户端不会自动知道它。

理想情况下,客户永远不应该知道确切的exception. 相反,客户端应该只收到一条正确的错误消息,说明当前请求为何无法成功处理。

错误详细信息应在需要知道的基础上共享。例如,如果输入验证失败,则在错误消息中包含无效字段的名称是有意义的。改为显示 a 是不合适的NumberFormatException(例如,因为客户输入的年龄不是数字)。

编辑
这里没有一种正确的方法。根据您的 Web 应用程序希望对客户端的错误进行多少描述,您可以采用多种方法。

如果您只需要通过可以使用的简短错误描述让客户端知道发生了错误sendError()(在幕后会自动将 HTTP 状态标头设置为错误代码,例如下面的400 Bad Request

if (request.getParameter("id") == null)
    response.sendError(response.SC_BAD_REQUEST, "ID parameter missing");

其他方法包括<error-pages>为您配置web.xml不同的错误代码或异常。容器将负责自动转发到.jsp下面配置的文件。

<error-page>
  <error-code>404</error-code>
  <location>/error404.jsp</location>
</error-page>

<error-page>
  <exception-type>java.lang.Exception</error-code>
  <location>/errorPage.jsp</location>
</error-page>

JSP 需要将其isErrorPage属性设置true为接收隐式exception对象以获取有关异常的更多信息。例如,exception.getMessage()可用于(在某些情况下)生成要显示给用户的错误消息。

客户端

客户端不需要做任何特殊的事情(比如 getError())来接收错误。客户端仍将接收由浏览器呈现的 HTML,就像请求成功但由于它没有成功一样,客户端将收到格式为 HTML 的错误消息(甚至view > source可以)。

发送的 HTML 取决于您使用的是sendError()(它将从您的 Web 服务器(如 Tomcat)发送标准错误响应)还是您自己配置的<error-page>JSP,在这种情况下您可以完全控制您的 HTML 错误模板。

于 2013-06-13T19:16:05.613 回答
0

使用 log4j 捕获您的异常(使用 try catch 块),但如果这是您正在做的某种家庭作业,那么这可能是您可以根据 http 返回码进行检查的一种方法。你可以使用 jquery http://jquery.com/。这是 404 错误的示例代码。此页面还包含所有http 错误代码及其含义。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
<script>
   $(function() {
      var urlPath = "some_url";
      $.ajax(urlPath,
      {
         statusCode: {
         404: function() {
            alert('page not found');
         }
      }
   });   
});
</script>
于 2013-06-13T18:50:18.093 回答