【问题标题】:NullPointerException being masked as an HTTP 405 errorNullPointerException 被屏蔽为 HTTP 405 错误
【发布时间】:2013-11-11 23:14:23
【问题描述】:

问题: 我在服务器端有一些代码会生成空指针异常。通常这会导致 HTTP 500 错误代码,并且我的该代码的默认错误页面被调用。无论出于何种原因,该错误都会作为 405 错误显示给浏览器(不允许使用方法)。

UserNode userNode= UserGraph.getNode(adjacencyList.get(i)); // This list is empty

我已经解决了空指针的原因,但是为什么 Apache Tomcat 将其屏蔽为 405 而不是 500 异常?

问题:空指针异常会导致 HTTP 405 错误的常见原因有哪些?

【问题讨论】:

  • 我想不到。这听起来错误
  • 我支持你。 405 错误仅在适用于其他所有用户的页面上为一个用户生成。基本上,用户不再出现在图表中。
  • 您的默认错误页面是否使用 servlet 实现?如果您有一个仅实现 doGet() 的错误处理 servlet 并且异常发生在另一个 servlet 的 doPost() 方法中,则可能会发生此行为。
  • 好主意的人。我现在正在调查!!!
  • @DavidLevesque 这确实是问题所在。如果您不想将其发布为答案,我会以防万一其他人遇到此问题。

标签: http tomcat servlets


【解决方案1】:

如果您有一个仅实现 doGet() 的错误处理 servlet,并且异常发生在另一个 servlet 的 doPost() 方法中(反之亦然),则可能会发生此行为。

【讨论】:

  • 太棒了。从答案中可能已经很明显了,但为了完整起见。其他 http 请求类型(doDeletedoPut、...)也存在同样的问题。
【解决方案2】:

您的环境中的任何 web.xml 文件中是否有错误映射?如果有,tomcat 可能会尝试获取代码 500 的错误页面,但这样做会导致它返回 405。

【讨论】:

    【解决方案3】:

    基于 David Levesque 的回答:错误处理 servlet 的最佳方案是覆盖 javax.servlet.http.HttpServlet 的 service(HttpServletRequest req, HttpServletResponse resp) 方法。

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
         // your code to handle all types of requests: GET, POST, PUT, etc. 
    }
    

    【讨论】:

      猜你喜欢
      • 2013-11-25
      • 2011-04-10
      • 2016-01-19
      • 2017-06-04
      • 1970-01-01
      • 2022-01-14
      • 1970-01-01
      • 2018-09-16
      • 2014-11-23
      相关资源
      最近更新 更多