From: Greg W. <gre...@us...> - 2005-04-27 15:39:11
|
User: gregwilkins Date: 05/04/27 08:39:03 Modified: src/org/mortbay/jetty HttpConnection.java HttpGenerator.java HttpParser.java HttpFields.java Response.java Request.java ResourceCache.java Added: src/org/mortbay/jetty mime.properties HttpContent.java MimeTypes.java encoding.properties Log: Default servlet and resource cache working! Revision Changes Path 1.5 +18 -3 JettyExperimental/src/org/mortbay/jetty/HttpConnection.java Index: HttpConnection.java =================================================================== RCS file: /cvsroot/jetty/JettyExperimental/src/org/mortbay/jetty/HttpConnection.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -w -r1.4 -r1.5 --- HttpConnection.java 23 Apr 2005 22:13:09 -0000 1.4 +++ HttpConnection.java 27 Apr 2005 15:39:02 -0000 1.5 @@ -529,6 +529,7 @@ write(_buf1); } + /* ------------------------------------------------------------ */ private void write(Buffer buffer) throws IOException { @@ -564,11 +565,25 @@ if (_generator.getContentAdded()>0) Portable.throwIllegalState("!empty"); - if (content instanceof Buffer) + if (content instanceof HttpContent) + { + HttpContent c = (HttpContent)content; + if (c.getContentType()!=null && !_responseFields.containsKey(HttpHeaders.CONTENT_TYPE_BUFFER)) + _responseFields.add(HttpHeaders.CONTENT_TYPE_BUFFER, c.getContentType()); + if (c.getContentLength()>0) + _responseFields.addLongField(HttpHeaders.CONTENT_LENGTH_BUFFER, c.getContentLength()); + if (c.getLastModified()!=null) + _responseFields.add(HttpHeaders.LAST_MODIFIED_BUFFER, c.getLastModified()); + if (c.getBuffer()!=null) + _generator.addContent(c.getBuffer(),HttpGenerator.LAST); + commitResponse(HttpGenerator.LAST); + } + else if (content instanceof Buffer) { _generator.addContent((Buffer)content,HttpGenerator.LAST); commitResponse(HttpGenerator.LAST); } + else Portable.throwIllegalArgument("type?"); } 1.3 +26 -11 JettyExperimental/src/org/mortbay/jetty/HttpGenerator.java Index: HttpGenerator.java =================================================================== RCS file: /cvsroot/jetty/JettyExperimental/src/org/mortbay/jetty/HttpGenerator.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -w -r1.2 -r1.3 --- HttpGenerator.java 20 Apr 2005 08:10:23 -0000 1.2 +++ HttpGenerator.java 27 Apr 2005 15:39:02 -0000 1.3 @@ -24,7 +24,6 @@ import org.mortbay.io.ByteArrayBuffer; import org.mortbay.io.EndPoint; import org.mortbay.io.Portable; -import org.mortbay.resource.MimeTypes; /* ------------------------------------------------------------ */ /** HttpGenerator. @@ -542,9 +541,9 @@ if (_endp==null) { - if (_needCRLF) + if (_needCRLF && _buffer!=null) _buffer.put(CRLF); - if (_needEOC) + if (_needEOC && _buffer!=null) _buffer.put(LAST_CHUNK); return; } @@ -655,7 +654,7 @@ // Chunk buffer if need be if (_contentLength==CHUNKED_CONTENT) { - int size = _buffer.length(); + int size = _buffer==null?0:_buffer.length(); if (size>0) { // Prepare a chunk! @@ -700,13 +699,28 @@ // If we need EOC and everything written if (_needEOC && (_content==null || _content.length()==0)) { - if (_needCRLF && _buffer.space()>=2) + if (_needCRLF) + { + if (_buffer==null && _header.space()>=2) + { + _header.put(CRLF); + _needCRLF=false; + } + else if (_buffer.space()>=2) { _buffer.put(CRLF); _needCRLF=false; } + } - if (!_needCRLF && _needEOC && _buffer.space()>= LAST_CHUNK.length) + if (!_needCRLF && _needEOC) + { + if (_buffer==null && _header.space()>= LAST_CHUNK.length) + { + _header.put(LAST_CHUNK); + _needEOC=false; + } + else if (_buffer.space()>= LAST_CHUNK.length) { _buffer.put(LAST_CHUNK); _needEOC=false; @@ -714,6 +728,7 @@ } } } + } if (_content!=null && _content.length()==0) _content=null; 1.2 +12 -4 JettyExperimental/src/org/mortbay/jetty/HttpParser.java Index: HttpParser.java =================================================================== RCS file: /cvsroot/jetty/JettyExperimental/src/org/mortbay/jetty/HttpParser.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -w -r1.1 -r1.2 --- HttpParser.java 9 Mar 2005 21:06:39 -0000 1.1 +++ HttpParser.java 27 Apr 2005 15:39:02 -0000 1.2 @@ -16,6 +16,7 @@ package org.mortbay.jetty; import java.io.IOException; +import java.net.SocketTimeoutException; import org.mortbay.io.Buffer; import org.mortbay.io.BufferUtil; @@ -230,8 +231,15 @@ if (_buffer.space() == 0) Portable.throwIO("FULL"); + try + { filled = _endp.fill(_buffer); } + catch(SocketTimeoutException toe) + { + Portable.throwIO("EOF"); + } + } if (filled < 0 && _state == STATE_EOF_CONTENT) { 1.2 +31 -6 JettyExperimental/src/org/mortbay/jetty/HttpFields.java Index: HttpFields.java =================================================================== RCS file: /cvsroot/jetty/JettyExperimental/src/org/mortbay/jetty/HttpFields.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -w -r1.1 -r1.2 --- HttpFields.java 9 Mar 2005 21:06:39 -0000 1.1 +++ HttpFields.java 27 Apr 2005 15:39:02 -0000 1.2 @@ -41,6 +41,7 @@ import org.mortbay.io.BufferCache; import org.mortbay.io.BufferUtil; import org.mortbay.io.ByteArrayBuffer; +import org.mortbay.io.View; import org.mortbay.util.DateCache; import org.mortbay.util.LazyList; import org.mortbay.util.QuotedStringTokenizer; @@ -326,6 +327,12 @@ /* ------------------------------------------------------------ */ + public boolean containsKey(Buffer name) + { + return _bufferMap.containsKey(name); + } + + /* ------------------------------------------------------------ */ public boolean containsKey(String name) { return _bufferMap.containsKey(HttpHeaders.CACHE.lookup(name)); @@ -803,6 +810,18 @@ /* -------------------------------------------------------------- */ /** + * Sets the value of an long field. + * @param name the field name + * @param value the field long value + */ + public void addLongField(Buffer name, long value) + { + Buffer v=BufferUtil.toBuffer(value); + add(name,v,value); + } + + /* -------------------------------------------------------------- */ + /** * Sets the value of a date field. * @param name the field name * @param date the field date value @@ -1202,7 +1221,7 @@ public static final class Field { private Buffer _name; - private Buffer _value; + private View _value; private long _numValue; private Field _next; private Field _prev; @@ -1212,7 +1231,7 @@ private Field(Buffer name, Buffer value, long numValue, int revision) { _name=name; - _value=value; + _value=new View(value); _numValue=numValue; _next=null; _prev=null; @@ -1240,9 +1259,15 @@ */ private void reset(Buffer value, long numValue, int revision) { - if (_value==null || !_value.equals(value)) + if (_value==null) + { + _value=new View(value); + _numValue=numValue; + } + else if (!_value.equals(value)) { - _value=value.asReadOnlyBuffer(); + // TODO - the chances of this being right are small, as no copy is made! + _value.update(value); _numValue=numValue; } _revision=revision; 1.4 +1 -2 JettyExperimental/src/org/mortbay/jetty/Response.java Index: Response.java =================================================================== RCS file: /cvsroot/jetty/JettyExperimental/src/org/mortbay/jetty/Response.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -w -r1.3 -r1.4 --- Response.java 23 Apr 2005 22:13:09 -0000 1.3 +++ Response.java 27 Apr 2005 15:39:02 -0000 1.4 @@ -27,7 +27,6 @@ import org.slf4j.ULogger; import org.mortbay.io.IO; import org.mortbay.io.Portable; -import org.mortbay.resource.MimeTypes; import org.mortbay.util.LogSupport; import org.mortbay.util.QuotedStringTokenizer; import org.mortbay.util.StringUtil; 1.4 +1 -2 JettyExperimental/src/org/mortbay/jetty/Request.java Index: Request.java =================================================================== RCS file: /cvsroot/jetty/JettyExperimental/src/org/mortbay/jetty/Request.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -w -r1.3 -r1.4 --- Request.java 23 Apr 2005 22:13:09 -0000 1.3 +++ Request.java 27 Apr 2005 15:39:02 -0000 1.4 @@ -44,7 +44,6 @@ import org.mortbay.io.EndPoint; import org.mortbay.io.IO; import org.mortbay.io.Portable; -import org.mortbay.resource.MimeTypes; import org.mortbay.util.ByteArrayOutputStream2; import org.mortbay.util.LazyList; import org.mortbay.util.LogSupport; 1.3 +5 -4 JettyExperimental/src/org/mortbay/jetty/ResourceCache.java Index: ResourceCache.java =================================================================== RCS file: /cvsroot/jetty/JettyExperimental/src/org/mortbay/jetty/ResourceCache.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -w -r1.2 -r1.3 --- ResourceCache.java 23 Apr 2005 22:13:09 -0000 1.2 +++ ResourceCache.java 27 Apr 2005 15:39:02 -0000 1.3 @@ -117,7 +117,7 @@ if(log.isDebugEnabled())log.debug("CACHE HIT: "+entry); } - if (entry!=null) + if (entry==null) { Resource resource=factory.getResource(pathInContext); long len = resource.length(); @@ -136,12 +136,13 @@ if(log.isDebugEnabled())log.debug("CACHED: "+resource); entry= new Entry(pathInContext,resource); + newEntry=true; } } } } - if (!newEntry) + if (!newEntry && entry!=null) { synchronized(entry) { 1.1 JettyExperimental/src/org/mortbay/jetty/mime.properties Index: mime.properties =================================================================== ai = application/postscript aif = audio/x-aiff aifc = audio/x-aiff aiff = audio/x-aiff asc = text/plain asf = video/x.ms.asf asx = video/x.ms.asx au = audio/basic avi = video/x-msvideo bcpio = application/x-bcpio bin = application/octet-stream cab = application/x-cabinet cdf = application/x-netcdf class = application/java-vm cpio = application/x-cpio cpt = application/mac-compactpro crt = application/x-x509-ca-cert csh = application/x-csh css = text/css csv = text/comma-separated-values dcr = application/x-director dir = application/x-director dll = application/x-msdownload dms = application/octet-stream doc = application/msword dtd = application/xml-dtd dvi = application/x-dvi dxr = application/x-director eps = application/postscript etx = text/x-setext exe = application/octet-stream ez = application/andrew-inset gif = image/gif gtar = application/x-gtar gz = application/gzip gzip = application/gzip hdf = application/x-hdf hqx = application/mac-binhex40 html = text/html htm = text/html ice = x-conference/x-cooltalk ief = image/ief iges = model/iges igs = model/iges jar = application/java-archive java = text/plain jnlp = application/x-java-jnlp-file jpeg = image/jpeg jpe = image/jpeg jpg = image/jpeg js = application/x-javascript jsp = text/plain kar = audio/midi latex = application/x-latex lha = application/octet-stream lzh = application/octet-stream man = application/x-troff-man mathml = application/mathml+xml me = application/x-troff-me mesh = model/mesh mid = audio/midi midi = audio/midi mif = application/vnd.mif mol = chemical/x-mdl-molfile movie = video/x-sgi-movie mov = video/quicktime mp2 = audio/mpeg mp3 = audio/mpeg mpeg = video/mpeg mpe = video/mpeg mpga = audio/mpeg mpg = video/mpeg ms = application/x-troff-ms msh = model/mesh msi = application/octet-stream nc = application/x-netcdf oda = application/oda ogg = application/ogg pbm = image/x-portable-bitmap pdb = chemical/x-pdb pdf = application/pdf pgm = image/x-portable-graymap pgn = application/x-chess-pgn png = image/png pnm = image/x-portable-anymap ppm = image/x-portable-pixmap ppt = application/vnd.ms-powerpoint ps = application/postscript qt = video/quicktime ra = audio/x-pn-realaudio ra = audio/x-realaudio ram = audio/x-pn-realaudio ras = image/x-cmu-raster rdf = application/rdf+xml rgb = image/x-rgb rm = audio/x-pn-realaudio roff = application/x-troff rpm = application/x-rpm rpm = audio/x-pn-realaudio rtf = application/rtf rtx = text/richtext ser = application/java-serialized-object sgml = text/sgml sgm = text/sgml sh = application/x-sh shar = application/x-shar silo = model/mesh sit = application/x-stuffit skd = application/x-koan skm = application/x-koan skp = application/x-koan skt = application/x-koan smi = application/smil smil = application/smil snd = audio/basic spl = application/x-futuresplash src = application/x-wais-source sv4cpio = application/x-sv4cpio sv4crc = application/x-sv4crc svg = image/svg+xml swf = application/x-shockwave-flash t = application/x-troff tar = application/x-tar tar.gz = application/x-gtar tcl = application/x-tcl tex = application/x-tex texi = application/x-texinfo texinfo = application/x-texinfo tgz = application/x-gtar tiff = image/tiff tif = image/tiff tr = application/x-troff tsv = text/tab-separated-values txt = text/plain ustar = application/x-ustar vcd = application/x-cdlink vrml = model/vrml vxml = application/voicexml+xml wav = audio/x-wav wbmp = image/vnd.wap.wbmp wmlc = application/vnd.wap.wmlc wmlsc = application/vnd.wap.wmlscriptc wmls = text/vnd.wap.wmlscript wml = text/vnd.wap.wml wrl = model/vrml wtls-ca-certificate = application/vnd.wap.wtls-ca-certificate xbm = image/x-xbitmap xht = application/xhtml+xml xhtml = application/xhtml+xml xls = application/vnd.ms-excel xml = application/xml xpm = image/x-xpixmap xpm = image/x-xpixmap xsl = application/xml xslt = application/xslt+xml xul = application/vnd.mozilla.xul+xml xwd = image/x-xwindowdump xyz = chemical/x-xyz z = application/compress zip = application/zip 1.1 JettyExperimental/src/org/mortbay/jetty/HttpContent.java Index: HttpContent.java =================================================================== //======================================================================== //$Id: HttpContent.java,v 1.1 2005/04/27 15:39:02 gregwilkins Exp $ //Copyright 2004 Mort Bay Consulting Pty. Ltd. //------------------------------------------------------------------------ //Licensed under the Apache License, Version 2.0 (the "License"); //you may not use this file except in compliance with the License. //You may obtain a copy of the License at //http://www.apache.org/licenses/LICENSE-2.0 //Unless required by applicable law or agreed to in writing, software //distributed under the License is distributed on an "AS IS" BASIS, //WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. //See the License for the specific language governing permissions and //limitations under the License. //======================================================================== package org.mortbay.jetty; import org.mortbay.io.Buffer; /* ------------------------------------------------------------ */ /** HttpContent. * @author gregw * */ public interface HttpContent { Buffer getContentType(); Buffer getLastModified(); Buffer getBuffer(); long getContentLength(); } 1.3 +233 -19 JettyExperimental/src/org/mortbay/jetty/MimeTypes.java 1.1 JettyExperimental/src/org/mortbay/jetty/encoding.properties Index: encoding.properties =================================================================== text/html = ISO-8859-1 text/plain = US-ASCII text/xml = UTF-8 |