org.apache.catalina.connector.ClientAbortException: java.io.IOException: 远程主机强迫关闭了一个现有的连接。
at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:322)
at org.apache.catalina.connector.OutputBuffer.flush(OutputBuffer.java:285)
at org.apache.catalina.connector.CoyoteOutputStream.flush(CoyoteOutputStream.java:118)
at com.fasterxml.jackson.core.json.UTF8JsonGenerator.flush(UTF8JsonGenerator.java:1044)
at com.fasterxml.jackson.databind.ObjectWriter.writeValue(ObjectWriter.java:854)
at org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter.writeInternal(AbstractJackson2HttpMessageConverter.java:286)
at org.springframework.http.converter.AbstractGenericHttpMessageConverter.write(AbstractGenericHttpMessageConverter.java:106)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodProcessor.writeWithMessageConverters(AbstractMessageConverterMethodProcessor.java:231)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.handleReturnValue(RequestResponseBodyMethodProcessor.java:174)
at org.springframework.web.method.support.HandlerMethodReturnValueHandlerComposite.handleReturnValue(HandlerMethodReturnValueHandlerComposite.java:81)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:113)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:827)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:738)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:967)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:901)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:970)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:861)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:635)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:846)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:742)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.alibaba.druid.support.http.WebStatFilter.doFilter(WebStatFilter.java:123)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:197)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:199)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:137)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:660)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:798)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.io.IOException: 远程主机强迫关闭了一个现有的连接。
at sun.nio.ch.SocketDispatcher.write0(Native Method)
at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:51)
at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:93)
at sun.nio.ch.IOUtil.write(IOUtil.java:65)
at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:471)
at org.apache.tomcat.util.net.NioChannel.write(NioChannel.java:134)
at org.apache.tomcat.util.net.NioBlockingSelector.write(NioBlockingSelector.java:101)
at org.apache.tomcat.util.net.NioSelectorPool.write(NioSelectorPool.java:157)
at org.apache.tomcat.util.net.NioEndpoint$NioSocketWrapper.doWrite(NioEndpoint.java:1306)
at org.apache.tomcat.util.net.SocketWrapperBase.doWrite(SocketWrapperBase.java:731)
at org.apache.tomcat.util.net.SocketWrapperBase.flushBlocking(SocketWrapperBase.java:684)
at org.apache.tomcat.util.net.SocketWrapperBase.flush(SocketWrapperBase.java:674)
at org.apache.coyote.http11.Http11OutputBuffer$SocketOutputBuffer.flush(Http11OutputBuffer.java:646)
at org.apache.coyote.http11.filters.ChunkedOutputFilter.flush(ChunkedOutputFilter.java:169)
at org.apache.coyote.http11.Http11OutputBuffer.flush(Http11OutputBuffer.java:252)
at org.apache.coyote.http11.Http11Processor.flush(Http11Processor.java:1560)
at org.apache.coyote.AbstractProcessor.action(AbstractProcessor.java:399)
at org.apache.coyote.Response.action(Response.java:206)
at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:318)
... 49 common frames omitted
做毕业设计实现打印的时候出了一个问题,求打什么看一看。
下面是后台代码service层 public OutboundOrder getOutOrderInfo(int id, int num, String pur, HttpServletRequest request){
        //获得经办人
        SysUser user = (SysUser) request.getSession().getAttribute("user");        SysProduct product = productMapper.selectByPrimaryKey(id);
        product.setNumber(product.getNumber()-num);
        String totalPrice =String.valueOf (((product.getUnitprice()).doubleValue())*num);
        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//设置日期格式
        OutboundOrder outboundOrder  =  OutboundOrder.builder().id(IDUtil.getShortUniqueId()).productId(id).productName(product.getName())
                .unitPrice(product.getUnitprice().toString()).number(num).totalPrice(totalPrice).outboundOrderTime(df.format(new Date())).purchaser(pur)
                .userId(user.getUserid()).userName(user.getUsername()).build();        //插入出库单表
        SysOutHouse sysOutHouse = SysOutHouse.builder().orderid(IDUtil.getShortUniqueId()).goodsid(id).number(num).operatorid(user.getUserid()).place(pur).time(new Date())
                .unitprice(product.getUnitprice()).totalprice(new BigDecimal(totalPrice)).build();
        sysOutHouseMapper.insertSelective(sysOutHouse);        //修改库存
        productMapper.updateByPrimaryKeySelective(product);        return  outboundOrder;
    }
controller层
 @RequestMapping("getOrderInfo.json")
    @ResponseBody
    public JsonData getOrderInfo(@RequestParam("id") String id, @RequestParam("number") String number, @RequestParam("purchse")String purchse, HttpServletRequest request){
        OutboundOrder outboundOrder =  productService.getOutOrderInfo(Integer.parseInt(id),Integer.parseInt(number),purchse,request);
        return JsonData.success(outboundOrder);
    }下面是前端代码
function printit(){
        if(confirm('确认打印吗?')){
            $.ajax({
                url:'/sys/product/getOrderInfo.json',
                data:{
                    id:$('#productId').val(),
                    number:$('#num').val(),
                    purchse:$('#purchse').val()
                },
                success:function (result) {
                    document.getElementById('btnPr').style.display="none";//隐藏
                    $('#orderId').attr("value",result.data["id"]);
                    $('#productId').attr("value",result.data["productId"]);
                    $('#productName').attr("value",result.data["productName"]);
                    $('#productNumber').attr("value",result.data["number"]);
                    $('#unitPrice').attr("value",result.data["unitPrice"]);
                    $('#totalPrice').attr("value",result.data["totalPrice"]);
                    $('#outTime').attr("value",result.data["outboundOrderTime"]);
                    $('#pur').attr("value",result.data["purchaser"]);
                    $('#username').attr("value",result.data["userName"]);
                    document.getElementById("numberBtn").style.display="none";
                    document.getElementById('order').style.display="inline";
                    window.print();//打印
                    document.getElementById('btnPr').style.display="inline";//显示*/
                },
                fail: function () {
                    alert("系统错误")
                }
            });我注释掉service层的后面两条sql的时候,就不报错了,但是打了断点看了,sql语句没问题,数据库也插入了数据,所以sql正常运行了,报错是在返回的时候,返回的对象也没问题,因为两条sql对返回的对象没影响,而注释掉两条sql可以正常运行,我怀疑是,在服务器返回的时候,客户端已经关闭连接,所以报错,在网上看了一下说是设置tomact超时时间,但是没效果,求大神帮忙解决,感激不尽!!!

解决方案 »

  1.   

    问题已解决,在ajax里设置一个请求超时的时间
     function printit(){        if(confirm('确认打印吗?')){
                $.ajax({
                    url:'/sys/product/getOrderInfo.json',
                    timeout:5000,
                    data:{
                        id:$('#productId').val(),
                        number:$('#num').val(),
                        purchse:$('#purchse').val()
                    },
                    success:function (result) {