sysout(request);//你这个request是如何传进去的?

解决方案 »

  1.   


    private HttpServletRequest requests;
    private void setRequests(HttpServletRequest request) {
    this.requests = request;
    }
    response也是这么传的
    而且,在run()方法中,还做了如下操作:
          ServletOutputStream stream = responses.getOutputStream();
         responses.setContentType("application/octet-stream");
         responses.addHeader("Content-Disposition");
      

  2.   

    那必然是空指针,requests你又没有注入。
      

  3.   

    楼主似乎把DownLoadFile 作为了一个servlet。那么你要知道你的run方法现在是在一个新的线程上跑的,而你的doTest方法其实已经结束了。
      

  4.   

    requests.getParameter("applyNo")楼主注意你的拼写
      

  5.   

    和上面的 sysout(request);是一个吗
      

  6.   

    注入?什么意思,get.set吗?能详细说明一下吗?我还是个小白,所以很多都不理解也就是说这个run方法执行无效咯?
    拼写确实有问题,应该是
    sysout(requests);
    sysout(requests.get...);
      

  7.   

    我的感觉是你的doTest结束了以后,request应该在别的线程中(就是你的run())再使用是有问题的。但是我不知道servlet容器里面是怎么处理的,是不是这个request在doGet或者doPost后就自动失效了?
      

  8.   


    测试中虽然还能打印到request,但感觉确实是无法使用。
      

  9.   

    更容易看和说点:public void doTest(HttpServletRequest request, HttpServletResponse response)
                  throws ServletException, IOException {
      DownLoadFile ld = new DownLoadFile();
      sysout(request);//org.apache.catalina.connector.RequestFacade@149f848 
      ld.setRequests(request);
      ld.setResponses(response);
      Thread t = new Thread(ld);
      t.start();
    }public void run() {
      sysout(request);//org.apache.catalina.connector.RequestFacade@149f848 
      sysout(requests.getParameter("applyNo")); //问题1:无法获取,报空指针
      //导出主程序
      try{
        ......
        stream.write(readBytes);//问题2:报Connection reset by peer: socket write error
       ......
      }catch{}
      finally {
        stream.close();//问题3:再次报空指针
      }
    }
      

  10.   


    测试中虽然还能打印到request,但感觉确实是无法使用。我个人感觉不要这么用多线程,如果非要这样用的话,也要知道怎么封装和保持住request(一次请求应该有各种限制。我个人觉得doGet或者doPost之后这一次请求就告结束)。不建议楼主做这方面的尝试了,先打好基础吧