多线程问题 sysout(request);//你这个request是如何传进去的? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 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"); 那必然是空指针,requests你又没有注入。 楼主似乎把DownLoadFile 作为了一个servlet。那么你要知道你的run方法现在是在一个新的线程上跑的,而你的doTest方法其实已经结束了。 requests.getParameter("applyNo")楼主注意你的拼写 和上面的 sysout(request);是一个吗 注入?什么意思,get.set吗?能详细说明一下吗?我还是个小白,所以很多都不理解也就是说这个run方法执行无效咯?拼写确实有问题,应该是sysout(requests);sysout(requests.get...); 我的感觉是你的doTest结束了以后,request应该在别的线程中(就是你的run())再使用是有问题的。但是我不知道servlet容器里面是怎么处理的,是不是这个request在doGet或者doPost后就自动失效了? 测试中虽然还能打印到request,但感觉确实是无法使用。 更容易看和说点: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:再次报空指针 }} 测试中虽然还能打印到request,但感觉确实是无法使用。我个人感觉不要这么用多线程,如果非要这样用的话,也要知道怎么封装和保持住request(一次请求应该有各种限制。我个人觉得doGet或者doPost之后这一次请求就告结束)。不建议楼主做这方面的尝试了,先打好基础吧 ssh怎么知道删除实体成不成功? 奇怪的GB18030乱码问题 s2sh开发,启动Tomcat异常 如何成为高级java程序员(讨论) 求一部JAVA神作 dorado技术:dataset.disabledValidators不管用 新人求助 师兄 学哥学姐帮个忙 先谢 JAVA WebService 如何返回DataSet结果集 jqGrid应该能获取到json数据,但是无法显示!求大神指点 hibernate可以实现多表连接操作吗? SSH2 503错误 structs:关于使用超链接调用action的问题
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");
拼写确实有问题,应该是
sysout(requests);
sysout(requests.get...);
测试中虽然还能打印到request,但感觉确实是无法使用。
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:再次报空指针
}
}
测试中虽然还能打印到request,但感觉确实是无法使用。我个人感觉不要这么用多线程,如果非要这样用的话,也要知道怎么封装和保持住request(一次请求应该有各种限制。我个人觉得doGet或者doPost之后这一次请求就告结束)。不建议楼主做这方面的尝试了,先打好基础吧