gpt4 book ai didi

java - httpsservelet 响应未返回 sendError 状态代码

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:44:24 26 4
gpt4 key购买 nike

我正在尝试确定为什么最初在处理过程中抛出异常的网络服务器响应;然后返回 200 OK 客户端。详情如下:

  • 请求从网络应用程序发送到网络服务器,如果发生错误,则会捕获异常并返回相关代码和/或消息,如下所示:

     public void dispatchRequest(HttpServletRequest req, HttpServletResponse 
    res)
    {
    if (method.equalsIgnoreCase("get")) {
    doGet(req, res);
    } else {
    res.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED);
    return;
    }

    }

    void doGet(HttpServletRequest request, HttpServletResponse response)
    throws
    IOException,
    HTTPServerException {
    handleGetClient(request, response);

    }


    @SuppressWarnings("unchecked")
    private void handleGetClient(HttpServletRequest request,
    HttpServletResponse
    response)
    throws IOException, HTTPServerException {

    ...

    } catch (IOException e) {
    logger("I/O Error during playback with parameters (additional
    parameters logged) {0}: {1}",traceParams,e.toString());
    logger(Level.FINER, "I/O Error during playback with parameters {0}:
    {1}", parameters, e.getMessage());
    logger(Level.FINER, "I/O Error during playback with parameters {0}:
    {1}", parameters, e);
    sendError(response, HttpServletResponse.SC_INTERNAL_SERVER_ERROR);


    ...

    }


    protected void sendError(HttpServletResponse response, int errCode) {

    response.setContentType("text/plain");

    try {
    response.sendError(errCode,"ERROR");

    } catch (IOException e1) {
    // TODO Auto-generated catch block
    e1.printStackTrace();
    }


    }

handleGetClient 方法处理该过程,并在发生错误时抛出被捕获的异常。然后该方法使用 sendError 方法设置返回的错误代码,在日志调试时我可以看到它被设置为这个特定错误 (500)。但是一旦调用返回到 dispatchRequest 方法,httpservletResponse 状态实际上是 (200)。我看不出这发生在哪里以及为什么。最初我以为我可以将方法更改为 int 以返回错误代码,但我只能对此代码进行更改。

有什么想法吗?

最佳答案

您可以尝试以下方法之一:

response.resetBuffer ();
response.setStatus (HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
response.flushBuffer ();

或者如果您有一个与 web.xml 中的 500 代码匹配的错误页面:

response.reset ();
response.setError (HttpServletResponse.SC_INTERNAL_SERVER_ERROR);

对于任何一般错误,您还可以考虑使用异常映射器,这样您就可以抛出一个异常来处理状态代码返回,而不是自行处理错误代码。

即:throw new InternalServerException ("Your message");

关于java - httpsservelet 响应未返回 sendError 状态代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50988042/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com