Java 我的JSP返回202(SC_接受)状态,但调用者得到200(SC_确定)状态

Java 我的JSP返回202(SC_接受)状态,但调用者得到200(SC_确定)状态,java,jsp,http,tomcat,http-response-codes,Java,Jsp,Http,Tomcat,Http Response Codes,我正在访问Tomcat上的一个简单JSP页面: <%@ page import = "java.io.Writer" %> <% try { Writer outWriter = response.getWriter (); outWriter.write ("something"); outWriter.flush (); response.setStatus (HttpServletResponse.SC_ACCEPTED); } catch

我正在访问Tomcat上的一个简单JSP页面:

<%@ page import = "java.io.Writer" %>
<%
try {
    Writer outWriter = response.getWriter ();
    outWriter.write ("something");
    outWriter.flush ();
    response.setStatus (HttpServletResponse.SC_ACCEPTED);
}
catch (Throwable t) {
  response.sendError (HttpServletResponse.SC_BAD_REQUEST, t.getMessage ());
}%>
如果我从响应中删除内容:

<%@ page import = "java.io.Writer" %>
<%
try {
    //Writer outWriter = response.getWriter ();
    //outWriter.write ("something");
    //outWriter.flush ();
    response.setStatus (HttpServletResponse.SC_ACCEPTED);
}
catch (Throwable t) {
  response.sendError (HttpServletResponse.SC_BAD_REQUEST, t.getMessage ());
}%>
是否存在更改响应代码的Tomcat配置

我的实际目标是模拟一些第三方web API的响应,对于成功的请求,这些API将返回202响应代码+一些短内容字符串


我的服务器将调用此API,它需要202响应。我想我可以将其更改为接受200和202响应,但我希望我的代码与第三方API的文档相匹配。

将setStatus移到JSP的顶部。查看已编译的JSP以了解编译器是如何编写代码的。一旦设置了状态,它就不能被覆盖。刷新方法可能已将状态设置为200。

尝试将设置状态移到3行上方…设置状态可能已被覆盖或忽略。@MinhKieu这确实有效,谢谢!您可以将此作为答案发布。知道为什么状态被覆盖/忽略了吗?我想刷新可能已经将状态设置为200。一旦它被设置,它就不能被覆盖。我看到的所有例子都是从一开始就设定状态的。确认这一点的最佳方法是查看编译后的java类。很好,祝你好运。编译后的类看起来像原始代码,因此这无助于理解原因。但是,我在ServletResponse.getWriter的文档中发现,在PrintWriter上调用flush会提交响应,这可能意味着在调用flush之后,响应不能以任何方式更改。
<%@ page import = "java.io.Writer" %>
<%
try {
    //Writer outWriter = response.getWriter ();
    //outWriter.write ("something");
    //outWriter.flush ();
    response.setStatus (HttpServletResponse.SC_ACCEPTED);
}
catch (Throwable t) {
  response.sendError (HttpServletResponse.SC_BAD_REQUEST, t.getMessage ());
}%>
$ curl -i "http://localhost:8090/somepath/somefile.jsp"
HTTP/1.1 202 Accepted
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=52......................AD2; Path=/somepath/; HttpOnly
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 2
Date: Mon, 05 Jun 2017 08:12:57 GMT