2012-06-26 8 views
0

요청이 실패했을 때 단순히 클라이언트에 오류를 다시 보내려고합니다.IllegalStateException : HttpServlet.service의 null

response.sendError(HttpServletResponse.SC_BAD_REQUEST, 
     "Email and username are required fields."); 

이 코드는 다음과 같은 오류가 발생합니다 :

java.lang.IllegalStateException: null 
    at org.apache.catalina.connector.ResponseFacade.sendError(ResponseFacade.java:407) ~[catalina-6.0.26.jar:6.0.26] 
    at com.****.****.****.*********Servlet.service(********Servlet.java:68) ~[********Servlet.class:na] 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:717) ~[javaee-api-5.1.2.jar:5.1.2] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290) ~[catalina-6.0.26.jar:6.0.26] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) ~[catalina-6.0.26.jar:6.0.26] 
    at org.red5.logging.LoggerContextFilter.doFilter(LoggerContextFilter.java:78) ~[red5.jar:na] 
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) ~[catalina-6.0.26.jar:6.0.26] 
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) ~[catalina-6.0.26.jar:6.0.26] 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) ~[catalina-6.0.26.jar:6.0.26] 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) [catalina-6.0.26.jar:6.0.26] 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:465) [catalina-6.0.26.jar:6.0.26] 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) [catalina-6.0.26.jar:6.0.26] 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) [catalina-6.0.26.jar:6.0.26] 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:555) [catalina-6.0.26.jar:6.0.26] 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) [catalina-6.0.26.jar:6.0.26] 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298) [catalina-6.0.26.jar:6.0.26] 
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852) [tomcat-coyote-6.0.26.jar:6.0.26] 
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) [tomcat-coyote-6.0.26.jar:6.0.26] 
    at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) [tomcat-coyote-6.0.26.jar:6.0.26] 

가 왜 여기에 슬로우됩니다 여기 내 코드가 어떻게 생겼는지입니까? 이 호출 전에는 아무 것도하지 않고 응답 객체와 관련이 있습니다. if 절에서이 오류가 전송 될 때까지는 아무 것도하지 않습니다. 이 오류가 발생하는 이유는 무엇입니까?

+0

'sendError'를 호출하기 전에 클라이언트에 다른 데이터를 보냈습니까? –

+0

아니요. 아무 데이터도, 나는'응답'객체를 만지지 않고있다. –

+0

누군가는'super()'를 호출하지 말라고 말합니다 ... –

답변

2

(ResponseFacade에 의해 구현 된) HttpServletResponse가 IllegalStateException을 throw하는 유일한 이유는 응답이 이미 커밋 된 것입니다. 이미 누군가가 만져봤을 것입니다.

0

ResponseFacade가 response.sendError()을 덮어 쓰지 않거나 오류 페이지로 전달하게되면 오류 페이지로 전달하기 전에 응답이 커밋되기 때문에 문제가 발생합니다.

는이 문제를
  • 당신이 응답
  • 최대 버퍼 크기에 도달했기 때문에 응답이 자동으로 투입되는 경우, 버퍼 크기를 늘려보십시오 플러싱하지 있는지 확인를 해결하려면.
관련 문제