1 30 31 package org.apache.commons.httpclient.server; 32 33 import java.io.IOException ; 34 import java.io.InterruptedIOException ; 35 36 import org.apache.commons.logging.Log; 37 import org.apache.commons.logging.LogFactory; 38 39 45 public class SimpleConnectionThread extends Thread { 46 47 private static final Log LOG = LogFactory.getLog(SimpleConnectionThread.class); 48 49 public static final String DEFAULT_CONTENT_CHARSET = "ISO-8859-1"; 50 51 private SimpleHttpServerConnection conn = null; 52 private SimpleConnSet connpool = null; 53 private HttpRequestHandler handler = null; 54 transient boolean stopped; 55 56 public SimpleConnectionThread( 57 final ThreadGroup tg, 58 final String name, 59 final SimpleHttpServerConnection conn, 60 final SimpleConnSet connpool, 61 final HttpRequestHandler handler) 62 throws IOException { 63 super(tg, name); 64 if (conn == null) { 65 throw new IllegalArgumentException ("Connection may not be null"); 66 } 67 if (connpool == null) { 68 throw new IllegalArgumentException ("Connection pool not be null"); 69 } 70 if (handler == null) { 71 throw new IllegalArgumentException ("Request handler may not be null"); 72 } 73 this.conn = conn; 74 this.connpool = connpool; 75 this.handler = handler; 76 this.stopped = false; 77 } 78 79 public synchronized void destroy() { 80 if (this.stopped) { 81 return; 82 } 83 this.stopped = true; 84 if (conn != null) { 85 conn.close(); 86 conn = null; 87 } 88 interrupt(); 89 } 90 91 public void run() { 92 try { 93 do { 94 this.conn.setKeepAlive(false); 95 SimpleRequest request = this.conn.readRequest(); 96 if (request != null) { 97 this.handler.processRequest(this.conn, request); 98 } 99 } while (this.conn.isKeepAlive()); 100 } catch (InterruptedIOException e) { 101 } catch (IOException e) { 102 if (!this.stopped && !isInterrupted() && LOG.isWarnEnabled()) { 103 LOG.warn("[" + getName() + "] I/O error: " + e.getMessage()); 104 } 105 } finally { 106 destroy(); 107 this.connpool.removeConnection(this.conn); 108 } 109 } 110 111 } 112 113 | Popular Tags |