Tomcat - 一个调用两个请求

时间:2013-02-26 18:04:25

标签: java tomcat request

我的应用程序出现了奇怪的问题 我对服务器执行了一次调用。 localhost_access_log.txt

10.8.32.5 - - [26/Feb/2013:16:14:21 +0000] GET /myapp/getfile?file=filename.apk HTTP/1.0 200 404648 578

但是在servlet上我收到了两个延迟302毫秒和不同线程的调用。 MyApp.log

    2013-02-26 16:16:54,751 DEBUG      [MyServlet.java:59] - Download file: filename.apk - [http-bio-8080-exec-1]
2013-02-26 16:16:54,876 DEBUG      [MyServlet.java:117] - Error writing file to output stream. Filename was filename.apk - [http-bio-8080-exec-1] 
2013-02-26 16:16:55,188 DEBUG      [MyServlet.java:59] - Download file: filename.apk - [http-bio-8080-exec-10] 
2013-02-26 16:16:55,642 DEBUG      [MyServlet.java:138] - Call was completed. Result: OK - [Thread-8]

实际上,当你看到第一次调用失败时,在这种情况下我会返回错误代码400

 catch (IOException ex) {
  log.debug("Error writing file to output stream. Filename was {}", fileName);
  handleError(ex, response);
} 



private void handleError(Exception ex, HttpServletResponse response) {
StringBuilder errorMessage = new StringBuilder("You cannot obtain file due to error. ");
errorMessage.append(ex.toString());
try {
  response.sendError(400, errorMessage.toString());
} catch (IOException e) {
  log.error("App cannot write response!");
  log.debug("Error: ", e);
}

}

我添加了新日志并使用wireshark检查了调用

2013-03-04 11:00:06,344 DEBUG [MyServlet.java:59] - 下载文件:filename.apk - [http-bio-8080-exec-69] 2013-03-04 11:00:06,516 DEBUG [MyServlet.java:112] - 将文件写入输出流时出错。文件名是hotvideos-rm-rp1.apk - [http-bio-8080-exec-69] 2013-03-04 11:00:06,516 DEBUG [MyServlet.java:146] - 由于错误导致无法获取文件。 ClientAbortException:java.net.SocketException:软件导致连接中止:套接字写入错误 - [http-bio-8080-exec-69] 2013-03-04 11:00:06,641 DEBUG [MyServlet.java:147] - Stacktrace: - [http-bio-8080-exec-69] org.apache.catalina.connector.ClientAbortException:null     在org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:388)〜[catalina.jar:7.0.35]     在org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:462)〜[tomcat-coyote.jar:7.0.35]     在org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:366)〜[tomcat-coyote.jar:7.0.35]     在org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:413)〜[catalina.jar:7.0.35]     在org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:401)〜[catalina.jar:7.0.35]     在org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:91)〜[catalina.jar:7.0.35]     在org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:1384)〜[commons-io-2.1.jar:2.1]     在org.apache.commons.io.IOUtils.copy(IOUtils.java:1357)〜[commons-io-2.1.jar:2.1]     at MyServlet.downloadFile(MyServlet.java:52)[MyServlet.class:na]     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)〜[na:1.7.0_13]     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)〜[na:1.7.0_13]     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)〜[na:1.7.0_13]     at java.lang.reflect.Method.invoke(Unknown Source)〜[na:1.7.0_13]     在org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:219)[spring-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]     at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)[spring-web-3.2.1.RELEASE.jar:3.2.1.RELEASE]     在org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)[spring-webmvc-3.2.1.RELEASE.jar:3.2.1.RELEASE]     在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:745)[spring-webmvc-3.2.1.RELEASE.jar:3.2.1.RELEASE]     在org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:686)[spring-webmvc-3.2.1.RELEASE.jar:3.2.1.RELEASE]     在org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)[spring-webmvc-3.2.1.RELEASE.jar:3.2.1.RELEASE]     在org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)[spring-webmvc-3.2.1.RELEASE.jar:3.2.1.RELEASE]     在org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)[spring-webmvc-3.2.1.RELEASE.jar:3.2.1.RELEASE]     在org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:920)[spring-webmvc-3.2.1.RELEASE.jar:3.2.1.RELEASE]     在org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:816)[spring-webmvc-3.2.1.RELEASE.jar:3.2.1.RELEASE]     在javax.servlet.http.HttpServlet.service(HttpServlet.java:621)[servlet-api.jar:na]     在org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:801)[spring-webmvc-3.2.1.RELEASE.jar:3.2.1.RELEASE]     在javax.servlet.http.HttpServlet.service(HttpServlet.java:728)[servlet-api.jar:na]     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)[catalina.jar:7.0.35]     在org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)[catalina.jar:7.0.35]     在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)[catalina.jar:7.0.35]     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)[catalina.jar:7.0.35]     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)[catalina.jar:7.0.35]     在org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)[catalina.jar:7.0.35]     在org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)[catalina.jar:7.0.35]     at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)[catalina.jar:7.0.35]     在org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)[catalina.jar:7.0.35]     在org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)[catalina.jar:7.0.35]     在org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)[tomcat-coyote.jar:7.0.35]     at org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java:589)[tomcat-coyote.jar:7.0.35]     at org.apache.tomcat.util.net.JIoEndpoint $ SocketProcessor.run(JIoEndpoint.java:310)[tomcat-coyote.jar:7.0.35]     at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)[na:1.7.0_13]     at java.util.concurrent.ThreadPoolExecutor $ Worker.run(Unknown Source)[na:1.7.0_13]     at java.lang.Thread.run(Unknown Source)[na:1.7.0_13] 引起:java.net.SocketException:软件导致连接中止:套接字写入错误     at java.net.SocketOutputStream.socketWrite0(Native Method)〜[na:1.7.0_13]     在java.net.SocketOutputStream.socketWrite(未知来源)〜[na:1.7.0_13]     at java.net.SocketOutputStream.write(Unknown Source)〜[na:1.7.0_13]     在org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:215)〜[tomcat-coyote.jar:7.0.35]     在org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:462)〜[tomcat-coyote.jar:7.0.35]     在org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:366)〜[tomcat-coyote.jar:7.0.35]     在org.apache.coyote.http11.InternalOutputBuffer $ OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:240)~ [tomcat-coyote.jar:7.0.35]     在org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:93)〜[tomcat-coyote.jar:7.0.35]     在org.apache.coyote.http11.AbstractOutputBuffer.doWrite(AbstractOutputBuffer.java:192)〜[tomcat-coyote.jar:7.0.35]     在org.apache.coyote.Response.doWrite(Response.java:505)〜[tomcat-coyote.jar:7.0.35]     在org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:383)〜[catalina.jar:7.0.35]     ...省略了43个常用帧 2013-03-04 11:00:07,094 DEBUG [MyServlet.java:59] - 下载文件:filename.apk - [http-bio-8080-exec-79] 2013-03-04 11:00:07,485 DEBUG [MyServlet.java:133] - 呼叫已完成。结果:确定 - [Thread-6]

使用wireshark我们看到两次点击但是在localhost-acces日志中我们仍然只看到一个电话

0 个答案:

没有答案