servlet的DOGET如下
public class servlet extends HttpServlet {
private HttpClient client =new HttpClient();public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
String sendback =null;
GetMethod get = new GetMethod("myurl");
get.getParams().setParameter("http.protocol.cookie-policy",CookiePolicy.BROWSER_COMPATIBILITY);
get.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler());
get.setRequestHeader("User-Agent","Mozilla/4.0 (compatible; MSIE 6.0; Windows 2000)");
try{
client.executeMethod(get);
get.releaseConnection();
sendback = "responseString";
}catch(Exception e){
sendback="exception";
System.out.println(e.getMessage());
e.printStackTrace();
}finally{
if(get != null){
get.releaseConnection();
}
}

out.println(sendback);
out.close();
}
}跟着我访问服务,并不停地按ctrl+f5强刷,只要快速按3 4次,就必然出错.出错的地方是client.executeMethod(get);警告: SimpleHttpConnectionManager being used incorrectly.  Be sure that HttpMethod.releaseConnection() is always called and that only one thread and/or method is using this connection manager at a time.
Stream closed
Exception
java.io.IOException: Stream closed
at java.io.BufferedInputStream.getBufIfOpen(Unknown Source)
at java.io.BufferedInputStream.read(Unknown Source)
at org.apache.commons.httpclient.HttpParser.readRawLine(HttpParser.java:78)
at org.apache.commons.httpclient.HttpParser.readLine(HttpParser.java:106)
at org.apache.commons.httpclient.HttpConnection.readLine(HttpConnection.java:1116)
at org.apache.commons.httpclient.HttpMethodBase.readStatusLine(HttpMethodBase.java:1973)
at org.apache.commons.httpclient.HttpMethodBase.readResponse(HttpMethodBase.java:1735)
Stream closed
at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1098)
at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398)
at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
at servlet.doGet(servlet.java:60)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
Exception
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:852)
at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:584)
at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1508)
at java.lang.Thread.run(Unknown Source)
刚刚来公司,老大催得比较急,求帮助,谢谢=,=

解决方案 »

  1.   

    private HttpClient client =new HttpClient();这个成员有问题。典型的servlet陷阱。servlet是单实例的,所以如果你不想在每次用户访问这个servlet时都共用一个对象就别把对象放在servlet的属性中。请把HttpClient client =new HttpClient();移到doget中。
      

  2.   

    对,在doGet申明HttpClient对象实例!
      

  3.   

    哦哦,好的,在doGet申明HttpClient对象实例然后用session来维持登录状态实现了 谢谢大家