我访问Tomcat上简单的JSP页面:我的JSP返回一个202(SC_ACCEPTED)状态,但主叫方得到200(SC_OK)状态
<%@ 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
,我得到了200响应代码而不是预期的202:
$ curl -i "http://localhost:8090/somepath/somefile.jsp"
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: JSESSIONID=52......................AD2; Path=/somepath/; HttpOnly
Content-Type: text/html;charset=ISO-8859-1
Transfer-Encoding: chunked
Date: Mon, 05 Jun 2017 08:09:36 GMT
something
如果我删除的响应内容:
<%@ 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
是否有一些Tomcat配置更改响应代码?
我的实际目标是模拟某些第三方Web API的响应,该响应预计会返回202响应代码+一些成功请求的简短内容字符串。
我的服务器,它会调用这个API,预计202响应。我想我可以将其更改为接受200和202响应,但我希望我的代码与第三方API的文档匹配。
尝试移动3行以上的setStatus()...机会setStatus已被覆盖或忽略。 –
@MinhKieu这实际上工作,谢谢!你可以发布这个答案。任何想法为什么状态被覆盖/忽略? – Eran
我认为flush()可能已经将状态设置为200.一旦设置了它,它就不能被覆盖。我看到的所有例子都是从一开始就设置状态。确认这一点的最好方法是查看编译过的java类。很好,祝你好运。 –