diff --git a/Jenkinsfile b/Jenkinsfile index 6684401e026..704af4bbba1 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -9,8 +9,9 @@ node { try { - stage 'Checkout' - checkout scm + stage('Checkout') { + checkout scm + } } catch (Exception e) { notifyBuild("Checkout Failure") throw e @@ -18,10 +19,11 @@ node { try { - stage 'Compile' - withEnv(mvnEnv) { - timeout(time: 15, unit: 'MINUTES') { - sh "mvn -B clean install -Dtest=None" + stage('Compile') { + withEnv(mvnEnv) { + timeout(time: 15, unit: 'MINUTES') { + sh "mvn -B clean install -Dtest=None" + } } } } catch(Exception e) { @@ -31,10 +33,11 @@ node { try { - stage 'Javadoc' - withEnv(mvnEnv) { - timeout(time: 15, unit: 'MINUTES') { - sh "mvn -B javadoc:javadoc" + stage('Javadoc') { + withEnv(mvnEnv) { + timeout(time: 15, unit: 'MINUTES') { + sh "mvn -B javadoc:javadoc" + } } } } catch(Exception e) { @@ -44,31 +47,51 @@ node { try { - stage 'Test' - withEnv(mvnEnv) { - timeout(time: 60, unit: 'MINUTES') { - // Run test phase / ignore test failures - sh "mvn -B install -Dmaven.test.failure.ignore=true" - // Report failures in the jenkins UI - step([$class: 'JUnitResultArchiver', - testResults: '**/target/surefire-reports/TEST-*.xml']) - // Collect up the jacoco execution results - step([$class: 'JacocoPublisher', - inclusionPattern: "**/org/eclipse/jetty/**/*.class", - execPattern: '**/target/jacoco.exec', - classPattern: '**/target/classes', - sourcePattern: '**/src/main/java']) - // Report on Maven and Javadoc warnings - step([$class: 'WarningsPublisher', - consoleParsers: [ - [parserName: 'Maven'], - [parserName: 'JavaDoc'], - [parserName: 'JavaC'] - ]]) - } - if(isUnstable()) - { - notifyBuild("Unstable / Test Errors") + stage('Test') { + withEnv(mvnEnv) { + timeout(time: 60, unit: 'MINUTES') { + // Run test phase / ignore test failures + sh "mvn -B install -Dmaven.test.failure.ignore=true" + // Report failures in the jenkins UI + step([$class: 'JUnitResultArchiver', + testResults: '**/target/surefire-reports/TEST-*.xml']) + // Collect up the jacoco execution results + def jacocoExcludes = + // build tools + "**/org/eclipse/jetty/ant/**" + + ",**/org/eclipse/jetty/maven/**" + + ",**/org/eclipse/jetty/jspc/**" + + // example code / documentation + ",**/org/eclipse/jetty/embedded/**" + + ",**/org/eclipse/jetty/asyncrest/**" + + ",**/org/eclipse/jetty/demo/**" + + // special environments / late integrations + ",**/org/eclipse/jetty/gcloud/**" + + ",**/org/eclipse/jetty/infinispan/**" + + ",**/org/eclipse/jetty/osgi/**" + + ",**/org/eclipse/jetty/spring/**" + + ",**/org/eclipse/jetty/http/spi/**" + + // test classes + ",**/org/eclipse/jetty/tests/**" + + ",**/org/eclipse/jetty/test/**"; + step([$class: 'JacocoPublisher', + inclusionPattern: '**/org/eclipse/jetty/**/*.class', + exclusionPattern: jacocoExcludes, + execPattern: '**/target/jacoco.exec', + classPattern: '**/target/classes', + sourcePattern: '**/src/main/java']) + // Report on Maven and Javadoc warnings + step([$class: 'WarningsPublisher', + consoleParsers: [ + [parserName: 'Maven'], + [parserName: 'JavaDoc'], + [parserName: 'JavaC'] + ]]) + } + if(isUnstable()) + { + notifyBuild("Unstable / Test Errors") + } } } } catch(Exception e) { diff --git a/KEYS.txt b/KEYS.txt new file mode 100644 index 00000000000..a902b2e94a1 --- /dev/null +++ b/KEYS.txt @@ -0,0 +1,6 @@ +# GPG Release Key Fingerprints +Jan Bartel AED5 EE6C 45D0 FE8D 5D1B 164F 27DE D4BF 6216 DB +Simone Bordet 8B09 6546 B1A8 F026 56B1 5D3B 1677 D141 BCF3 58 +Joakim Erdfelt BFBB 21C2 46D7 7768 3628 7A48 A04E 0C74 ABB3 5FEA +Joakim Erdfelt B59B 67FD 7904 9843 67F9 3180 0818 D9D6 8FB6 7BAC +Jesse McConnell 2A68 4B57 436A 81FA 8706 B53C 61C3 351A 438A 3B7D diff --git a/VERSION.txt b/VERSION.txt index 3c2a5218e7b..0dc7dacafe2 100644 --- a/VERSION.txt +++ b/VERSION.txt @@ -1,5 +1,46 @@ jetty-10.0.0-SNAPSHOT +jetty-9.4.0.RC1 - 21 October 2016 + + 277 Proxy servlet does not handle HTTP status 100 correctly + + 292 NPE in SslConnectionFactory newConnection + + 295 Ensure Jetty Client use of Deflater / Inflater calls .end() to avoid + memory leak + + 382 Support Request auto decompress in GzipHandler + + 644 Modules for enabling logging + + 788 Attempting to activate a module that is already enabled + + 914 Regularize the naming of the session configuration properties + + 915 The jetty-maven-plugin:stop goal doesn't stop everything completely + + 918 Support certificates hot reload + + 926 No LSB Tags on jetty.sh script cause warning on Ubuntu 16.04 + + 927 Allow custom schema for session tables + + 940 Reset Response buffer size + + 941 Make GCloudSessionDataStore more configurable + + 944 Make a NullSessionCache module + + 945 Property for SessionCache.saveOnCreate missing in session-cache-hash.mod + + 946 Fix javadoc on MongoSessionDataStore + + 948 jetty-distribution invalid config etc/jetty-http2c.xml + + 953 Add namespace support to GCloudSessionDataStore + + 954 Fallback to less efficient queries if no indexes for + GCloudSessionDataStore + + 955 Response listeners not invoked when using Connection.send() + + 959 CompleteListener invoked twice for HTTP/2 transport and response content + + 960 Async I/O spin when reading early EOF + + 963 location based black/white classpath patterns + + 966 Remove usages of ConcurrentArrayQueue + + 984 Improve logging modules and module listing + + 989 InputStreamResponseListener.get() throws with HTTP/2 following redirect + + 993 Add GAE_MODULE_INSTANCE env var as default for session id manager + + 998 Normalize [tags] directive in *.mod files + + 999 Create a Flight Recorder module + + 1000 Allow legacy behaviour if 2 servlets map to same path + + 1003 Better error messages when invoking deprecated modules + + 1007 Update to gcloud datastore 0.4.0 + + 1009 ThreadLimitHandler has no method setBlockForMs + + 1013 Overlay directory for modules + + 1014 Sessions created via https throw "invalid for write" exception + + 1017 Output session configuration for dump + + 1018 Remove dependency on asm types in oej.annotations.Util + jetty-9.4.0.RC0 - 15 September 2016 + 131 Improve Connector Statistic names and values + 572 Don't reject HTTP/2 requests without body in low threads mode @@ -224,7 +265,30 @@ jetty-9.4.0.M0 - 03 June 2016 + 608 reset encoding set from content type + 609 ignore failing test + 610 Ignore failing test ->>>>>>> jetty-9.4.x + +jetty-9.3.14.v20161028 - 28 October 2016 + + 292 NPE in SslConnectionFactory newConnection + + 295 Ensure Jetty Client use of Deflater / Inflater calls .end() to avoid + memory leak + + 989 InputStreamResponseListener.get() throws with HTTP/2 following redirect + + 1009 [9.3.x] ThreadLimitHandler has no method setBlockForMs + + 1018 Remove dependency on asm types in oej.annotations.Util + + 1029 Restore Request.setHttpVersion() + + 1031 Improve HttpField pre-encoding + + 1032 Remove jetty dependencies in jetty jasper classes + + 1037 Don't execute AsyncListener.onTimeout events in spare Scheduler-Thread + + 1038 AttributeNormalizer does not favor ${WAR} over other attributes, like + ${jetty.base} + + 1039 AttributeNormalizer should not track attributes that are null + + 1046 Improve HTTP2Flusher error report + + 480764 Add extra tests for empty multipart + +jetty-9.3.13.v20161014 - 14 October 2016 + + 295 Ensure Jetty Client use of Deflater / Inflater calls .end() to avoid + memory leak + + 926 No LSB Tags on jetty.sh script cause warning on Ubuntu 16.04 + + 999 Create a Flight Recorder module + + 1000 Allow legacy behaviour if 2 servlets map to same path jetty-9.3.13.M0 - 30 September 2016 + 277 Proxy servlet does not handle HTTP status 100 correctly @@ -236,7 +300,7 @@ jetty-9.3.13.M0 - 30 September 2016 + 948 9.4.0.RC0 jetty-distribution invalid config etc/jetty-http2c.xml + 955 Response listeners not invoked when using Connection.send() + 959 CompleteListener invoked twice for HTTP/2 transport and response content - + 960 Async I/O spin when reading early EOF + + 960 Async I/O spin when reading early EOF + 965 Link from High Load docs to Garbage Collection Tuning is broken + 966 Remove usages of ConcurrentArrayQueue @@ -386,7 +450,7 @@ jetty-9.3.10.v20160621 - 21 June 2016 session.maxInactiveInterval + 623 Add --gzip suffix to 304 responses with ETAGs + 624 AsyncContext.onCompleted called twice - + 628 IOException: Unable to open root Jar file .. + + 628 IOException: Unable to open root Jar file MetaInfConfiguration.getTlds(MetaInfConfiguration.java:406) with Spring boot loader + WebAppContext + non-expanded war + 632 JMX tests rely on fixed port @@ -3163,11 +3227,17 @@ jetty-7.6.10.v20130312 - 12 March 2013 reason string jetty-9.0.0.RC2 - 24 February 2013 - + fix etc/jetty.xml timerscheduler typo that is preventing normal startu Fix + + fix etc/jetty.xml timerscheduler typo that is preventing normal startu fix + etc/jetty.xml timerscheduler typo that is preventing normal startu fix + etc/jetty.xml timerscheduler typo that is preventing normal startu Fix etc/jetty.xml TimerScheduler typo that is preventing normal startup - + fix etc/jetty-https.xml excludeciphersuites typo that prevents ssl sta Fix + + fix etc/jetty-https.xml excludeciphersuites typo that prevents ssl sta fix + etc/jetty-https.xml excludeciphersuites typo that prevents ssl sta fix + etc/jetty-https.xml excludeciphersuites typo that prevents ssl sta Fix etc/jetty-https.xml ExcludeCipherSuites typo that prevents SSL startup - + fix websocket memory use Fix websocket memory use + + fix websocket memory use fix websocket memory use fix websocket memory fix + websocket memory use fix websocket memory use fix websocket memory use Fix + websocket memory use jetty-9.0.0.RC1 - 22 February 2013 + 227244 Remove import of backport-util-concurrent Arrays class @@ -3637,13 +3707,15 @@ jetty-9.0.0.M0 - 21 September 2012 jetty-8.1.7.v20120910 - 10 September 2012 + 388895 Update dependencies for jetty-jndi - + fix busy logging statement re: sessions fix busy logging statement re: - sessions + + fix busy logging statement re: sessions fix busy logging statement re: fix + busy logging statement re: sessions fix busy logging statement re: fix busy + logging statement re: sessions fix busy logging statement re: sessions jetty-7.6.7.v20120910 - 10 September 2012 + 388895 Update dependencies for jetty-jndi - + fix busy logging statement re: sessions fix busy logging statement re: - sessions + + fix busy logging statement re: sessions fix busy logging statement re: fix + busy logging statement re: sessions fix busy logging statement re: fix busy + logging statement re: sessions fix busy logging statement re: sessions jetty-8.1.6.v20120903 - 03 September 2012 + 347130 Empty getResourcePaths due to ZipFileClosedException @@ -4242,7 +4314,9 @@ jetty-7.6.0.RC0 - 29 November 2011 result in close rather than a shutdown output. + 364657 Support HTTP only cookies from standard API + JETTY-1442 add _hostHeader setter for ProxyRule - + refactored nio layer for better half close handling Refactored NIO layer for + + refactored nio layer for better half close handling refactored nio lay + refactored nio layer for better half close handling refactored nio lay + refactored nio layer for better half close handling Refactored NIO layer for better half close handling jetty-8.0.4.v20111024 - 24 October 2011 @@ -4454,15 +4528,21 @@ jetty-7.5.0.RC1 - 19 August 2011 jetty-8.0.0.RC0 - 16 August 2011 + 352565 cookie httponly flag ignored + 353285 ServletSecurity annotation ignored - + enable annotations by default Enable annotations by default - + merge from jetty-7.4.3 Merge from jetty-7.4.3 + + enable annotations by default enable annotations by default enable enable + annotations by default enable annotations by default enable annotations by + default Enable annotations by default + + merge from jetty-7.4.3 merge from jetty-7.4.3 merge from jetty-7.4.3 m merge + from jetty-7.4.3 merge from jetty-7.4.3 merge from jetty-7.4.3 Merge from + jetty-7.4.3 jetty-8.0.0.M3 - 27 May 2011 + 324505 Implement API login + 335500 request.getParts() throws a NullPointerException + 343472 isUserInRole does not prevent subsequent login call + 346180 jsp-2.2 support - + updated to jetty-7.4.2.v20110526 Updated to jetty-7.4.2.v20110526 + + updated to jetty-7.4.2.v20110526 updated to jetty-7.4.2.v20110526 upda + updated to jetty-7.4.2.v20110526 updated to jetty-7.4.2.v20110526 updated to + jetty-7.4.2.v20110526 Updated to jetty-7.4.2.v20110526 jetty-7.5.0.RC0 - 15 August 2011 + 298502 Handle 200 Connect responses with no content-length @@ -4604,7 +4684,9 @@ jetty-7.4.0.v20110414 + 342504 Scanner Listener + 342700 refine websocket API for anticipated changes + JETTY-1362 Set root cause of UnavailableException - + various test harness cleanups to avoid random failures Various test harness + + various test harness cleanups to avoid random failures various test ha + various test harness cleanups to avoid random failures various test ha + various test harness cleanups to avoid random failures Various test harness cleanups to avoid random failures jetty-7.4.0.RC0 @@ -4644,8 +4726,12 @@ jetty-7.4.0.RC0 + 341992 Overlayed context deployer + JETTY-1245 Pooled Buffers implementation + JETTY-1354 Added jetty-nested - + added extra session removal test Added extra session removal test - + ensure generated fragment names are unique Ensure generated fragment names + + added extra session removal test added extra session removal test adde added + extra session removal test added extra session removal test added extra + session removal test Added extra session removal test + + ensure generated fragment names are unique ensure generated fragment n + ensure generated fragment names are unique ensure generated fragment n + ensure generated fragment names are unique Ensure generated fragment names are unique jetty-8.0.0.M2 - 16 November 2010 @@ -4666,7 +4752,9 @@ jetty-8.0.0.M2 - 16 November 2010 + 330208 Support new wording on servlet-mapping and filter-mapping merging from servlet3.0a + 330292 request.getParts() returns only one part when the name is the same - + update to jetty-7.2.1.v20101111 Update to jetty-7.2.1.v20101111 + + update to jetty-7.2.1.v20101111 update to jetty-7.2.1.v20101111 update + update to jetty-7.2.1.v20101111 update to jetty-7.2.1.v20101111 update to + jetty-7.2.1.v20101111 Update to jetty-7.2.1.v20101111 jetty-7.3.1.v20110307 - 07 March 2011 + 316382 Support a more strict SSL option with certificates @@ -4894,10 +4982,16 @@ jetty-7.2.0.RC0 - 01 October 2010 default + JETTY-1281 Create new session after authentication + JETTY-1283 JSONPojoConvertorFactory can turn off fromJSON - + added ignore to logger interface Added ignore to Logger interface - + fix jetty-plus.xml for new configuration names Fix jetty-plus.xml for new + + added ignore to logger interface added ignore to logger interface adde added + ignore to logger interface added ignore to logger interface added ignore to + logger interface Added ignore to Logger interface + + fix jetty-plus.xml for new configuration names fix jetty-plus.xml for fix + jetty-plus.xml for new configuration names fix jetty-plus.xml for fix + jetty-plus.xml for new configuration names Fix jetty-plus.xml for new configuration names - + improved debug dump Improved debug dump + + improved debug dump improved debug dump improved debug dump improved d + improved debug dump improved debug dump improved debug dump Improved debug + dump jetty-7.1.6.v20100715 + 319519 Warn about duplicate configuration files @@ -4912,12 +5006,18 @@ jetty-8.0.0.M1 - 12 July 2010 + JETTY-1224 Change jetty-8 merge rules for fragment descriptors and annotations + ensure in web.xml overrides relative in + ensure in web.xml overrides relative in + ensure in web.xml overrides relative in Ensure in web.xml overrides relative in fragments - + ensure empty implies exclusion of all fragments Ensure + + ensure empty implies exclusion of all fragments en + ensure empty implies exclusion of all fragments en + ensure empty implies exclusion of all fragments Ensure empty implies exclusion of all fragments - + ensure servlet-api jar class inheritance hierarchy is scanned Ensure - servlet-api jar class inheritance hierarchy is scanned + + ensure servlet-api jar class inheritance hierarchy is scanned ensure e + ensure servlet-api jar class inheritance hierarchy is scanned ensure ensure + servlet-api jar class inheritance hierarchy is scanned Ensure servlet-api + jar class inheritance hierarchy is scanned jetty-7.1.5.v20100705 + 288194 Add blacklist/whitelist to ProxyServlet and ProxyHandler @@ -4943,7 +5043,9 @@ jetty-7.1.5.v20100705 + 318551 Optional uncheck Printwriter + 319060 Support web-bundles that are not expanded (bundle is zipped) + JETTY-1237 Save local/remote address to be available after close - + update ecj to 3.6 helios release drop Update ecj to 3.6 Helios release drop + + update ecj to 3.6 helios release drop update ecj to 3.6 helios release + update ecj to 3.6 helios release drop update ecj to 3.6 helios release + update ecj to 3.6 helios release drop Update ecj to 3.6 Helios release drop jetty-6.1.25 - 26 July 2010 + 320264 Removed duplicate mime.property entries @@ -4954,10 +5056,14 @@ jetty-6.1.25 - 26 July 2010 + JETTY-1226 javax.activation needs to be listed in the system classes + JETTY-1237 Remember local/remote details of endpoint + JETTY-1251 protected against closed selector - + cometd-112 if two threads create the same channel, then create events + + cometd-112 if two threads create the same channel, then create events + cometd-112 if two threads create the same channel, then create events + cometd-112 if two threads create the same channel, then create events COMETD-112 if two threads create the same channel, then create events may occur after subscribe events - + jetty-6 is now in maintenance mode. Jetty-6 is now in maintenance mode. + + jetty-6 is now in maintenance mode. jetty-6 is now in maintenance mode + jetty-6 is now in maintenance mode. jetty-6 is now in maintenance mode + jetty-6 is now in maintenance mode. Jetty-6 is now in maintenance mode. jetty-7.1.4.v20100610 + 292326 Stop continuations if server is stopped @@ -5006,8 +5112,10 @@ jetty-7.1.2.v20100523 + 313278 Implement octet ranges in IPAccessHandler + 313336 secure websockets + 314009 updated README.txt - + update links to jetty website and wiki on test webapp Update links to jetty - website and wiki on test webapp + + update links to jetty website and wiki on test webapp update links to update + links to jetty website and wiki on test webapp update links to update links + to jetty website and wiki on test webapp Update links to jetty website and + wiki on test webapp jetty-7.1.1.v20100517 + 302344 Make the list of available contexts if root context is not configured @@ -5085,14 +5193,24 @@ jetty-7.1.0.RC0 - 27 April 2010 + JETTY-1202 Use platform default algorithm for SecureRandom + JETTY-1212 handle long content lengths + JETTY-1214 avoid ISE when scavenging invalid session - + add annotationconfiguration to jetty-plus.xml Add AnnotationConfiguration to + + add annotationconfiguration to jetty-plus.xml add annotationconfigurat add + annotationconfiguration to jetty-plus.xml add annotationconfigurat add + annotationconfiguration to jetty-plus.xml Add AnnotationConfiguration to jetty-plus.xml - + add npe protection to containerinitializerconfiguration Add NPE protection - to ContainerInitializerConfiguration - + fix jetty-plus.xml reference to addlifecycle Fix jetty-plus.xml reference to + + add npe protection to containerinitializerconfiguration add npe protec add + npe protection to containerinitializerconfiguration add npe protec add npe + protection to containerinitializerconfiguration Add NPE protection to + ContainerInitializerConfiguration + + fix jetty-plus.xml reference to addlifecycle fix jetty-plus.xml refere fix + jetty-plus.xml reference to addlifecycle fix jetty-plus.xml refere fix + jetty-plus.xml reference to addlifecycle Fix jetty-plus.xml reference to addLifeCycle - + merged 7.0.2.v20100331 Merged 7.0.2.v20100331 + + merged 7.0.2.v20100331 merged 7.0.2.v20100331 merged 7.0.2.v20100331 m + merged 7.0.2.v20100331 merged 7.0.2.v20100331 merged 7.0.2.v20100331 Merged + 7.0.2.v20100331 + temporarily remove jetty-osgi module to clarify jsp version compatibil + temporarily remove jetty-osgi module to clarify jsp version compatibil + temporarily remove jetty-osgi module to clarify jsp version compatibil Temporarily remove jetty-osgi module to clarify jsp version compatibility jetty-7.0.2.v20100331 - 31 March 2010 @@ -5104,12 +5222,18 @@ jetty-7.0.2.v20100331 - 31 March 2010 + 306880 Support for UPGRADE in HttpClient + 306884 Suspend with timeout <=0 never expires + 307589 updated servlet 3.0 continuations for final API - + allow configuration array to be set on server instance for all web app Allow + + allow configuration array to be set on server instance for all web app allow + configuration array to be set on server instance for all web app allow + configuration array to be set on server instance for all web app Allow Configuration array to be set on Server instance for all web apps - + ensure webapps with no web-inf don't scan web-inf/lib Ensure webapps with no + + ensure webapps with no web-inf don't scan web-inf/lib ensure webapps w + ensure webapps with no web-inf don't scan web-inf/lib ensure webapps w + ensure webapps with no web-inf don't scan web-inf/lib Ensure webapps with no WEB-INF don't scan WEB-INF/lib - + take excess logging statements out of startup Take excess logging statements - out of startup + + take excess logging statements out of startup take excess logging stat take + excess logging statements out of startup take excess logging stat take + excess logging statements out of startup Take excess logging statements out + of startup jetty-6.1.24 - 21 April 2010 + 308925 Protect the test webapp from remote access @@ -5117,14 +5241,22 @@ jetty-6.1.24 - 21 April 2010 + JETTY-1198 reset idle timeout on request body chunks + JETTY-1200 SSL NIO Endpoint wraps non NIO buffers + JETTY-1211 SetUID loadlibrary name and debug - + cometd-100 clientimpl logs "null" as clientid COMETD-100 ClientImpl logs + + cometd-100 clientimpl logs "null" as clientid cometd-100 clientimpl lo + cometd-100 clientimpl logs "null" as clientid cometd-100 clientimpl lo + cometd-100 clientimpl logs "null" as clientid COMETD-100 ClientImpl logs "null" as clientId + cometd-107 reloading the application with reload extension does not fi + cometd-107 reloading the application with reload extension does not fi + cometd-107 reloading the application with reload extension does not fi COMETD-107 Reloading the application with reload extension does not fire /meta/connect handlers until long poll timeout expires + cometd-99 clientimpl logs exceptions in listeners with "debug" level + cometd-99 clientimpl logs exceptions in listeners with "debug" level + cometd-99 clientimpl logs exceptions in listeners with "debug" level COMETD-99 ClientImpl logs exceptions in listeners with "debug" level - + upgraded to cometd 1.1.1 client Upgraded to cometd 1.1.1 client + + upgraded to cometd 1.1.1 client upgraded to cometd 1.1.1 client upgrad + upgraded to cometd 1.1.1 client upgraded to cometd 1.1.1 client upgraded to + cometd 1.1.1 client Upgraded to cometd 1.1.1 client jetty-6.1.23 - 02 April 2010 + 292800 ContextDeployer - recursive setting is undone by FilenameFilter @@ -5173,20 +5305,35 @@ jetty-6.1.23 - 02 April 2010 + JETTY-1205 Memory leak in browser-to-client mapping + JETTY-1207 NPE protection in FormAuthenticator + cometd-28 improved concurrency usage in bayeux and channel handling + cometd-28 improved concurrency usage in bayeux and channel handling + cometd-28 improved concurrency usage in bayeux and channel handling COMETD-28 Improved concurrency usage in Bayeux and channel handling - + cometd-46 reset contentexchange content on resend COMETD-46 reset - ContentExchange content on resend - + cometd-58 extension.rcv() return null causes npe in COMETD-58 - Extension.rcv() return null causes NPE in - AbstractBayeux.PublishHandler.publish + + cometd-46 reset contentexchange content on resend cometd-46 reset come + cometd-46 reset contentexchange content on resend cometd-46 reset cometd-46 + reset contentexchange content on resend COMETD-46 reset ContentExchange + content on resend + + cometd-58 extension.rcv() return null causes npe in cometd-58 cometd-5 + cometd-58 extension.rcv() return null causes npe in cometd-58 cometd-58 + extension.rcv() return null causes npe in COMETD-58 Extension.rcv() return + null causes NPE in AbstractBayeux.PublishHandler.publish + cometd-59 acknowledgeextension does not handle null channel in message + cometd-59 acknowledgeextension does not handle null channel in message + cometd-59 acknowledgeextension does not handle null channel in message COMETD-59 AcknowledgeExtension does not handle null channel in Message - + cometd-62 delay add listeners until after client construction COMETD-62 + + cometd-62 delay add listeners until after client construction cometd-6 + cometd-62 delay add listeners until after client construction cometd-6 + cometd-62 delay add listeners until after client construction COMETD-62 Delay add listeners until after client construction - + json parses nan as null JSON parses NaN as null + + json parses nan as null json parses nan as null json parses nan as nul json + parses nan as null json parses nan as null json parses nan as null JSON + parses NaN as null + remove references to old content in httpclient client tests for www.su + remove references to old content in httpclient client tests for www.su + remove references to old content in httpclient client tests for www.su Remove references to old content in HttpClient client tests for www.sun.com - + updated jsp to 2.1.v20091210 Updated JSP to 2.1.v20091210 + + updated jsp to 2.1.v20091210 updated jsp to 2.1.v20091210 updated jsp + updated jsp to 2.1.v20091210 updated jsp to 2.1.v20091210 updated jsp to + 2.1.v20091210 Updated JSP to 2.1.v20091210 jetty-7.0.2.RC0 + 290765 Reset input for HttpExchange retry @@ -5246,17 +5393,31 @@ jetty-7.0.2.RC0 + JETTY-1184 shrink thread pool even with frequent small jobs + JETTY-1192 Fixed Digested POST + JETTY-1199 FindBugs cleanups - + added ipaccesshandler Added IPAccessHandler - + cometd-46 reset contentexchange response content on resend COMETD-46 reset + + added ipaccesshandler added ipaccesshandler added ipaccesshandler adde added + ipaccesshandler added ipaccesshandler added ipaccesshandler Added + IPAccessHandler + + cometd-46 reset contentexchange response content on resend cometd-46 r + cometd-46 reset contentexchange response content on resend cometd-46 r + cometd-46 reset contentexchange response content on resend COMETD-46 reset ContentExchange response content on resend - + json parses nan as null JSON parses NaN as null - + updated servlet3continuation to final 3.0.20100224 Updated - Servlet3Continuation to final 3.0.20100224 + + json parses nan as null json parses nan as null json parses nan as nul json + parses nan as null json parses nan as null json parses nan as null JSON + parses NaN as null + + updated servlet3continuation to final 3.0.20100224 updated updated updated + servlet3continuation to final 3.0.20100224 updated updated + servlet3continuation to final 3.0.20100224 Updated Servlet3Continuation to + final 3.0.20100224 jetty-8.0.0.M0 - 28 February 2010 - + merged 7.0.1.v20091116 Merged 7.0.1.v20091116 - + updated servlet 3.0 spec 20100224 Updated servlet 3.0 spec 20100224 - + updated to cometd 1.0.1 Updated to cometd 1.0.1 + + merged 7.0.1.v20091116 merged 7.0.1.v20091116 merged 7.0.1.v20091116 m + merged 7.0.1.v20091116 merged 7.0.1.v20091116 merged 7.0.1.v20091116 Merged + 7.0.1.v20091116 + + updated servlet 3.0 spec 20100224 updated servlet 3.0 spec 20100224 up + updated servlet 3.0 spec 20100224 updated servlet 3.0 spec 20100224 updated + servlet 3.0 spec 20100224 Updated servlet 3.0 spec 20100224 + + updated to cometd 1.0.1 updated to cometd 1.0.1 updated to cometd 1.0. + updated to cometd 1.0.1 updated to cometd 1.0.1 updated to cometd 1.0.1 + Updated to cometd 1.0.1 jetty-7.0.1.v20091125 - 25 November 2009 + 274251 DefaultServlet supports exact match mode @@ -5294,22 +5455,42 @@ jetty-7.0.1.v20091125 - 25 November 2009 around + JETTY-1144 fixed multi-byte character overflow + JETTY-1148 Reset partially read request reader - + cometd-34 support baeyux mbean COMETD-34 Support Baeyux MBean - + cq-3581 jetty osgi contribution CQ-3581 jetty OSGi contribution - + cve-2009-3555 prevent ssl renegotiate for ssl vulnerability CVE-2009-3555 + + cometd-34 support baeyux mbean cometd-34 support baeyux mbean cometd-3 + cometd-34 support baeyux mbean cometd-34 support baeyux mbean cometd-34 + support baeyux mbean COMETD-34 Support Baeyux MBean + + cq-3581 jetty osgi contribution cq-3581 jetty osgi contribution cq-358 + cq-3581 jetty osgi contribution cq-3581 jetty osgi contribution cq-3581 + jetty osgi contribution CQ-3581 jetty OSGi contribution + + cve-2009-3555 prevent ssl renegotiate for ssl vulnerability cve-2009-3 + cve-2009-3555 prevent ssl renegotiate for ssl vulnerability cve-2009-3 + cve-2009-3555 prevent ssl renegotiate for ssl vulnerability CVE-2009-3555 Prevent SSL renegotiate for SSL vulnerability - + fixed client abort asocciation Fixed client abort asocciation - + fixed xss issue in cookiedump demo servlet. Fixed XSS issue in CookieDump - demo servlet. - + improved start.jar usage text for properties Improved start.jar usage text + + fixed client abort asocciation fixed client abort asocciation fixed cl fixed + client abort asocciation fixed client abort asocciation fixed client abort + asocciation Fixed client abort asocciation + + fixed xss issue in cookiedump demo servlet. fixed xss issue in cookied fixed + xss issue in cookiedump demo servlet. fixed xss issue in cookied fixed xss + issue in cookiedump demo servlet. Fixed XSS issue in CookieDump demo + servlet. + + improved start.jar usage text for properties improved start.jar usage + improved start.jar usage text for properties improved start.jar usage + improved start.jar usage text for properties Improved start.jar usage text for properties - + moved centralized logging and verifier back to sandbox Moved centralized - logging and verifier back to sandbox - + promoted jetty centralized logging from sandbox Promoted Jetty Centralized + + moved centralized logging and verifier back to sandbox moved centraliz moved + centralized logging and verifier back to sandbox moved centraliz moved + centralized logging and verifier back to sandbox Moved centralized logging + and verifier back to sandbox + + promoted jetty centralized logging from sandbox promoted jetty central + promoted jetty centralized logging from sandbox promoted jetty central + promoted jetty centralized logging from sandbox Promoted Jetty Centralized Logging from Sandbox - + promoted jetty webapp verifier from sandbox Promoted Jetty WebApp Verifier + + promoted jetty webapp verifier from sandbox promoted jetty webapp veri + promoted jetty webapp verifier from sandbox promoted jetty webapp veri + promoted jetty webapp verifier from sandbox Promoted Jetty WebApp Verifier from Sandbox - + refactored continuation test harnessess Refactored continuation test + + refactored continuation test harnessess refactored continuation test + refactored continuation test harnessess refactored continuation test + refactored continuation test harnessess Refactored continuation test harnessess jetty-7.0.0.v20091005 - 05 October 2009 @@ -5342,13 +5523,21 @@ jetty-6.1.21 - 22 September 2009 + JETTY-1113 IllegalStateException when adding servlet filters programmatically + JETTY-1114 Unsynchronize webapp classloader getResource - + fix defaultservlettest for windows Fix DefaultServletTest for windows - + include tmp directory sweeper in build Include tmp directory sweeper in + + fix defaultservlettest for windows fix defaultservlettest for windows fix + defaultservlettest for windows fix defaultservlettest for windows fix + defaultservlettest for windows Fix DefaultServletTest for windows + + include tmp directory sweeper in build include tmp directory sweeper i + include tmp directory sweeper in build include tmp directory sweeper i + include tmp directory sweeper in build Include tmp directory sweeper in build - + streamline jetty-jboss build, update sar to queuedthreadpool Streamline + + streamline jetty-jboss build, update sar to queuedthreadpool streamlin + streamline jetty-jboss build, update sar to queuedthreadpool streamlin + streamline jetty-jboss build, update sar to queuedthreadpool Streamline jetty-jboss build, update sar to QueuedThreadPool - + update jetty implementation of com.sun.net.httpserver.* Update Jetty - implementation of com.sun.net.httpserver.* + + update jetty implementation of com.sun.net.httpserver.* update jetty u + update jetty implementation of com.sun.net.httpserver.* update jetty update + jetty implementation of com.sun.net.httpserver.* Update Jetty implementation + of com.sun.net.httpserver.* jetty-7.0.0.RC6 - 21 September 2009 + 280723 Add non blocking statistics handler @@ -5387,12 +5576,19 @@ jetty-7.0.0.RC6 - 21 September 2009 + JETTY-1112 Response fails if header exceeds buffer size + JETTY-1113 IllegalStateException when adding servlet filters programmatically - + copy version.txt to distro Copy VERSION.txt to distro - + fixed xss issue in cookiedump demo servlet. Fixed XSS issue in CookieDump - demo servlet. - + remove printlns from jetty-plus Remove printlns from jetty-plus - + tweak defaultservlettest under windows Tweak DefaultServletTest under - windows + + copy version.txt to distro copy version.txt to distro copy version.txt copy + version.txt to distro copy version.txt to distro copy version.txt to distro + Copy VERSION.txt to distro + + fixed xss issue in cookiedump demo servlet. fixed xss issue in cookied fixed + xss issue in cookiedump demo servlet. fixed xss issue in cookied fixed xss + issue in cookiedump demo servlet. Fixed XSS issue in CookieDump demo + servlet. + + remove printlns from jetty-plus remove printlns from jetty-plus remove + remove printlns from jetty-plus remove printlns from jetty-plus remove + printlns from jetty-plus Remove printlns from jetty-plus + + tweak defaultservlettest under windows tweak defaultservlettest under tweak + defaultservlettest under windows tweak defaultservlettest under tweak + defaultservlettest under windows Tweak DefaultServletTest under windows jetty-6.1.20 - 27 August 2009 + 283513 Check endp.isOpen when blocking read @@ -5424,20 +5620,34 @@ jetty-6.1.20 - 27 August 2009 + JETTY-1086 Added UncheckedPrintWriter to avoid ignored EOFs + JETTY-1087 Chunked SSL non blocking input + JETTY-1098 Upgrade jsp to SJSAS-9_1_1-B60F-07_Jan_2009 - + added debughandler Added DebugHandler - + added getsubscriptions to cometd client Added getSubscriptions to cometd - client - + clarified cometd interval timeout and allow per client intervals Clarified + + added debughandler added debughandler added debughandler added debugha added + debughandler added debughandler added debughandler Added DebugHandler + + added getsubscriptions to cometd client added getsubscriptions to come added + getsubscriptions to cometd client added getsubscriptions to come added + getsubscriptions to cometd client Added getSubscriptions to cometd client + + clarified cometd interval timeout and allow per client intervals clari + clarified cometd interval timeout and allow per client intervals clari + clarified cometd interval timeout and allow per client intervals Clarified cometd interval timeout and allow per client intervals - + cometd-7 max latency config for lazy messages COMETD-7 max latency config + + cometd-7 max latency config for lazy messages cometd-7 max latency con + cometd-7 max latency config for lazy messages cometd-7 max latency con + cometd-7 max latency config for lazy messages COMETD-7 max latency config for lazy messages - + made unsubscribeall public on cometd client Made unSubscribeAll public on - cometd client - + removed clearing of queue in unsubscribeall for cometd client Removed + + made unsubscribeall public on cometd client made unsubscribeall public made + unsubscribeall public on cometd client made unsubscribeall public made + unsubscribeall public on cometd client Made unSubscribeAll public on cometd + client + + removed clearing of queue in unsubscribeall for cometd client removed + removed clearing of queue in unsubscribeall for cometd client removed + removed clearing of queue in unsubscribeall for cometd client Removed clearing of queue in unSubscribeAll for cometd client - + update main.main method to call setwar Update Main.main method to call + + update main.main method to call setwar update main.main method to call + update main.main method to call setwar update main.main method to call + update main.main method to call setwar Update Main.main method to call setWar - + update test-jndi and test-annotation examples for atomikos 3.5.5 Update + + update test-jndi and test-annotation examples for atomikos 3.5.5 updat + update test-jndi and test-annotation examples for atomikos 3.5.5 updat + update test-jndi and test-annotation examples for atomikos 3.5.5 Update test-jndi and test-annotation examples for atomikos 3.5.5 jetty-7.0.0.RC5 - 27 August 2009 @@ -5492,7 +5702,9 @@ jetty-7.0.0.RC4 - 18 August 2009 + JETTY-1079 ResourceCollection.toString + JETTY-1080 Ignore files that would be extracted outside the destination directory when unpacking WARs - + added discoverable start options Added discoverable start options + + added discoverable start options added discoverable start options adde added + discoverable start options added discoverable start options added + discoverable start options Added discoverable start options jetty-7.0.0.RC3 - 07 August 2009 + 277403 remove system properties @@ -5503,7 +5715,9 @@ jetty-7.0.0.RC3 - 07 August 2009 + 283513 Check endp.isOpen when blocking read + 285697 extract parameters if dispatch has query + JETTY-1074 JMX thread manipulation - + improved deferred authentication handling Improved deferred authentication + + improved deferred authentication handling improved deferred authentica + improved deferred authentication handling improved deferred authentica + improved deferred authentication handling Improved deferred authentication handling jetty-7.0.0.RC2 - 29 June 2009 @@ -5514,14 +5728,22 @@ jetty-7.0.0.RC2 - 29 June 2009 + 284510 Enhance jetty-start for diagnosis and unit testing + 284981 Implement a cross-origin filter + 285006 fix AbstractConnector NPE during shutdown - + added debughandler Added DebugHandler - + added javautillog for jetty logging to java.util.logging framework Added + + added debughandler added debughandler added debughandler added debugha added + debughandler added debughandler added debughandler Added DebugHandler + + added javautillog for jetty logging to java.util.logging framework add added + javautillog for jetty logging to java.util.logging framework add added + javautillog for jetty logging to java.util.logging framework Added JavaUtilLog for Jetty logging to java.util.logging framework - + backport jetty-8 annotation parsing to jetty-7 backport jetty-8 annotation + + backport jetty-8 annotation parsing to jetty-7 backport jetty-8 annota + backport jetty-8 annotation parsing to jetty-7 backport jetty-8 annota + backport jetty-8 annotation parsing to jetty-7 backport jetty-8 annotation parsing to jetty-7 - + disassociate method on identityservice Disassociate method on - IdentityService - + improved handling of overlays and resourcecollections Improved handling of + + disassociate method on identityservice disassociate method on disassoc + disassociate method on identityservice disassociate method on disassociate + method on identityservice Disassociate method on IdentityService + + improved handling of overlays and resourcecollections improved handlin + improved handling of overlays and resourcecollections improved handlin + improved handling of overlays and resourcecollections Improved handling of overlays and resourceCollections jetty-7.0.0.RC1 - 15 June 2009 @@ -5558,19 +5780,34 @@ jetty-7.0.0.M3 - 20 June 2009 + 279725 Support 100 and 102 expectations + 280707 client.HttpConnection does not catch and handle non-IOExceptions + 281470 Handle the case where request.PathInfo() should be "/*" - + added continuationthrowable Added ContinuationThrowable + + added continuationthrowable added continuationthrowable added added + continuationthrowable added continuationthrowable added + continuationthrowable Added ContinuationThrowable + added webappcontext.setconfigurationdiscovered for servlet 3.0 feature added + webappcontext.setconfigurationdiscovered for servlet 3.0 feature added + webappcontext.setconfigurationdiscovered for servlet 3.0 feature added WebAppContext.setConfigurationDiscovered for servlet 3.0 features - + fixed race with expired async listeners fixed race with expired async - listeners - + numerous cleanups from static code analysis Numerous cleanups from static + + fixed race with expired async listeners fixed race with expired async fixed + race with expired async listeners fixed race with expired async fixed race + with expired async listeners fixed race with expired async listeners + + numerous cleanups from static code analysis numerous cleanups from sta + numerous cleanups from static code analysis numerous cleanups from sta + numerous cleanups from static code analysis Numerous cleanups from static code analysis - + portable continuations for jetty6 and servlet3 Portable continuations for + + portable continuations for jetty6 and servlet3 portable continuations + portable continuations for jetty6 and servlet3 portable continuations + portable continuations for jetty6 and servlet3 Portable continuations for jetty6 and servlet3 - + refactored abstractbuffers to httpbuffers for performance Refactored + + refactored abstractbuffers to httpbuffers for performance refactored + refactored abstractbuffers to httpbuffers for performance refactored + refactored abstractbuffers to httpbuffers for performance Refactored AbstractBuffers to HttpBuffers for performance + refactored configuration mechanism refactored configuration mechanism - + refactored continuations to only support response wrapping Refactored + refactored configuration mechanism refactored configuration mechanism + refactored configuration mechanism refactored configuration mechanism + + refactored continuations to only support response wrapping refactored + refactored continuations to only support response wrapping refactored + refactored continuations to only support response wrapping Refactored continuations to only support response wrapping jetty-7.0.0.M2 - 18 May 2009 @@ -5607,8 +5844,9 @@ jetty-6.1.18 - 16 May 2009 jetty-5.1.15 - 18 May 2009 + JETTY-418 synchronized load class + JETTY-1004 CERT VU402580 Canonical path handling includes ? in path segment - + fixes for cert438616-cert237888-cert21284 Fixes for - CERT438616-CERT237888-CERT21284 + + fixes for cert438616-cert237888-cert21284 fixes for fixes for fixes for + cert438616-cert237888-cert21284 fixes for fixes for + cert438616-cert237888-cert21284 Fixes for CERT438616-CERT237888-CERT21284 jetty-6.1.17 - 30 April 2009 + JETTY-936 Make optional dispatching to welcome files as servlets @@ -5639,13 +5877,20 @@ jetty-7.0.0.M1 - 22 April 2009 + 273153 Test for Nested references in DispatchServlet + JETTY-695 Handler dump + JETTY-983 DefaultServlet generates accept-ranges for cached/gzip content - + initial support for loginservice.logout Initial support for - LoginService.logout - + removed httpconnection specifics from connection dispatching Removed - HTTPConnection specifics from connection dispatching - + reworked authentication for deferred authentication Reworked authentication + + initial support for loginservice.logout initial support for initial su + initial support for loginservice.logout initial support for initial support + for loginservice.logout Initial support for LoginService.logout + + removed httpconnection specifics from connection dispatching removed r + removed httpconnection specifics from connection dispatching removed removed + httpconnection specifics from connection dispatching Removed HTTPConnection + specifics from connection dispatching + + reworked authentication for deferred authentication reworked authentic + reworked authentication for deferred authentication reworked authentic + reworked authentication for deferred authentication Reworked authentication for deferred authentication - + reworked jmx for new layout Reworked JMX for new layout + + reworked jmx for new layout reworked jmx for new layout reworked jmx f + reworked jmx for new layout reworked jmx for new layout reworked jmx for new + layout Reworked JMX for new layout jetty-6.1.16 - 01 April 2009 + JETTY-702 Create "jetty-tasks.xml" for the Ant plugin @@ -5759,8 +6004,12 @@ jetty-7.0.0.M0 - 27 March 2009 + JETTY-953 SSL keystore file input stream is not being closed directly + JETTY-956 SslSelectChannelConnector - password should be the default value of keyPassword if not specified - + moved to org.eclipse packages moved to org.eclipse packages - + simplified handlercontainer api simplified HandlerContainer API + + moved to org.eclipse packages moved to org.eclipse packages moved to moved + to org.eclipse packages moved to org.eclipse packages moved to org.eclipse + packages moved to org.eclipse packages + + simplified handlercontainer api simplified handlercontainer api simpli + simplified handlercontainer api simplified handlercontainer api simplified + handlercontainer api simplified HandlerContainer API jetty-6.1.15 - 04 March 2009 + JETTY-923 BayeuxClient uses message pools to reduce memory footprint @@ -5812,7 +6061,9 @@ jetty-6.1.15.rc3 - 28 January 2009 jetty-6.1.15.rc2 - 23 January 2009 + JETTY-567 Delay in initial TLS Handshake With FireFox 3 beta5 and SslSelectChannelConnector - + adjustment to jetty-client assembly packaging adjustment to jetty-client + + adjustment to jetty-client assembly packaging adjustment to jetty-clie + adjustment to jetty-client assembly packaging adjustment to jetty-clie + adjustment to jetty-client assembly packaging adjustment to jetty-client assembly packaging jetty-6.1.15.pre0 - 20 January 2009 @@ -6080,7 +6331,9 @@ jetty-7.0.0pre3 - 06 August 2008 with byte value 0) + JETTY-675 ServletContext.getRealPath("") returns null instead of returning the root dir of the webapp - + upgrade jsp 2.1 to sjsas-9_1_02-b04-11_apr_2008 Upgrade jsp 2.1 to + + upgrade jsp 2.1 to sjsas-9_1_02-b04-11_apr_2008 upgrade jsp 2.1 to upg + upgrade jsp 2.1 to sjsas-9_1_02-b04-11_apr_2008 upgrade jsp 2.1 to upgrade + jsp 2.1 to sjsas-9_1_02-b04-11_apr_2008 Upgrade jsp 2.1 to SJSAS-9_1_02-B04-11_Apr_2008 jetty-6.1.12rc1 - 01 August 2008 @@ -6132,7 +6385,9 @@ jetty-6.1.12rc1 - 01 August 2008 + JETTY-667 HttpClient handles chunked content + JETTY-669 Http methods other than GET and POST should not have error page content - + upgrade jsp 2.1 to sjsas-9_1_02-b04-11_apr_2008 Upgrade jsp 2.1 to + + upgrade jsp 2.1 to sjsas-9_1_02-b04-11_apr_2008 upgrade jsp 2.1 to upg + upgrade jsp 2.1 to sjsas-9_1_02-b04-11_apr_2008 upgrade jsp 2.1 to upgrade + jsp 2.1 to sjsas-9_1_02-b04-11_apr_2008 Upgrade jsp 2.1 to SJSAS-9_1_02-B04-11_Apr_2008 jetty-7.0.0pre2 - 30 June 2008 @@ -6197,7 +6452,9 @@ jetty-6.1.10 - 20 May 2008 + JETTY-566 allow for non-blocking behavior in jetty maven plugin + JETTY-572 unique cometd client ID + JETTY-579 osgi fixes with management and servlet resources - + use queuedthreadpool as default Use QueuedThreadPool as default + + use queuedthreadpool as default use queuedthreadpool as default use use + queuedthreadpool as default use queuedthreadpool as default use + queuedthreadpool as default Use QueuedThreadPool as default jetty-7.0.0pre1 - 03 May 2008 + JETTY-440 allow file name patterns for jsp compilation for jspc plugin @@ -6205,14 +6462,24 @@ jetty-7.0.0pre1 - 03 May 2008 + JETTY-558 optional handling of X-Forwarded-For/Host/Server + JETTY-559 ignore unsupported shutdownOutput + JETTY-566 allow for non-blocking behavior in jetty maven plugin - + address osgi bundling issue relating to build resources address osgi - bundling issue relating to build resources - + allow annotations example to be built regularly, copy to contexts-avai Allow + + address osgi bundling issue relating to build resources address osgi a + address osgi bundling issue relating to build resources address osgi address + osgi bundling issue relating to build resources address osgi bundling issue + relating to build resources + + allow annotations example to be built regularly, copy to contexts-avai allow + annotations example to be built regularly, copy to contexts-avai allow + annotations example to be built regularly, copy to contexts-avai Allow annotations example to be built regularly, copy to contexts-available - + improved suspend examples Improved suspend examples - + make annotations example consistent with servlet 3.0 Make annotations - example consistent with servlet 3.0 - + refactor jndi impl to simplify Refactor JNDI impl to simplify + + improved suspend examples improved suspend examples improved suspend + improved suspend examples improved suspend examples improved suspend + examples Improved suspend examples + + make annotations example consistent with servlet 3.0 make annotations make + annotations example consistent with servlet 3.0 make annotations make + annotations example consistent with servlet 3.0 Make annotations example + consistent with servlet 3.0 + + refactor jndi impl to simplify refactor jndi impl to simplify refactor + refactor jndi impl to simplify refactor jndi impl to simplify refactor jndi + impl to simplify Refactor JNDI impl to simplify jetty-7.0.0pre0 - 21 April 2008 + JETTY-282 Support manually-triggered reloading by maven plugin @@ -6252,24 +6519,45 @@ jetty-7.0.0pre0 - 21 April 2008 + JETTY-556 Encode all URI fragments + JETTY-557 Allow ServletContext.setAttribute before start + JETTY-560 Allow decoupling of jndi names in web.xml - + added option to dispatch to suspended requests. Added option to dispatch to + + added option to dispatch to suspended requests. added option to dispat added + option to dispatch to suspended requests. added option to dispat added + option to dispatch to suspended requests. Added option to dispatch to suspended requests. - + bayeuxclient use a single connection for polling BayeuxClient use a single + + bayeuxclient use a single connection for polling bayeuxclient use a si + bayeuxclient use a single connection for polling bayeuxclient use a si + bayeuxclient use a single connection for polling BayeuxClient use a single connection for polling - + delay 100 continues until getinputstream Delay 100 continues until - getInputStream - + ensure jotm tx mgr can be found in jetty-env.xml Ensure Jotm tx mgr can be + + delay 100 continues until getinputstream delay 100 continues until del delay + 100 continues until getinputstream delay 100 continues until delay 100 + continues until getinputstream Delay 100 continues until getInputStream + + ensure jotm tx mgr can be found in jetty-env.xml ensure jotm tx mgr ca + ensure jotm tx mgr can be found in jetty-env.xml ensure jotm tx mgr ca + ensure jotm tx mgr can be found in jetty-env.xml Ensure Jotm tx mgr can be found in jetty-env.xml - + httpclient supports pipelined request HttpClient supports pipelined request - + jetty-6.1.8 changes Jetty-6.1.8 Changes - + make javax.servlet.jsp optional osgi import for jetty module Make + + httpclient supports pipelined request httpclient supports pipelined re + httpclient supports pipelined request httpclient supports pipelined re + httpclient supports pipelined request HttpClient supports pipelined request + + jetty-6.1.8 changes jetty-6.1.8 changes jetty-6.1.8 changes jetty-6.1. + jetty-6.1.8 changes jetty-6.1.8 changes jetty-6.1.8 changes Jetty-6.1.8 + Changes + + make javax.servlet.jsp optional osgi import for jetty module make make make + javax.servlet.jsp optional osgi import for jetty module make make + javax.servlet.jsp optional osgi import for jetty module Make javax.servlet.jsp optional osgi import for jetty module - + queuedthreadpool default QueuedThreadPool default - + refactor of continuation towards servlet 3.0 proposal Refactor of - Continuation towards servlet 3.0 proposal - + renamed modules management and naming to jmx and jndi. Renamed modules + + queuedthreadpool default queuedthreadpool default queuedthreadpool def + queuedthreadpool default queuedthreadpool default queuedthreadpool default + QueuedThreadPool default + + refactor of continuation towards servlet 3.0 proposal refactor of refa + refactor of continuation towards servlet 3.0 proposal refactor of refactor + of continuation towards servlet 3.0 proposal Refactor of Continuation + towards servlet 3.0 proposal + + renamed modules management and naming to jmx and jndi. renamed modules + renamed modules management and naming to jmx and jndi. renamed modules + renamed modules management and naming to jmx and jndi. Renamed modules management and naming to jmx and jndi. - + retryrequest exception now extends threaddeath RetryRequest exception now + + retryrequest exception now extends threaddeath retryrequest exception + retryrequest exception now extends threaddeath retryrequest exception + retryrequest exception now extends threaddeath RetryRequest exception now extends ThreadDeath jetty-6.1.9 - 26 March 2008 @@ -6285,9 +6573,13 @@ jetty-6.1.9 - 26 March 2008 + JETTY-535 Fixed Bayeux server side client memory leak + JETTY-538 test harness fix for windows + JETTY-541 Cometd per client timeouts - + ensure jotm tx mgr can be found in jetty-env.xml Ensure Jotm tx mgr can be + + ensure jotm tx mgr can be found in jetty-env.xml ensure jotm tx mgr ca + ensure jotm tx mgr can be found in jetty-env.xml ensure jotm tx mgr ca + ensure jotm tx mgr can be found in jetty-env.xml Ensure Jotm tx mgr can be found in jetty-env.xml - + make javax.servlet.jsp optional osgi import for jetty module Make + + make javax.servlet.jsp optional osgi import for jetty module make make make + javax.servlet.jsp optional osgi import for jetty module make make + javax.servlet.jsp optional osgi import for jetty module Make javax.servlet.jsp optional osgi import for jetty module jetty-6.1.8 - 28 February 2008 @@ -6311,32 +6603,65 @@ jetty-6.1.8 - 28 February 2008 + JETTY-513 Terracotta session replication does not work when the initial page on each server does not set any attributes + JETTY-515 Timer is missing scavenging Task in HashSessionManager - + add "mvn jetty:stop" Add "mvn jetty:stop" - + added bayeuxservice Added BayeuxService - + added json.convertor and non static json instances Added JSON.Convertor and - non static JSON instances - + added queuedthreadpool Added QueuedThreadPool - + add removehandler(handler) method to handlercontainer interface add + + add "mvn jetty:stop" add "mvn jetty:stop" add "mvn jetty:stop" add "mv add + "mvn jetty:stop" add "mvn jetty:stop" add "mvn jetty:stop" Add "mvn + jetty:stop" + + added bayeuxservice added bayeuxservice added bayeuxservice added added + bayeuxservice added bayeuxservice added bayeuxservice Added BayeuxService + + added json.convertor and non static json instances added json.converto added + json.convertor and non static json instances added json.converto added + json.convertor and non static json instances Added JSON.Convertor and non + static JSON instances + + added queuedthreadpool added queuedthreadpool added queuedthreadpool a added + queuedthreadpool added queuedthreadpool added queuedthreadpool Added + QueuedThreadPool + + add removehandler(handler) method to handlercontainer interface add ad add + removehandler(handler) method to handlercontainer interface add add + removehandler(handler) method to handlercontainer interface add removeHandler(Handler) method to HandlerContainer interface - + ajp handles bad mod_jk methods AJP handles bad mod_jk methods - + allow code ranges on errorpageerrorhandler Allow code ranges on - ErrorPageErrorHandler - + allow sessions to be periodically persisted to disk allow sessions to be + + ajp handles bad mod_jk methods ajp handles bad mod_jk methods ajp hand ajp + handles bad mod_jk methods ajp handles bad mod_jk methods ajp handles bad + mod_jk methods AJP handles bad mod_jk methods + + allow code ranges on errorpageerrorhandler allow code ranges on allow allow + code ranges on errorpageerrorhandler allow code ranges on allow code ranges + on errorpageerrorhandler Allow code ranges on ErrorPageErrorHandler + + allow sessions to be periodically persisted to disk allow sessions to allow + sessions to be periodically persisted to disk allow sessions to allow + sessions to be periodically persisted to disk allow sessions to be periodically persisted to disk - + cookie support in bayeuxclient Cookie support in BayeuxClient - + fixed json negative numbers Fixed JSON negative numbers - + further optimizations and improvements of cometd further Optimizations and + + cookie support in bayeuxclient cookie support in bayeuxclient cookie s + cookie support in bayeuxclient cookie support in bayeuxclient cookie support + in bayeuxclient Cookie support in BayeuxClient + + fixed json negative numbers fixed json negative numbers fixed json neg fixed + json negative numbers fixed json negative numbers fixed json negative + numbers Fixed JSON negative numbers + + further optimizations and improvements of cometd further optimizations + further optimizations and improvements of cometd further optimizations + further optimizations and improvements of cometd further Optimizations and improvements of Cometd - + grizzly fixed for posts grizzly fixed for posts - + improved bayeux api Improved Bayeux API - + improved cometd timeout handling Improved Cometd timeout handling - + json unquotes / JSON unquotes / - + long cache for json Long cache for JSON - + optimizations and improvements of cometd, more pooled objects Optimizations + + grizzly fixed for posts grizzly fixed for posts grizzly fixed for post + grizzly fixed for posts grizzly fixed for posts grizzly fixed for posts + grizzly fixed for posts + + improved bayeux api improved bayeux api improved bayeux api improved b + improved bayeux api improved bayeux api improved bayeux api Improved Bayeux + API + + improved cometd timeout handling improved cometd timeout handling impr + improved cometd timeout handling improved cometd timeout handling improved + cometd timeout handling Improved Cometd timeout handling + + json unquotes / json unquotes / json unquotes / json unquotes / json + unquotes / json unquotes / json unquotes / JSON unquotes / + + long cache for json long cache for json long cache for json long cache long + cache for json long cache for json long cache for json Long cache for JSON + + optimizations and improvements of cometd, more pooled objects optimiza + optimizations and improvements of cometd, more pooled objects optimiza + optimizations and improvements of cometd, more pooled objects Optimizations and improvements of Cometd, more pooled objects - + optimized quotedstringtokenizer.quote() Optimized - QuotedStringTokenizer.quote() + + optimized quotedstringtokenizer.quote() optimized optimized optimized + quotedstringtokenizer.quote() optimized optimized + quotedstringtokenizer.quote() Optimized QuotedStringTokenizer.quote() + remove duplicate commons-logging jars and include sslengine in jboss s + remove duplicate commons-logging jars and include sslengine in jboss s + remove duplicate commons-logging jars and include sslengine in jboss s Remove duplicate commons-logging jars and include sslengine in jboss sar jetty-6.1.7 - 22 December 2007 @@ -6347,19 +6672,35 @@ jetty-6.1.7 - 22 December 2007 + JETTY-474 Fixed case sensitivity issue with HttpFields + JETTY-486 Improved jetty.sh script + JETTY-487 Handle empty chunked request - + add "mvn jetty:stop" Add "mvn jetty:stop" - + added bayeuxservice Added BayeuxService - + added json.convertor and non static json instances Added JSON.Convertor and - non static JSON instances - + allow sessions to be periodically persisted to disk allow sessions to be + + add "mvn jetty:stop" add "mvn jetty:stop" add "mvn jetty:stop" add "mv add + "mvn jetty:stop" add "mvn jetty:stop" add "mvn jetty:stop" Add "mvn + jetty:stop" + + added bayeuxservice added bayeuxservice added bayeuxservice added added + bayeuxservice added bayeuxservice added bayeuxservice Added BayeuxService + + added json.convertor and non static json instances added json.converto added + json.convertor and non static json instances added json.converto added + json.convertor and non static json instances Added JSON.Convertor and non + static JSON instances + + allow sessions to be periodically persisted to disk allow sessions to allow + sessions to be periodically persisted to disk allow sessions to allow + sessions to be periodically persisted to disk allow sessions to be periodically persisted to disk - + cookie support in bayeuxclient Cookie support in BayeuxClient - + grizzly fixed for posts grizzly fixed for posts + + cookie support in bayeuxclient cookie support in bayeuxclient cookie s + cookie support in bayeuxclient cookie support in bayeuxclient cookie support + in bayeuxclient Cookie support in BayeuxClient + + grizzly fixed for posts grizzly fixed for posts grizzly fixed for post + grizzly fixed for posts grizzly fixed for posts grizzly fixed for posts + grizzly fixed for posts + jetty-6.1 branch created from 6.1.6 and r593 of jetty-contrib trunk jetty-6.1 branch created from 6.1.6 and r593 of jetty-contrib trunk - + optimizations and improvements of cometd, more pooled objects Optimizations + jetty-6.1 branch created from 6.1.6 and r593 of jetty-contrib trunk + jetty-6.1 branch created from 6.1.6 and r593 of jetty-contrib trunk + + optimizations and improvements of cometd, more pooled objects optimiza + optimizations and improvements of cometd, more pooled objects optimiza + optimizations and improvements of cometd, more pooled objects Optimizations and improvements of Cometd, more pooled objects - + update java5 patch Update java5 patch + + update java5 patch update java5 patch update java5 patch update java5 + update java5 patch update java5 patch update java5 patch Update java5 patch jetty-6.1.6 - 18 November 2007 + JETTY-455 Optional cometd id @@ -6367,8 +6708,12 @@ jetty-6.1.6 - 18 November 2007 + JETTY-461 fixed cometd unknown channel + JETTY-464 typo in ErrorHandler + JETTY-465 System.exit() in constructor exception for MultiPartOutputStream - + rudimentary debian packaging rudimentary debian packaging + + rudimentary debian packaging rudimentary debian packaging rudimentary + rudimentary debian packaging rudimentary debian packaging rudimentary debian + packaging rudimentary debian packaging + updated grizzly connector to 1.6.1 updated grizzly connector to 1.6.1 + updated grizzly connector to 1.6.1 updated grizzly connector to 1.6.1 + updated grizzly connector to 1.6.1 updated grizzly connector to 1.6.1 jetty-6.1.6rc1 - 05 November 2007 + JETTY-388 Handle utf-16 and other multibyte non-utf-8 form content @@ -6385,20 +6730,37 @@ jetty-6.1.6rc1 - 05 November 2007 + JETTY-454 handle exceptions with themselves as root cause + JETTY-456 allow null keystore for osX + JETTY-457 AJP certificate chains - + added configuration file for capturing stderr and stdout Added configuration - file for capturing stderr and stdout - + 38616 CERT VU#38616 handle single quotes in cookie names. - + give bayeux timer name Give bayeux timer name - + give terracotta session scavenger a name Give Terracotta session scavenger a - name - + housekeeping on poms Housekeeping on poms - + improved json parsing from readers Improved JSON parsing from Readers - + jetty eclipse plugin 1.0.1: force copy of context file on redeploy Jetty - Eclipse Plugin 1.0.1: force copy of context file on redeploy - + moved some impl classes from jsp-api-2.1 to jsp-2.1 Moved some impl classes - from jsp-api-2.1 to jsp-2.1 - + updated for dojo 1.0(rc) cometd Updated for dojo 1.0(rc) cometd - + upgrade jsp 2.1 to sjsas-9_1-b58g-fcs-08_sept_2007 Upgrade jsp 2.1 to + + added configuration file for capturing stderr and stdout added configu added + configuration file for capturing stderr and stdout added configu added + configuration file for capturing stderr and stdout Added configuration file + for capturing stderr and stdout + + 38616 CERT VU#38616 handle single quotes in cookie names + + give bayeux timer name give bayeux timer name give bayeux timer name g give + bayeux timer name give bayeux timer name give bayeux timer name Give bayeux + timer name + + give terracotta session scavenger a name give terracotta session scave give + terracotta session scavenger a name give terracotta session scave give + terracotta session scavenger a name Give Terracotta session scavenger a name + + housekeeping on poms housekeeping on poms housekeeping on poms houseke + housekeeping on poms housekeeping on poms housekeeping on poms Housekeeping + on poms + + improved json parsing from readers improved json parsing from readers + improved json parsing from readers improved json parsing from readers + improved json parsing from readers Improved JSON parsing from Readers + + jetty eclipse plugin 1.0.1: force copy of context file on redeploy jet jetty + eclipse plugin 1.0.1: force copy of context file on redeploy jet jetty + eclipse plugin 1.0.1: force copy of context file on redeploy Jetty Eclipse + Plugin 1.0.1: force copy of context file on redeploy + + moved some impl classes from jsp-api-2.1 to jsp-2.1 moved some impl cl moved + some impl classes from jsp-api-2.1 to jsp-2.1 moved some impl cl moved some + impl classes from jsp-api-2.1 to jsp-2.1 Moved some impl classes from + jsp-api-2.1 to jsp-2.1 + + updated for dojo 1.0(rc) cometd updated for dojo 1.0(rc) cometd update + updated for dojo 1.0(rc) cometd updated for dojo 1.0(rc) cometd updated for + dojo 1.0(rc) cometd Updated for dojo 1.0(rc) cometd + + upgrade jsp 2.1 to sjsas-9_1-b58g-fcs-08_sept_2007 upgrade jsp 2.1 to + upgrade jsp 2.1 to sjsas-9_1-b58g-fcs-08_sept_2007 upgrade jsp 2.1 to + upgrade jsp 2.1 to sjsas-9_1-b58g-fcs-08_sept_2007 Upgrade jsp 2.1 to SJSAS-9_1-B58G-FCS-08_Sept_2007 jetty-6.1.6rc0 - 03 October 2007 @@ -6420,67 +6782,135 @@ jetty-6.1.6rc0 - 03 October 2007 + JETTY-425 Handle duplicate stop calls better + JETTY-430 improved cometd logging + JETTY-431 HttpClient soTimeout - + add ability to persist sessions with hashsessionmanager Add ability to - persist sessions with HashSessionManager - + added concatservlet to combine javascript and css Added ConcatServlet to - combine javascript and css - + added jetty.lib system property to start.config Added jetty.lib system - property to start.config - + added jpackage rpm support Added JPackage RPM support - + added json.convertable Added JSON.Convertable - + adding setusername,setgroupname to setuid and mavenizing native build Adding + + add ability to persist sessions with hashsessionmanager add ability to add + ability to persist sessions with hashsessionmanager add ability to add + ability to persist sessions with hashsessionmanager Add ability to persist + sessions with HashSessionManager + + added concatservlet to combine javascript and css added concatservlet added + concatservlet to combine javascript and css added concatservlet added + concatservlet to combine javascript and css Added ConcatServlet to combine + javascript and css + + added jetty.lib system property to start.config added jetty.lib system added + jetty.lib system property to start.config added jetty.lib system added + jetty.lib system property to start.config Added jetty.lib system property to + start.config + + added jpackage rpm support added jpackage rpm support added jpackage r added + jpackage rpm support added jpackage rpm support added jpackage rpm support + Added JPackage RPM support + + added json.convertable added json.convertable added json.convertable a added + json.convertable added json.convertable added json.convertable Added + JSON.Convertable + + adding setusername,setgroupname to setuid and mavenizing native build adding + setusername,setgroupname to setuid and mavenizing native build adding + setusername,setgroupname to setuid and mavenizing native build Adding setUsername,setGroupname to setuid and mavenizing native build - + add jetty.host system property Add jetty.host system property - + ajp13 fix on chunked post AJP13 Fix on chunked post - + allow properties files on the xmlconfiguration command line. Allow - properties files on the XmlConfiguration command line. - + allow scan interval to be set after scanner started Allow scan interval to - be set after Scanner started - + avoid full exception in window between blockforoutput and remote close Avoid - FULL exception in window between blockForOutput and remote close + + add jetty.host system property add jetty.host system property add jett add + jetty.host system property add jetty.host system property add jetty.host + system property Add jetty.host system property + + ajp13 fix on chunked post ajp13 fix on chunked post ajp13 fix on chunk ajp13 + fix on chunked post ajp13 fix on chunked post ajp13 fix on chunked post + AJP13 Fix on chunked post + + allow properties files on the xmlconfiguration command line. allow all allow + properties files on the xmlconfiguration command line. allow allow + properties files on the xmlconfiguration command line. Allow properties + files on the XmlConfiguration command line. + + allow scan interval to be set after scanner started allow scan interva allow + scan interval to be set after scanner started allow scan interva allow scan + interval to be set after scanner started Allow scan interval to be set after + Scanner started + + avoid full exception in window between blockforoutput and remote close avoid + full exception in window between blockforoutput and remote close avoid full + exception in window between blockforoutput and remote close Avoid FULL + exception in window between blockForOutput and remote close + cached user agents strings in the /org/mortbay/jetty/useragents resour + cached user agents strings in the /org/mortbay/jetty/useragents resour + cached user agents strings in the /org/mortbay/jetty/useragents resour Cached user agents strings in the /org/mortbay/jetty/useragents resource + cve-2007-5615 added protection for response splitting with bad headers + cve-2007-5615 added protection for response splitting with bad headers + cve-2007-5615 added protection for response splitting with bad headers CVE-2007-5615 Added protection for response splitting with bad headers. - + ensure session is completed only when leaving context. Ensure session is - completed only when leaving context. - + fix cached header optimization for extra characters Fix cached header - optimization for extra characters - + fix host header for async client Fix Host header for async client - + fix patch for java5 to include cometd module Fix patch for java5 to include - cometd module - + fix typo in async client onresponsetheader method name Fix typo in async - client onResponsetHeader method name - + give deployment file scanner threads a unique name Give deployment file - Scanner threads a unique name - + make default time format for requestlog match ncsa default Make default time + + ensure session is completed only when leaving context. ensure session ensure + session is completed only when leaving context. ensure session ensure + session is completed only when leaving context. Ensure session is completed + only when leaving context. + + fix cached header optimization for extra characters fix cached header fix + cached header optimization for extra characters fix cached header fix cached + header optimization for extra characters Fix cached header optimization for + extra characters + + fix host header for async client fix host header for async client fix fix + host header for async client fix host header for async client fix host + header for async client Fix Host header for async client + + fix patch for java5 to include cometd module fix patch for java5 to in fix + patch for java5 to include cometd module fix patch for java5 to in fix patch + for java5 to include cometd module Fix patch for java5 to include cometd + module + + fix typo in async client onresponsetheader method name fix typo in asy fix + typo in async client onresponsetheader method name fix typo in asy fix typo + in async client onresponsetheader method name Fix typo in async client + onResponsetHeader method name + + give deployment file scanner threads a unique name give deployment fil give + deployment file scanner threads a unique name give deployment fil give + deployment file scanner threads a unique name Give deployment file Scanner + threads a unique name + + make default time format for requestlog match ncsa default make defaul make + default time format for requestlog match ncsa default make defaul make + default time format for requestlog match ncsa default Make default time format for RequestLog match NCSA default - + make mx4j used only if runtime uses jdk<1.5 Make mx4j used only if runtime - uses jdk<1.5 - + moved grizzly to contrib Moved Grizzly to contrib - + prevent infinite loop on stopping with temp dir Prevent infinite loop on + + make mx4j used only if runtime uses jdk<1.5 make mx4j used only if run make + mx4j used only if runtime uses jdk<1.5 make mx4j used only if run make mx4j + used only if runtime uses jdk<1.5 Make mx4j used only if runtime uses + jdk<1.5 + + moved grizzly to contrib moved grizzly to contrib moved grizzly to con moved + grizzly to contrib moved grizzly to contrib moved grizzly to contrib Moved + Grizzly to contrib + + prevent infinite loop on stopping with temp dir prevent infinite loop + prevent infinite loop on stopping with temp dir prevent infinite loop + prevent infinite loop on stopping with temp dir Prevent infinite loop on stopping with temp dir + removal of unneeded dependencies from management, maven-plugin, naming + removal of unneeded dependencies from management, maven-plugin, naming + removal of unneeded dependencies from management, maven-plugin, naming Removal of unneeded dependencies from management, maven-plugin, naming & plus poms - + setuid option to support setgid SetUID option to support setgid - + tweak osgi manifests to remove unneeded imports Tweak OSGi manifests to - remove unneeded imports - + updated readme, test index.html file and jetty-plus.xml file Updated README, + + setuid option to support setgid setuid option to support setgid setuid + setuid option to support setgid setuid option to support setgid setuid + option to support setgid SetUID option to support setgid + + tweak osgi manifests to remove unneeded imports tweak osgi manifests t tweak + osgi manifests to remove unneeded imports tweak osgi manifests t tweak osgi + manifests to remove unneeded imports Tweak OSGi manifests to remove unneeded + imports + + updated readme, test index.html file and jetty-plus.xml file updated r + updated readme, test index.html file and jetty-plus.xml file updated r + updated readme, test index.html file and jetty-plus.xml file Updated README, test index.html file and jetty-plus.xml file - + update jasper2.1 to tag sjsas-9_1-b58c-fcs-22_aug_2007 Update jasper2.1 to + + update jasper2.1 to tag sjsas-9_1-b58c-fcs-22_aug_2007 update jasper2. + update jasper2.1 to tag sjsas-9_1-b58c-fcs-22_aug_2007 update jasper2. + update jasper2.1 to tag sjsas-9_1-b58c-fcs-22_aug_2007 Update jasper2.1 to tag SJSAS-9_1-B58C-FCS-22_Aug_2007 - + update terracotta to 2.4.1 and exclude ssl classes Update terracotta to + + update terracotta to 2.4.1 and exclude ssl classes update terracotta t + update terracotta to 2.4.1 and exclude ssl classes update terracotta t + update terracotta to 2.4.1 and exclude ssl classes Update terracotta to 2.4.1 and exclude ssl classes - + use terracotta repo for build; make jetty a terracotta module Use terracotta + + use terracotta repo for build; make jetty a terracotta module use terr use + terracotta repo for build; make jetty a terracotta module use terr use + terracotta repo for build; make jetty a terracotta module Use terracotta repo for build; make jetty a terracotta module - + utf-8 for bayeux client UTF-8 for bayeux client + + utf-8 for bayeux client utf-8 for bayeux client utf-8 for bayeux clien utf-8 + for bayeux client utf-8 for bayeux client utf-8 for bayeux client UTF-8 for + bayeux client jetty-6.1.5 - 19 July 2007 + JETTY-392 updated LikeJettyXml example - + fixed gzipfilter for dispatchers Fixed GzipFilter for dispatchers - + fixed reset of reason Fixed reset of reason - + upgrade to jasper 2.1 tag sjsas-9_1-b50g-beta3-27_june_2007 Upgrade to + + fixed gzipfilter for dispatchers fixed gzipfilter for dispatchers fixe fixed + gzipfilter for dispatchers fixed gzipfilter for dispatchers fixed gzipfilter + for dispatchers Fixed GzipFilter for dispatchers + + fixed reset of reason fixed reset of reason fixed reset of reason fixe fixed + reset of reason fixed reset of reason fixed reset of reason Fixed reset of + reason + + upgrade to jasper 2.1 tag sjsas-9_1-b50g-beta3-27_june_2007 upgrade to + upgrade to jasper 2.1 tag sjsas-9_1-b50g-beta3-27_june_2007 upgrade to + upgrade to jasper 2.1 tag sjsas-9_1-b50g-beta3-27_june_2007 Upgrade to Jasper 2.1 tag SJSAS-9_1-B50G-BETA3-27_June_2007 jetty-6.1.5rc0 - 15 July 0200 @@ -6495,38 +6925,66 @@ jetty-6.1.5rc0 - 15 July 0200 + JETTY-380 handle pipelines of more than 4 requests + JETTY-385 EncodeURL for new sessions from dispatch + JETTY-386 Allow // in file resources - + added gzipfilter and useragentfilter Added GzipFilter and UserAgentFilter - + dispatch sslengine expiry (non atomic) Dispatch SslEngine expiry (non + + added gzipfilter and useragentfilter added gzipfilter and useragentfil added + gzipfilter and useragentfilter added gzipfilter and useragentfil added + gzipfilter and useragentfilter Added GzipFilter and UserAgentFilter + + dispatch sslengine expiry (non atomic) dispatch sslengine expiry (non + dispatch sslengine expiry (non atomic) dispatch sslengine expiry (non + dispatch sslengine expiry (non atomic) Dispatch SslEngine expiry (non atomic) - + improved request log configuration options Improved Request log - configuration options - + make jetty plus example webapps use contextdeployer make jetty plus example - webapps use ContextDeployer - + make osgi manifests for jetty jars make OSGi manifests for jetty jars - + make slf4jlog impl public, add mbean descriptors Make SLF4JLog impl public, - add mbean descriptors - + protect sslselectchannelconnector from exceptions during close Protect + + improved request log configuration options improved request log improv + improved request log configuration options improved request log improved + request log configuration options Improved Request log configuration options + + make jetty plus example webapps use contextdeployer make jetty plus ex make + jetty plus example webapps use contextdeployer make jetty plus ex make jetty + plus example webapps use contextdeployer make jetty plus example webapps use + ContextDeployer + + make osgi manifests for jetty jars make osgi manifests for jetty jars make + osgi manifests for jetty jars make osgi manifests for jetty jars make osgi + manifests for jetty jars make OSGi manifests for jetty jars + + make slf4jlog impl public, add mbean descriptors make slf4jlog impl pu make + slf4jlog impl public, add mbean descriptors make slf4jlog impl pu make + slf4jlog impl public, add mbean descriptors Make SLF4JLog impl public, add + mbean descriptors + + protect sslselectchannelconnector from exceptions during close protect + protect sslselectchannelconnector from exceptions during close protect + protect sslselectchannelconnector from exceptions during close Protect SslSelectChannelConnector from exceptions during close - + remove call to open connectors in jetty.xml remove call to open connectors + + remove call to open connectors in jetty.xml remove call to open connec + remove call to open connectors in jetty.xml remove call to open connec + remove call to open connectors in jetty.xml remove call to open connectors in jetty.xml - + setuid option to only open connectors before setuid. SetUID option to only - open connectors before setUID. - + spr-3682 - dont hide forward attr in include. SPR-3682 - dont hide forward + + setuid option to only open connectors before setuid. setuid option to setuid + option to only open connectors before setuid. setuid option to setuid option + to only open connectors before setuid. SetUID option to only open connectors + before setUID. + + spr-3682 - dont hide forward attr in include. spr-3682 - dont hide for + spr-3682 - dont hide forward attr in include. spr-3682 - dont hide for + spr-3682 - dont hide forward attr in include. SPR-3682 - dont hide forward attr in include. - + update links on website update links on website - + update terracotta configs for tc 2.4 stable1 update terracotta configs for + + update links on website update links on website update links on websit + update links on website update links on website update links on website + update links on website + + update terracotta configs for tc 2.4 stable1 update terracotta configs + update terracotta configs for tc 2.4 stable1 update terracotta configs + update terracotta configs for tc 2.4 stable1 update terracotta configs for tc 2.4 stable1 - + update terracotta session clustering to terracotta 2.4 update terracotta + + update terracotta session clustering to terracotta 2.4 update terracot + update terracotta session clustering to terracotta 2.4 update terracot + update terracotta session clustering to terracotta 2.4 update terracotta session clustering to terracotta 2.4 - + upgrade to jasper 2.1 tag sjsas-9_1-b50g-beta3-27_june_2007 Upgrade to + + upgrade to jasper 2.1 tag sjsas-9_1-b50g-beta3-27_june_2007 upgrade to + upgrade to jasper 2.1 tag sjsas-9_1-b50g-beta3-27_june_2007 upgrade to + upgrade to jasper 2.1 tag sjsas-9_1-b50g-beta3-27_june_2007 Upgrade to Jasper 2.1 tag SJSAS-9_1-B50G-BETA3-27_June_2007 jetty-6.1.4 - 15 June 2007 + JETTY-370 ensure idleTimeout<=0 means connections never expire + JETTY-371 Fixed chunked HEAD response + JETTY-372 make test for cookie caching more rigorous - + fixed early open() call in nio connectors fixed early open() call in NIO - connectors + + fixed early open() call in nio connectors fixed early open() call in n fixed + early open() call in nio connectors fixed early open() call in n fixed early + open() call in nio connectors fixed early open() call in NIO connectors jetty-6.1.4rc1 - 10 June 2007 + JETTY-310 better exception when no filter file for cometd servlet @@ -6540,16 +6998,26 @@ jetty-6.1.4rc1 - 10 June 2007 + JETTY-362 More object locks + JETTY-365 make needClientAuth work on SslSelectChannelConnector + JETTY-366 JETTY-368 Improved bayeux disconnect - + async client improvements async client improvements - + fixed handling of large streamed files fixed handling of large streamed - files - + fixed synchronization conflict sslselectchannel and selectchannel Fixed + + async client improvements async client improvements async client async + client improvements async client improvements async client improvements + async client improvements + + fixed handling of large streamed files fixed handling of large streame fixed + handling of large streamed files fixed handling of large streame fixed + handling of large streamed files fixed handling of large streamed files + + fixed synchronization conflict sslselectchannel and selectchannel fixe fixed + synchronization conflict sslselectchannel and selectchannel fixe fixed + synchronization conflict sslselectchannel and selectchannel Fixed synchronization conflict SslSelectChannel and SelectChannel - + moved documentation for jetty and jspc maven plugins to wiki moved - documentation for jetty and jspc maven plugins to wiki - + optional static content cache Optional static content cache - + work around ibm jvm socket close issue Work around IBM JVM socket close - issue + + moved documentation for jetty and jspc maven plugins to wiki moved mov moved + documentation for jetty and jspc maven plugins to wiki moved moved + documentation for jetty and jspc maven plugins to wiki moved documentation + for jetty and jspc maven plugins to wiki + + optional static content cache optional static content cache optional s + optional static content cache optional static content cache optional static + content cache Optional static content cache + + work around ibm jvm socket close issue work around ibm jvm socket clos work + around ibm jvm socket close issue work around ibm jvm socket clos work + around ibm jvm socket close issue Work around IBM JVM socket close issue jetty-6.1.4rc0 - 01 June 2007 + JETTY-257 fixed comet cross domain @@ -6567,57 +7035,106 @@ jetty-6.1.4rc0 - 01 June 2007 + JETTY-345 fixed lost content with blocked NIO + JETTY-347 Fixed type util init + JETTY-352 Object locks - + add (commented out) jspc precompile to test-webapp Add (commented out) jspc + + add (commented out) jspc precompile to test-webapp add (commented out) add + (commented out) jspc precompile to test-webapp add (commented out) add + (commented out) jspc precompile to test-webapp Add (commented out) jspc precompile to test-webapp - + add ability to run cometd webapps to maven plugin Add ability to run cometd + + add ability to run cometd webapps to maven plugin add ability to run c add + ability to run cometd webapps to maven plugin add ability to run c add + ability to run cometd webapps to maven plugin Add ability to run cometd webapps to maven plugin - + add slf4j-api for upgraded version Add slf4j-api for upgraded version - + allow xmlconfiguration properties to be configured Allow XmlConfiguration + + add slf4j-api for upgraded version add slf4j-api for upgraded version add + slf4j-api for upgraded version add slf4j-api for upgraded version add + slf4j-api for upgraded version Add slf4j-api for upgraded version + + allow xmlconfiguration properties to be configured allow xmlconfigurat allow + xmlconfiguration properties to be configured allow xmlconfigurat allow + xmlconfiguration properties to be configured Allow XmlConfiguration properties to be configured - + change scope of fields for session Change scope of fields for Session - + delay ssl handshake until after dispatch in sslsocketconnector Delay ssl - handshake until after dispatch in sslSocketConnector - + fixed jsp close handling fixed JSP close handling - + fixed waiting continuation reset fixed waiting continuation reset - + improved date header handling improved date header handling - + optional send date header. server.setsenddateheader(boolean) Optional send + + change scope of fields for session change scope of fields for session + change scope of fields for session change scope of fields for session change + scope of fields for session Change scope of fields for Session + + delay ssl handshake until after dispatch in sslsocketconnector delay s delay + ssl handshake until after dispatch in sslsocketconnector delay s delay ssl + handshake until after dispatch in sslsocketconnector Delay ssl handshake + until after dispatch in sslSocketConnector + + fixed jsp close handling fixed jsp close handling fixed jsp close hand fixed + jsp close handling fixed jsp close handling fixed jsp close handling fixed + JSP close handling + + fixed waiting continuation reset fixed waiting continuation reset fixe fixed + waiting continuation reset fixed waiting continuation reset fixed waiting + continuation reset fixed waiting continuation reset + + improved date header handling improved date header handling improved d + improved date header handling improved date header handling improved date + header handling improved date header handling + + optional send date header. server.setsenddateheader(boolean) optional + optional send date header. server.setsenddateheader(boolean) optional + optional send date header. server.setsenddateheader(boolean) Optional send Date header. Server.setSendDateHeader(boolean) - + reorganized import of contrib modules Reorganized import of contrib modules - + set so_timeout during ssl handshake as an option on sslsocketconnector Set + + reorganized import of contrib modules reorganized import of contrib mo + reorganized import of contrib modules reorganized import of contrib mo + reorganized import of contrib modules Reorganized import of contrib modules + + set so_timeout during ssl handshake as an option on sslsocketconnector set + so_timeout during ssl handshake as an option on sslsocketconnector set + so_timeout during ssl handshake as an option on sslsocketconnector Set so_timeout during ssl handshake as an option on SslSocketConnector - + unified jmx configuration Unified JMX configuration - + updated junit to 3.8.2 Updated junit to 3.8.2 - + updated slf4j version to 1.3.1 Updated slf4j version to 1.3.1 - + update etc/jetty-ssl.xml with new handshake timeout setting update + + unified jmx configuration unified jmx configuration unified jmx unified jmx + configuration unified jmx configuration unified jmx configuration Unified + JMX configuration + + updated junit to 3.8.2 updated junit to 3.8.2 updated junit to 3.8.2 u + updated junit to 3.8.2 updated junit to 3.8.2 updated junit to 3.8.2 Updated + junit to 3.8.2 + + updated slf4j version to 1.3.1 updated slf4j version to 1.3.1 updated + updated slf4j version to 1.3.1 updated slf4j version to 1.3.1 updated slf4j + version to 1.3.1 Updated slf4j version to 1.3.1 + + update etc/jetty-ssl.xml with new handshake timeout setting update upd + update etc/jetty-ssl.xml with new handshake timeout setting update update + etc/jetty-ssl.xml with new handshake timeout setting update etc/jetty-ssl.xml with new handshake timeout setting jetty-6.1.3 - 04 May 2007 + JETTY-309 don't clear writable status until dispatch + JETTY-315 suppressed warning + JETTY-322 AJP13 cping and keep alive - + handle crlf for content in header optimization Handle CRLF for content in + + handle crlf for content in header optimization handle crlf for content + handle crlf for content in header optimization handle crlf for content + handle crlf for content in header optimization Handle CRLF for content in header optimization jetty-6.1.2 - 01 May 2007 + JETTY-322 fix ajp cpong response and close handling + JETTY-324 fix ant plugin + JETTY-328 updated jboss - + added static member definition in wadisessionmanager Added static member + + added static member definition in wadisessionmanager added static memb added + static member definition in wadisessionmanager added static memb added + static member definition in wadisessionmanager Added static member definition in WadiSessionManager - + fixed session invalidation error in wadisessionmanager Fixed session - invalidation error in WadiSessionManager - + improved unavailabile handling Improved unavailabile handling - + senderror resets output state sendError resets output state - + updated wadi to version 2.0-m3 Updated Wadi to version 2.0-M3 + + fixed session invalidation error in wadisessionmanager fixed session f fixed + session invalidation error in wadisessionmanager fixed session fixed session + invalidation error in wadisessionmanager Fixed session invalidation error in + WadiSessionManager + + improved unavailabile handling improved unavailabile handling improved + improved unavailabile handling improved unavailabile handling improved + unavailabile handling Improved unavailabile handling + + senderror resets output state senderror resets output state senderror + senderror resets output state senderror resets output state senderror resets + output state sendError resets output state + + updated wadi to version 2.0-m3 updated wadi to version 2.0-m3 updated + updated wadi to version 2.0-m3 updated wadi to version 2.0-m3 updated wadi + to version 2.0-m3 Updated Wadi to version 2.0-M3 jetty-6.1.2rc5 - 24 April 2007 + JETTY-305 delayed connection destroy + JETTY-309 handle close in multivalue connection fields + JETTY-314 fix for possible NPE in Request.isRequestedSessionIdValid - + allow jsp-file to be / or /* Allow jsp-file to be / or /* - + removed some compile warnings removed some compile warnings - + set default keystore for sslsocketconnector set default keystore for - SslSocketConnector + + allow jsp-file to be / or /* allow jsp-file to be / or /* allow jsp-fi allow + jsp-file to be / or /* allow jsp-file to be / or /* allow jsp-file to be / + or /* Allow jsp-file to be / or /* + + removed some compile warnings removed some compile warnings removed so + removed some compile warnings removed some compile warnings removed some + compile warnings removed some compile warnings + + set default keystore for sslsocketconnector set default keystore for s set + default keystore for sslsocketconnector set default keystore for set default + keystore for sslsocketconnector set default keystore for SslSocketConnector jetty-6.1.2rc4 - 19 April 2007 + JETTY-294 Fixed authentication reset @@ -6638,17 +7155,27 @@ jetty-6.1.2rc3 - 16 April 2007 + JETTY-296 Close direct content inputstreams + JETTY-297 Recreate tmp dir on stop/start + JETTY-298 Names in JMX ObjectNames for context, servlets and filters - + ajp redirects https requests correctly AJP redirects https requests - correctly - + fixed writes of unencoded char arrays. Fixed writes of unencoded char - arrays. - + improved performance and exclusions for tld scanning Improved performance + + ajp redirects https requests correctly ajp redirects https requests aj ajp + redirects https requests correctly ajp redirects https requests ajp + redirects https requests correctly AJP redirects https requests correctly + + fixed writes of unencoded char arrays. fixed writes of unencoded char fixed + writes of unencoded char arrays. fixed writes of unencoded char fixed writes + of unencoded char arrays. Fixed writes of unencoded char arrays. + + improved performance and exclusions for tld scanning improved performa + improved performance and exclusions for tld scanning improved performa + improved performance and exclusions for tld scanning Improved performance and exclusions for TLD scanning - + improvements to allow simple setting of cache-control headers Improvements + + improvements to allow simple setting of cache-control headers improvem + improvements to allow simple setting of cache-control headers improvem + improvements to allow simple setting of cache-control headers Improvements to allow simple setting of Cache-Control headers - + mbean properties assume writeable unless marked ro MBean properties assume + + mbean properties assume writeable unless marked ro mbean properties as mbean + properties assume writeable unless marked ro mbean properties as mbean + properties assume writeable unless marked ro MBean properties assume writeable unless marked RO - + refactor of sessionmanager and sessionidmanager for clustering refactor of + + refactor of sessionmanager and sessionidmanager for clustering refacto + refactor of sessionmanager and sessionidmanager for clustering refacto + refactor of sessionmanager and sessionidmanager for clustering refactor of SessionManager and SessionIdManager for clustering jetty-6.1.2rc2 - 27 March 2007 @@ -6673,28 +7200,49 @@ jetty-6.1.2rc2 - 27 March 2007 + JETTY-284 Fixed stop connector race + JETTY-286 isIntegral and isConfidential methods overridden in SslSelectChannelConnector - + added restfilter for put and delete from aleksi kallio Added RestFilter for - PUT and DELETE from Aleksi Kallio - + ajp13 cping request and cpong response implemented AJP13 CPING request and - CPONG response implemented - + ajp13 remoteuser, contextpath, servletpath requests implemented AJP13 - remoteUser, contextPath, servletPath requests implemented - + ajp13 shutdown request from peer implemented AJP13 Shutdown Request from - peer implemented - + change some jndi logging to debug level instead of info Change some JNDI + + added restfilter for put and delete from aleksi kallio added restfilte added + restfilter for put and delete from aleksi kallio added restfilte added + restfilter for put and delete from aleksi kallio Added RestFilter for PUT + and DELETE from Aleksi Kallio + + ajp13 cping request and cpong response implemented ajp13 cping request ajp13 + cping request and cpong response implemented ajp13 cping request ajp13 cping + request and cpong response implemented AJP13 CPING request and CPONG + response implemented + + ajp13 remoteuser, contextpath, servletpath requests implemented ajp13 ajp13 + remoteuser, contextpath, servletpath requests implemented ajp13 ajp13 + remoteuser, contextpath, servletpath requests implemented AJP13 remoteUser, + contextPath, servletPath requests implemented + + ajp13 shutdown request from peer implemented ajp13 shutdown request fr ajp13 + shutdown request from peer implemented ajp13 shutdown request fr ajp13 + shutdown request from peer implemented AJP13 Shutdown Request from peer + implemented + + change some jndi logging to debug level instead of info change some jn + change some jndi logging to debug level instead of info change some jn + change some jndi logging to debug level instead of info Change some JNDI logging to debug level instead of info + enable the sharedstorecontextualiser for the wadisessionmanager(databa + enable the sharedstorecontextualiser for the wadisessionmanager(databa + enable the sharedstorecontextualiser for the wadisessionmanager(databa Enable the SharedStoreContextualiser for the WadiSessionManager(Database store for clustering) - + make annotations work for maven plugin Make annotations work for maven - plugin - + optimized multi threaded init on startup servlets Optimized multi threaded + + make annotations work for maven plugin make annotations work for maven make + annotations work for maven plugin make annotations work for maven make + annotations work for maven plugin Make annotations work for maven plugin + + optimized multi threaded init on startup servlets optimized multi thre + optimized multi threaded init on startup servlets optimized multi thre + optimized multi threaded init on startup servlets Optimized multi threaded init on startup servlets - + refactor scanner to increase code reuse with maven/ant plugins Refactor + + refactor scanner to increase code reuse with maven/ant plugins refacto + refactor scanner to increase code reuse with maven/ant plugins refacto + refactor scanner to increase code reuse with maven/ant plugins Refactor Scanner to increase code reuse with maven/ant plugins + removed unneeded specialized taglibconfiguration class from maven plug + removed unneeded specialized taglibconfiguration class from maven plug + removed unneeded specialized taglibconfiguration class from maven plug Removed unneeded specialized TagLibConfiguration class from maven plugin - + update jasper to glassfish tag sjsas-9_1-b39-rc-14_mar_2007 Update jasper to + + update jasper to glassfish tag sjsas-9_1-b39-rc-14_mar_2007 update jas + update jasper to glassfish tag sjsas-9_1-b39-rc-14_mar_2007 update jas + update jasper to glassfish tag sjsas-9_1-b39-rc-14_mar_2007 Update jasper to glassfish tag SJSAS-9_1-B39-RC-14_Mar_2007 jetty-6.1.2rc1 - 08 March 2007 @@ -6711,33 +7259,60 @@ jetty-6.1.2rc1 - 08 March 2007 + JETTY-250 protect attribute enumerations from modification + JETTY-252 Fixed stats handling of close connection + JETTY-254 prevent close of jar file by bad JVMs - + add ajp connector jar to jetty-jboss sar add ajp connector jar to - jetty-jboss sar - + added option to allow null pathinfo within context Added option to allow - null pathInfo within context - + added support for lowresourcesidletime to selectchannelconnector Added - support for lowResourcesIdleTime to SelectChannelConnector - + boundedthreadpool queues rather than blocks excess jobs. BoundedThreadPool + + add ajp connector jar to jetty-jboss sar add ajp connector jar to add add + ajp connector jar to jetty-jboss sar add ajp connector jar to add ajp + connector jar to jetty-jboss sar add ajp connector jar to jetty-jboss sar + + added option to allow null pathinfo within context added option to all added + option to allow null pathinfo within context added option to all added + option to allow null pathinfo within context Added option to allow null + pathInfo within context + + added support for lowresourcesidletime to selectchannelconnector added added + support for lowresourcesidletime to selectchannelconnector added added + support for lowresourcesidletime to selectchannelconnector Added support for + lowResourcesIdleTime to SelectChannelConnector + + boundedthreadpool queues rather than blocks excess jobs. boundedthread + boundedthreadpool queues rather than blocks excess jobs. boundedthread + boundedthreadpool queues rather than blocks excess jobs. BoundedThreadPool queues rather than blocks excess jobs. - + call predestroy() after servlet/filter destroy() call preDestroy() after + + call predestroy() after servlet/filter destroy() call predestroy() aft call + predestroy() after servlet/filter destroy() call predestroy() aft call + predestroy() after servlet/filter destroy() call preDestroy() after servlet/filter destroy() - + ensure jetty/jboss uses servlet-spec classloading order Ensure jetty/jboss + + ensure jetty/jboss uses servlet-spec classloading order ensure jetty/j + ensure jetty/jboss uses servlet-spec classloading order ensure jetty/j + ensure jetty/jboss uses servlet-spec classloading order Ensure jetty/jboss uses servlet-spec classloading order - + fix constructor for constraint to detect wildcard role Fix constructor for + + fix constructor for constraint to detect wildcard role fix constructor fix + constructor for constraint to detect wildcard role fix constructor fix + constructor for constraint to detect wildcard role Fix constructor for Constraint to detect wildcard role - + fix dump servlet to handle primitive array types fix Dump servlet to handle - primitive array types - + handle comma separated values for the connection: header handle comma - separated values for the Connection: header - + improved context setters for wadi support Improved Context setters for wadi + + fix dump servlet to handle primitive array types fix dump servlet to h fix + dump servlet to handle primitive array types fix dump servlet to h fix dump + servlet to handle primitive array types fix Dump servlet to handle primitive + array types + + handle comma separated values for the connection: header handle comma + handle comma separated values for the connection: header handle comma handle + comma separated values for the connection: header handle comma separated + values for the Connection: header + + improved context setters for wadi support improved context setters for + improved context setters for wadi support improved context setters for + improved context setters for wadi support Improved Context setters for wadi support - + improved handling of early close in ajp Improved handling of early close in + + improved handling of early close in ajp improved handling of early clo + improved handling of early close in ajp improved handling of early clo + improved handling of early close in ajp Improved handling of early close in AJP - + support null pathinfo option for webservices deployed to jetty/jboss Support + + support null pathinfo option for webservices deployed to jetty/jboss s + support null pathinfo option for webservices deployed to jetty/jboss s + support null pathinfo option for webservices deployed to jetty/jboss Support null pathInfo option for webservices deployed to jetty/jboss - + taglibconfiguration uses resource input stream TagLibConfiguration uses + + taglibconfiguration uses resource input stream taglibconfiguration use + taglibconfiguration uses resource input stream taglibconfiguration use + taglibconfiguration uses resource input stream TagLibConfiguration uses resource input stream + workaround to call securityassocation.clear() for jboss webservices ca + workaround to call securityassocation.clear() for jboss webservices ca + workaround to call securityassocation.clear() for jboss webservices ca Workaround to call SecurityAssocation.clear() for jboss webservices calls to ejbs @@ -6748,22 +7323,37 @@ jetty-6.1.2rc0 - 15 February 2007 + JETTY-236 Buffer leak + JETTY-237 AJPParser Buffer Data Handling + JETTY-238 prevent form truncation - + coma separated cookies Coma separated cookies - + cometd timeout clients Cometd timeout clients - + patches from sybase for clientcertauthenticator Patches from sybase for + + coma separated cookies coma separated cookies coma separated cookies c coma + separated cookies coma separated cookies coma separated cookies Coma + separated cookies + + cometd timeout clients cometd timeout clients cometd timeout clients c + cometd timeout clients cometd timeout clients cometd timeout clients Cometd + timeout clients + + patches from sybase for clientcertauthenticator patches from sybase fo + patches from sybase for clientcertauthenticator patches from sybase fo + patches from sybase for clientcertauthenticator Patches from sybase for ClientCertAuthenticator jetty-6.1.2pre1 - 05 February 2007 + JETTY-224 run build up to process-test before invoking jetty:run - + added error handling for incorrect keystore/truststore password in Added - error handling for incorrect keystore/truststore password in - SslSelectChannelConnector - + added win32service to standard build added win32service to standard build + + added error handling for incorrect keystore/truststore password in add added + error handling for incorrect keystore/truststore password in add added error + handling for incorrect keystore/truststore password in Added error handling + for incorrect keystore/truststore password in SslSelectChannelConnector + + added win32service to standard build added win32service to standard bu added + win32service to standard build added win32service to standard bu added + win32service to standard build added win32service to standard build + allow resourcehandler to use resource base from an enclosing contextha allow + resourcehandler to use resource base from an enclosing contextha allow + resourcehandler to use resource base from an enclosing contextha allow ResourceHandler to use resource base from an enclosing ContextHandler - + fixed bug with virtual host handling in contexthandlercollection fixed bug - with virtual host handling in ContextHandlerCollection - + refactored cometd to be continuation independent refactored cometd to be + + fixed bug with virtual host handling in contexthandlercollection fixed fixed + bug with virtual host handling in contexthandlercollection fixed fixed bug + with virtual host handling in contexthandlercollection fixed bug with + virtual host handling in ContextHandlerCollection + + refactored cometd to be continuation independent refactored cometd to + refactored cometd to be continuation independent refactored cometd to + refactored cometd to be continuation independent refactored cometd to be continuation independent jetty-6.1.2pre0 - 01 February 2007 @@ -6774,102 +7364,174 @@ jetty-6.1.2pre0 - 01 February 2007 + JETTY-219 fixed trailing encoded chars in cookies + JETTY-220 fixed AJP content + JETTY-222 fix problem parsing faces-config.xml - + added cometd jsonp transport from aabeling Added cometd jsonp transport from + + added cometd jsonp transport from aabeling added cometd jsonp transpor added + cometd jsonp transport from aabeling added cometd jsonp transpor added + cometd jsonp transport from aabeling Added cometd jsonp transport from aabeling - + added terracotta cluster support for cometd Added terracotta cluster support - for cometd - + add support for annotations in servlet, filter and listener sources add - support for Annotations in servlet, filter and listener sources - + enable sslselectchannelconnector to modify the sslengine's client enable + + added terracotta cluster support for cometd added terracotta cluster s added + terracotta cluster support for cometd added terracotta cluster s added + terracotta cluster support for cometd Added terracotta cluster support for + cometd + + add support for annotations in servlet, filter and listener sources ad add + support for annotations in servlet, filter and listener sources ad add + support for annotations in servlet, filter and listener sources add support + for Annotations in servlet, filter and listener sources + + enable sslselectchannelconnector to modify the sslengine's client enab + enable sslselectchannelconnector to modify the sslengine's client enab + enable sslselectchannelconnector to modify the sslengine's client enable SslSelectChannelConnector to modify the SslEngine's client authentication settings - + fixed 1.4 method in jetty plus Fixed 1.4 method in jetty plus - + fixed generation of errors during jsp compilation for jsp-2.1 Fixed - generation of errors during jsp compilation for jsp-2.1 - + handle virtual hosts in contexthandlercollection handle virtual hosts in + + fixed 1.4 method in jetty plus fixed 1.4 method in jetty plus fixed 1. fixed + 1.4 method in jetty plus fixed 1.4 method in jetty plus fixed 1.4 method in + jetty plus Fixed 1.4 method in jetty plus + + fixed generation of errors during jsp compilation for jsp-2.1 fixed fi fixed + generation of errors during jsp compilation for jsp-2.1 fixed fixed + generation of errors during jsp compilation for jsp-2.1 Fixed generation of + errors during jsp compilation for jsp-2.1 + + handle virtual hosts in contexthandlercollection handle virtual hosts handle + virtual hosts in contexthandlercollection handle virtual hosts handle + virtual hosts in contexthandlercollection handle virtual hosts in ContextHandlerCollection - + improved writer buffering improved writer buffering - + moved json parser to util to support reuse moved JSON parser to util to - support reuse + + improved writer buffering improved writer buffering improved writer improved + writer buffering improved writer buffering improved writer buffering + improved writer buffering + + moved json parser to util to support reuse moved json parser to util t moved + json parser to util to support reuse moved json parser to util t moved json + parser to util to support reuse moved JSON parser to util to support reuse jetty-6.1.1 - 15 January 2007 jetty-6.1.1rc1 - 12 January 2007 + JETTY-210 Build jsp-api-2.0 for java 1.4 - + use timers for rollover logs and scanner Use timers for Rollover logs and + + use timers for rollover logs and scanner use timers for rollover logs use + timers for rollover logs and scanner use timers for rollover logs use + timers for rollover logs and scanner Use timers for Rollover logs and scanner jetty-6.1.1rc0 - 10 January 2007 + JETTY-209 Added ServletTester.createSocketConnector + JETTY-210 Build servlet-api-2.5 for java 1.4 + JETTY-211 fixed jboss build - + cgi servlet fails without exception CGI servlet fails without exception - + ensure response headers on ajaxfilter messsages turn off caching ensure + + cgi servlet fails without exception cgi servlet fails without exceptio cgi + servlet fails without exception cgi servlet fails without exceptio cgi + servlet fails without exception CGI servlet fails without exception + + ensure response headers on ajaxfilter messsages turn off caching ensur + ensure response headers on ajaxfilter messsages turn off caching ensur + ensure response headers on ajaxfilter messsages turn off caching ensure response headers on AjaxFilter messsages turn off caching + extras/win32service download only if no javaservicewrapper exist + extras/win32service download only if no javaservicewrapper exist + extras/win32service download only if no javaservicewrapper exist extras/win32service download only if no JavaServiceWrapper exist - + fixed unpacking war Fixed unpacking WAR - + multipartfilter deletefiles option MultiPartFilter deleteFiles option - + simplified chat demo simplified chat demo + + fixed unpacking war fixed unpacking war fixed unpacking war fixed unpa fixed + unpacking war fixed unpacking war fixed unpacking war Fixed unpacking WAR + + multipartfilter deletefiles option multipartfilter deletefiles option + multipartfilter deletefiles option multipartfilter deletefiles option + multipartfilter deletefiles option MultiPartFilter deleteFiles option + + simplified chat demo simplified chat demo simplified chat demo simplif + simplified chat demo simplified chat demo simplified chat demo simplified + chat demo + start webapps on deployment with jboss, use isdistributed() method fro start + webapps on deployment with jboss, use isdistributed() method fro start + webapps on deployment with jboss, use isdistributed() method fro start webapps on deployment with jboss, use isDistributed() method from WebAppContext jetty-6.1.0 - 09 January 2007 - + fixed unpacking war Fixed unpacking WAR + + fixed unpacking war fixed unpacking war fixed unpacking war fixed unpa fixed + unpacking war fixed unpacking war fixed unpacking war Fixed unpacking WAR jetty-6.1.0 - 05 January 2007 + JETTY-206 fixed AJP getServerPort and getRemotePort - + added extras/win32service Added extras/win32service - + added webappcontext.setcopywebdir to avoid jvm jar caching issues. Added + + added extras/win32service added extras/win32service added added + extras/win32service added extras/win32service added extras/win32service + Added extras/win32service + + added webappcontext.setcopywebdir to avoid jvm jar caching issues. add added + webappcontext.setcopywebdir to avoid jvm jar caching issues. add added + webappcontext.setcopywebdir to avoid jvm jar caching issues. Added WebAppContext.setCopyWebDir to avoid JVM jar caching issues. - + geronimo-2677 refactor of session id handling for clustering GERONIMO-2677 + + geronimo-2677 refactor of session id handling for clustering geronimo- + geronimo-2677 refactor of session id handling for clustering geronimo- + geronimo-2677 refactor of session id handling for clustering GERONIMO-2677 refactor of session id handling for clustering - + improved config of java5 threadpool Improved config of java5 threadpool - + protect context deployer from errors Protect context deployer from Errors - + servlettester sets content length ServletTester sets content length + + improved config of java5 threadpool improved config of java5 threadpoo + improved config of java5 threadpool improved config of java5 threadpoo + improved config of java5 threadpool Improved config of java5 threadpool + + protect context deployer from errors protect context deployer from err + protect context deployer from errors protect context deployer from err + protect context deployer from errors Protect context deployer from Errors + + servlettester sets content length servlettester sets content length + servlettester sets content length servlettester sets content length + servlettester sets content length ServletTester sets content length jetty-6.1.0rc3 - 02 January 2007 + JETTY-195 fixed ajp ssl_cert handling + JETTY-197 fixed getRemoteHost + JETTY-203 initialize ServletHandler if no Context instance + JETTY-204 setuid fix - + extras/servlet-tester extras/servlet-tester + + extras/servlet-tester extras/servlet-tester extras/servlet-tester + extras/servlet-tester extras/servlet-tester extras/servlet-tester + extras/servlet-tester + implement resource injection and lifecycle callbacks declared in web.x + implement resource injection and lifecycle callbacks declared in web.x + implement resource injection and lifecycle callbacks declared in web.x implement resource injection and lifecycle callbacks declared in web.xml - + setlocale does not use default content type setLocale does not use default + + setlocale does not use default content type setlocale does not use def + setlocale does not use default content type setlocale does not use def + setlocale does not use default content type setLocale does not use default content type - + use standard releases of servlet and jsp apis. Use standard releases of - servlet and jsp APIs. + + use standard releases of servlet and jsp apis. use standard releases o use + standard releases of servlet and jsp apis. use standard releases o use + standard releases of servlet and jsp apis. Use standard releases of servlet + and jsp APIs. jetty-6.1.0rc2 - 20 December 2006 + JETTY-167 cometd refactor + JETTY-194 doubles slashes are significant in URIs + JETTY-201 make run-as work for both web container and ejb container in jboss + ajp13parser, throw illegalstateexception on unimplemented ajp13 reques + ajp13parser, throw illegalstateexception on unimplemented ajp13 reques + ajp13parser, throw illegalstateexception on unimplemented ajp13 reques AJP13Parser, throw IllegalStateException on unimplemented AJP13 Requests - + contexthandlercollection is noop with no handlers ContextHandlerCollection + + contexthandlercollection is noop with no handlers contexthandlercollec + contexthandlercollection is noop with no handlers contexthandlercollec + contexthandlercollection is noop with no handlers ContextHandlerCollection is noop with no handlers - + ensure classpath passed to jspc contains file paths not urls ensure - classpath passed to jspc contains file paths not urls - + ensure com.sun.el.messages.properties included in jsp-2.1 jar ensure + + ensure classpath passed to jspc contains file paths not urls ensure en + ensure classpath passed to jspc contains file paths not urls ensure ensure + classpath passed to jspc contains file paths not urls ensure classpath + passed to jspc contains file paths not urls + + ensure com.sun.el.messages.properties included in jsp-2.1 jar ensure e + ensure com.sun.el.messages.properties included in jsp-2.1 jar ensure ensure + com.sun.el.messages.properties included in jsp-2.1 jar ensure com.sun.el.Messages.properties included in jsp-2.1 jar - + ensure servlets initialized if only using servlethandler ensure servlets + + ensure servlets initialized if only using servlethandler ensure servle + ensure servlets initialized if only using servlethandler ensure servle + ensure servlets initialized if only using servlethandler ensure servlets initialized if only using ServletHandler + Jetty-197 AJP13 getRemoteHost() - + refactored abstractsessionmanager for ehcache Refactored - AbstractSessionManager for ehcache - + remove code to remove securityhandler if no constraints present remove code + + refactored abstractsessionmanager for ehcache refactored refactored + refactored abstractsessionmanager for ehcache refactored refactored + abstractsessionmanager for ehcache Refactored AbstractSessionManager for + ehcache + + remove code to remove securityhandler if no constraints present remove + remove code to remove securityhandler if no constraints present remove + remove code to remove securityhandler if no constraints present remove code to remove SecurityHandler if no constraints present jetty-6.1.0rc1 - 14 December 2006 + JETTY-193 MailSessionReference without authentication + JETTY-199 newClassPathResource - + added cache session manager(pre-alpha) added cache session - manager(pre-alpha) - + ensure unique name for servletholder instances ensure unique name for - ServletHolder instances - + simplified idle timeout handling simplified idle timeout handling + + added cache session manager(pre-alpha) added cache session added cache added + cache session manager(pre-alpha) added cache session added cache session + manager(pre-alpha) added cache session manager(pre-alpha) + + ensure unique name for servletholder instances ensure unique name for + ensure unique name for servletholder instances ensure unique name for ensure + unique name for servletholder instances ensure unique name for ServletHolder + instances + + simplified idle timeout handling simplified idle timeout handling simp + simplified idle timeout handling simplified idle timeout handling simplified + idle timeout handling simplified idle timeout handling jetty-6.1.0rc0 - 08 December 2006 + JETTY-123 fix improved @@ -6879,43 +7541,86 @@ jetty-6.1.0rc0 - 08 December 2006 + JETTY-185 tmp filename generation + JETTY-189 ProxyConnection + 403 for BASIC authorization failure - + added extras/gwt Added extras/gwt - + added org.mortbay.thread.concurrent.threadpool Added + + added extras/gwt added extras/gwt added extras/gwt added extras/gwt added + extras/gwt added extras/gwt added extras/gwt Added extras/gwt + + added org.mortbay.thread.concurrent.threadpool added added added + org.mortbay.thread.concurrent.threadpool added added + org.mortbay.thread.concurrent.threadpool Added org.mortbay.thread.concurrent.ThreadPool - + added spring ejb3 demo example Added spring ejb3 demo example - + defaulthandler links virtual hosts. DefaultHandler links virtual hosts. - + dispatcher does not protect javax.servlet attributes Dispatcher does not + + added spring ejb3 demo example added spring ejb3 demo example added sp added + spring ejb3 demo example added spring ejb3 demo example added spring ejb3 + demo example Added spring ejb3 demo example + + defaulthandler links virtual hosts. defaulthandler links virtual hosts + defaulthandler links virtual hosts. defaulthandler links virtual hosts + defaulthandler links virtual hosts. DefaultHandler links virtual hosts. + + dispatcher does not protect javax.servlet attributes dispatcher does n + dispatcher does not protect javax.servlet attributes dispatcher does n + dispatcher does not protect javax.servlet attributes Dispatcher does not protect javax.servlet attributes - + fixed cachesize on invalidate Fixed cachesize on invalidate - + fixed idle timeout Fixed idle timeout - + flush if content-length written flush if content-length written - + forward query attribute fix forward query attribute fix - + handle request content encodings Handle request content encodings - + null for unknown named dispatches null for unknown named dispatches - + optimization of writers Optimization of writers - + servlethandler allows non request exceptions to propogate ServletHandler + + fixed cachesize on invalidate fixed cachesize on invalidate fixed cach fixed + cachesize on invalidate fixed cachesize on invalidate fixed cachesize on + invalidate Fixed cachesize on invalidate + + fixed idle timeout fixed idle timeout fixed idle timeout fixed idle ti fixed + idle timeout fixed idle timeout fixed idle timeout Fixed idle timeout + + flush if content-length written flush if content-length written flush flush + if content-length written flush if content-length written flush if + content-length written flush if content-length written + + forward query attribute fix forward query attribute fix forward query + forward query attribute fix forward query attribute fix forward query + attribute fix forward query attribute fix + + handle request content encodings handle request content encodings hand + handle request content encodings handle request content encodings handle + request content encodings Handle request content encodings + + null for unknown named dispatches null for unknown named dispatches nu null + for unknown named dispatches null for unknown named dispatches null for + unknown named dispatches null for unknown named dispatches + + optimization of writers optimization of writers optimization of writer + optimization of writers optimization of writers optimization of writers + Optimization of writers + + servlethandler allows non request exceptions to propogate servlethandl + servlethandler allows non request exceptions to propogate servlethandl + servlethandler allows non request exceptions to propogate ServletHandler allows non REQUEST exceptions to propogate - + servlet role ref Servlet role ref - + session attribute listener session attribute listener - + support for rfc2518 102-processing response Support for RFC2518 - 102-processing response - + tck fixes from sybase: TCK fixes from Sybase: - + update jasper to glassfish sjsas-9_1-b27-ea-07_dec_2006 update jasper to - glassfish SJSAS-9_1-B27-EA-07_Dec_2006 + + servlet role ref servlet role ref servlet role ref servlet role ref servlet + role ref servlet role ref servlet role ref Servlet role ref + + session attribute listener session attribute listener session attribut + session attribute listener session attribute listener session attribute + listener session attribute listener + + support for rfc2518 102-processing response support for rfc2518 suppor + support for rfc2518 102-processing response support for rfc2518 support for + rfc2518 102-processing response Support for RFC2518 102-processing response + + tck fixes from sybase: tck fixes from sybase: tck fixes from sybase: t tck + fixes from sybase: tck fixes from sybase: tck fixes from sybase: TCK fixes + from Sybase: + + update jasper to glassfish sjsas-9_1-b27-ea-07_dec_2006 update jasper update + jasper to glassfish sjsas-9_1-b27-ea-07_dec_2006 update jasper update jasper + to glassfish sjsas-9_1-b27-ea-07_dec_2006 update jasper to glassfish + SJSAS-9_1-B27-EA-07_Dec_2006 jetty-6.1.0pre3 - 22 November 2006 + JETTY-154 Cookies are double quotes only + JETTY-180 XBean support for context deploy + cve-2006-6969 upgraded session id generation to use securerandom + cve-2006-6969 upgraded session id generation to use securerandom + cve-2006-6969 upgraded session id generation to use securerandom CVE-2006-6969 Upgraded session ID generation to use SecureRandom - + expose isresumed on continuations Expose isResumed on Continuations - + fixed nio endpoint flush. avoid duplicate sends fixed NIO endpoint flush. - Avoid duplicate sends - + refactored ajp generator Refactored AJP generator - + support tls_dhe_rsa_with_aes_256_cbc_sha Support - TLS_DHE_RSA_WITH_AES_256_CBC_SHA - + updated glassfish jasper to tag sjsas-9_1-b25-ea-08_nov_2006 updated - glassfish jasper to tag SJSAS-9_1-B25-EA-08_Nov_2006 + + expose isresumed on continuations expose isresumed on continuations ex + expose isresumed on continuations expose isresumed on continuations expose + isresumed on continuations Expose isResumed on Continuations + + fixed nio endpoint flush. avoid duplicate sends fixed nio endpoint flu fixed + nio endpoint flush. avoid duplicate sends fixed nio endpoint flu fixed nio + endpoint flush. avoid duplicate sends fixed NIO endpoint flush. Avoid + duplicate sends + + refactored ajp generator refactored ajp generator refactored ajp gener + refactored ajp generator refactored ajp generator refactored ajp generator + Refactored AJP generator + + support tls_dhe_rsa_with_aes_256_cbc_sha support support support + tls_dhe_rsa_with_aes_256_cbc_sha support support + tls_dhe_rsa_with_aes_256_cbc_sha Support TLS_DHE_RSA_WITH_AES_256_CBC_SHA + + updated glassfish jasper to tag sjsas-9_1-b25-ea-08_nov_2006 updated u + updated glassfish jasper to tag sjsas-9_1-b25-ea-08_nov_2006 updated updated + glassfish jasper to tag sjsas-9_1-b25-ea-08_nov_2006 updated glassfish + jasper to tag SJSAS-9_1-B25-EA-08_Nov_2006 jetty-6.0.2 - 22 November 2006 + JETTY-118 ignore extra content after close @@ -6928,127 +7633,245 @@ jetty-6.0.2 - 22 November 2006 + JETTY-171 Fixed filter mapping + JETTY-172 use getName() instead of toString + JETTY-173 restore servletpath after dispatch - + (re)make jaas classes available to webapp classloader (re)make JAAS classes + + (re)make jaas classes available to webapp classloader (re)make jaas cl + (re)make jaas classes available to webapp classloader (re)make jaas cl + (re)make jaas classes available to webapp classloader (re)make JAAS classes available to webapp classloader - + add replacement in jetty xml config files add - replacement in jetty xml config files - + added concept of bufferred endpoint Added concept of bufferred endpoint - + added conversion object -> objectname for the result of method calls m Added + + add replacement in jetty xml config files add ad add + replacement in jetty xml config files add add + replacement in jetty xml config files add replacement + in jetty xml config files + + added concept of bufferred endpoint added concept of bufferred endpoin added + concept of bufferred endpoint added concept of bufferred endpoin added + concept of bufferred endpoint Added concept of bufferred endpoint + + added conversion object -> objectname for the result of method calls m added + conversion object -> objectname for the result of method calls m added + conversion object -> objectname for the result of method calls m Added conversion Object -> ObjectName for the result of method calls made on MBeans - + added datafilter configuration to cometd Added DataFilter configuration to - cometd - + added examples/test-jaas-webapp added examples/test-jaas-webapp - + added extraclasspath to webappcontext Added extraClassPath to WebAppContext - + added hierarchical destroy of mbeans Added hierarchical destroy of mbeans - + added id constructor to abstractsessionmanager.session Added ID constructor - to AbstractSessionManager.Session - + added isstopped() in lifecycle and abstractlifecycle added isStopped() in + + added datafilter configuration to cometd added datafilter configuratio added + datafilter configuration to cometd added datafilter configuratio added + datafilter configuration to cometd Added DataFilter configuration to cometd + + added examples/test-jaas-webapp added examples/test-jaas-webapp added added + examples/test-jaas-webapp added examples/test-jaas-webapp added + examples/test-jaas-webapp added examples/test-jaas-webapp + + added extraclasspath to webappcontext added extraclasspath to webappco added + extraclasspath to webappcontext added extraclasspath to webappco added + extraclasspath to webappcontext Added extraClassPath to WebAppContext + + added hierarchical destroy of mbeans added hierarchical destroy of mbe added + hierarchical destroy of mbeans added hierarchical destroy of mbe added + hierarchical destroy of mbeans Added hierarchical destroy of mbeans + + added id constructor to abstractsessionmanager.session added id constr added + id constructor to abstractsessionmanager.session added id constr added id + constructor to abstractsessionmanager.session Added ID constructor to + AbstractSessionManager.Session + + added isstopped() in lifecycle and abstractlifecycle added isstopped() added + isstopped() in lifecycle and abstractlifecycle added isstopped() added + isstopped() in lifecycle and abstractlifecycle added isStopped() in LifeCycle and AbstractLifeCycle - + added override descriptor for deployment of ro webapps Added override - descriptor for deployment of RO webapps - + allow session cookie to be refreshed Allow session cookie to be refreshed - + alternate optimizations of writer (use -dbuffer.writers=true) alternate + + added override descriptor for deployment of ro webapps added override added + override descriptor for deployment of ro webapps added override added + override descriptor for deployment of ro webapps Added override descriptor + for deployment of RO webapps + + allow session cookie to be refreshed allow session cookie to be refres allow + session cookie to be refreshed allow session cookie to be refres allow + session cookie to be refreshed Allow session cookie to be refreshed + + alternate optimizations of writer (use -dbuffer.writers=true) alternat + alternate optimizations of writer (use -dbuffer.writers=true) alternat + alternate optimizations of writer (use -dbuffer.writers=true) alternate optimizations of writer (use -Dbuffer.writers=true) - + apply queryencoding to getquerystring Apply queryEncoding to getQueryString - + cgi example in test webapp CGI example in test webapp - + change examples/test-jndi-webapp so it can be regularly built change + + apply queryencoding to getquerystring apply queryencoding to getquerys apply + queryencoding to getquerystring apply queryencoding to getquerys apply + queryencoding to getquerystring Apply queryEncoding to getQueryString + + cgi example in test webapp cgi example in test webapp cgi example in t cgi + example in test webapp cgi example in test webapp cgi example in test webapp + CGI example in test webapp + + change examples/test-jndi-webapp so it can be regularly built change c + change examples/test-jndi-webapp so it can be regularly built change change + examples/test-jndi-webapp so it can be regularly built change examples/test-jndi-webapp so it can be regularly built - + default solinger is -1 (disabled) Default soLinger is -1 (disabled) + + default solinger is -1 (disabled) default solinger is -1 (disabled) de + default solinger is -1 (disabled) default solinger is -1 (disabled) default + solinger is -1 (disabled) Default soLinger is -1 (disabled) + ensure "" returned for servletcontext.getcontextpath() for root contex + ensure "" returned for servletcontext.getcontextpath() for root contex + ensure "" returned for servletcontext.getcontextpath() for root contex ensure "" returned for ServletContext.getContextPath() for root context + ensure sessions nulled out on request recycle; ensure session null aft + ensure sessions nulled out on request recycle; ensure session null aft + ensure sessions nulled out on request recycle; ensure session null aft ensure sessions nulled out on request recycle; ensure session null after invalidate - + ensure setcontextpath() works when invoked from jetty-web.xml ensure + + ensure setcontextpath() works when invoked from jetty-web.xml ensure e + ensure setcontextpath() works when invoked from jetty-web.xml ensure ensure + setcontextpath() works when invoked from jetty-web.xml ensure setContextPath() works when invoked from jetty-web.xml - + fixed nio endpoint flush. avoid duplicate sends fixed NIO endpoint flush. - Avoid duplicate sends - + fixed npe in bio.socketendpoint.getremoteaddr() Fixed NPE in + + fixed nio endpoint flush. avoid duplicate sends fixed nio endpoint flu fixed + nio endpoint flush. avoid duplicate sends fixed nio endpoint flu fixed nio + endpoint flush. avoid duplicate sends fixed NIO endpoint flush. Avoid + duplicate sends + + fixed npe in bio.socketendpoint.getremoteaddr() fixed npe in fixed npe fixed + npe in bio.socketendpoint.getremoteaddr() fixed npe in fixed npe in + bio.socketendpoint.getremoteaddr() Fixed NPE in bio.SocketEndPoint.getRemoteAddr() - + fixed resource cache flushing Fixed resource cache flushing - + fixed tld parsing for maven plugin Fixed tld parsing for maven plugin - + httpgenerator can generate requests HttpGenerator can generate requests - + improved *-mbean.properties files and specialized some mbean Improved + + fixed resource cache flushing fixed resource cache flushing fixed reso fixed + resource cache flushing fixed resource cache flushing fixed resource cache + flushing Fixed resource cache flushing + + fixed tld parsing for maven plugin fixed tld parsing for maven plugin fixed + tld parsing for maven plugin fixed tld parsing for maven plugin fixed tld + parsing for maven plugin Fixed tld parsing for maven plugin + + httpgenerator can generate requests httpgenerator can generate request + httpgenerator can generate requests httpgenerator can generate request + httpgenerator can generate requests HttpGenerator can generate requests + + improved *-mbean.properties files and specialized some mbean improved + improved *-mbean.properties files and specialized some mbean improved + improved *-mbean.properties files and specialized some mbean Improved + *-mbean.properties files and specialized some MBean - + major refactor of selectchannel endpoint for client selector Major refactor - of SelectChannel EndPoint for client selector - + make .tag files work in packed wars make .tag files work in packed wars - + moved all modules updates from 6.1pre2 to 6.0 Moved all modules updates from - 6.1pre2 to 6.0 - + plugin shutdown context before stopping it. Plugin shutdown context before + + major refactor of selectchannel endpoint for client selector major ref major + refactor of selectchannel endpoint for client selector major ref major + refactor of selectchannel endpoint for client selector Major refactor of + SelectChannel EndPoint for client selector + + make .tag files work in packed wars make .tag files work in packed war make + .tag files work in packed wars make .tag files work in packed war make .tag + files work in packed wars make .tag files work in packed wars + + moved all modules updates from 6.1pre2 to 6.0 moved all modules update moved + all modules updates from 6.1pre2 to 6.0 moved all modules update moved all + modules updates from 6.1pre2 to 6.0 Moved all modules updates from 6.1pre2 + to 6.0 + + plugin shutdown context before stopping it. plugin shutdown context be + plugin shutdown context before stopping it. plugin shutdown context be + plugin shutdown context before stopping it. Plugin shutdown context before stopping it. - + refactored session lifecycle and additional tests Refactored session + + refactored session lifecycle and additional tests refactored session + refactored session lifecycle and additional tests refactored session + refactored session lifecycle and additional tests Refactored session lifecycle and additional tests + release resource lookup in default servlet release resource lookup in + release resource lookup in default servlet release resource lookup in + release resource lookup in default servlet release resource lookup in Default servlet - + reverted unixcrypt to use coersions (that effected results) Reverted + + reverted unixcrypt to use coersions (that effected results) reverted + reverted unixcrypt to use coersions (that effected results) reverted + reverted unixcrypt to use coersions (that effected results) Reverted UnixCrypt to use coersions (that effected results) - + session ids can change worker id Session IDs can change worker ID - + simplified resourcecache and default servlet Simplified ResourceCache and + + session ids can change worker id session ids can change worker id sess + session ids can change worker id session ids can change worker id session + ids can change worker id Session IDs can change worker ID + + simplified resourcecache and default servlet simplified resourcecache + simplified resourcecache and default servlet simplified resourcecache + simplified resourcecache and default servlet Simplified ResourceCache and Default servlet - + socketconnector closes all connections in dostop SocketConnector closes all + + socketconnector closes all connections in dostop socketconnector close + socketconnector closes all connections in dostop socketconnector close + socketconnector closes all connections in dostop SocketConnector closes all connections in doStop - + support tls_dhe_rsa_with_aes_256_cbc_sha Support - TLS_DHE_RSA_WITH_AES_256_CBC_SHA - + updated glassfish jasper to tag sjsas-9_1-b25-ea-08_nov_2006 updated - glassfish jasper to tag SJSAS-9_1-B25-EA-08_Nov_2006 - + upgraded session id generation to use securerandom Upgraded session ID + + support tls_dhe_rsa_with_aes_256_cbc_sha support support support + tls_dhe_rsa_with_aes_256_cbc_sha support support + tls_dhe_rsa_with_aes_256_cbc_sha Support TLS_DHE_RSA_WITH_AES_256_CBC_SHA + + updated glassfish jasper to tag sjsas-9_1-b25-ea-08_nov_2006 updated u + updated glassfish jasper to tag sjsas-9_1-b25-ea-08_nov_2006 updated updated + glassfish jasper to tag sjsas-9_1-b25-ea-08_nov_2006 updated glassfish + jasper to tag SJSAS-9_1-B25-EA-08_Nov_2006 + + upgraded session id generation to use securerandom upgraded session id + upgraded session id generation to use securerandom upgraded session id + upgraded session id generation to use securerandom Upgraded session ID generation to use SecureRandom jetty-5.1.14 - 09 August 2007 + JETTY-155 force close with content length + JETTY-369 failed state in Container - + patched with correct version patched with correct version + + patched with correct version patched with correct version patched with + patched with correct version patched with correct version patched with + correct version patched with correct version jetty-5.1.13 - + sourceforge 1648335: problem setting version for ajp13 Sourceforge 1648335: + + sourceforge 1648335: problem setting version for ajp13 sourceforge 164 + sourceforge 1648335: problem setting version for ajp13 sourceforge 164 + sourceforge 1648335: problem setting version for ajp13 Sourceforge 1648335: problem setting version for AJP13 jetty-5.1.12 - 22 November 2006 + JETTY-154 Cookies ignore single quotes - + added support for tls_dhe_rsa_with_aes_256_cbc_sha Added support for + + added support for tls_dhe_rsa_with_aes_256_cbc_sha added support for a added + support for tls_dhe_rsa_with_aes_256_cbc_sha added support for added support + for tls_dhe_rsa_with_aes_256_cbc_sha Added support for TLS_DHE_RSA_WITH_AES_256_CBC_SHA - + ajp protected against bad requests from mod_jk AJP protected against bad + + ajp protected against bad requests from mod_jk ajp protected against b ajp + protected against bad requests from mod_jk ajp protected against b ajp + protected against bad requests from mod_jk AJP protected against bad requests from mod_jk - + quote single quotes in cookies Quote single quotes in cookies - + upgraded session id generation to use securerandom Upgraded session ID + + quote single quotes in cookies quote single quotes in cookies quote si quote + single quotes in cookies quote single quotes in cookies quote single quotes + in cookies Quote single quotes in cookies + + upgraded session id generation to use securerandom upgraded session id + upgraded session id generation to use securerandom upgraded session id + upgraded session id generation to use securerandom Upgraded session ID generation to use SecureRandom jetty-4.2.27 - 22 November 2006 - + ajp protected against bad requests from mod_jk AJP protected against bad + + ajp protected against bad requests from mod_jk ajp protected against b ajp + protected against bad requests from mod_jk ajp protected against b ajp + protected against bad requests from mod_jk AJP protected against bad requests from mod_jk - + upgraded session id generation to use securerandom Upgraded session ID + + upgraded session id generation to use securerandom upgraded session id + upgraded session id generation to use securerandom upgraded session id + upgraded session id generation to use securerandom Upgraded session ID generation to use SecureRandom jetty-6.1.0pre2 - 20 November 2006 - + added extraclasspath to webappcontext Added extraClassPath to WebAppContext - + clean up jboss module licensing Clean up jboss module licensing - + fixed resource cache flushing Fixed resource cache flushing + + added extraclasspath to webappcontext added extraclasspath to webappco added + extraclasspath to webappcontext added extraclasspath to webappco added + extraclasspath to webappcontext Added extraClassPath to WebAppContext + + clean up jboss module licensing clean up jboss module licensing clean clean + up jboss module licensing clean up jboss module licensing clean up jboss + module licensing Clean up jboss module licensing + + fixed resource cache flushing fixed resource cache flushing fixed reso fixed + resource cache flushing fixed resource cache flushing fixed resource cache + flushing Fixed resource cache flushing jetty-6.1.0pre1 - 19 November 2006 + JETTY-151 Idle timeout only applies to blocking operations + JETTY-171 Fixed filter mapping + JETTY-172 use getName() instead of toString + JETTY-173 restore servletpath after dispatch - + added extras/jboss Added extras/jboss - + added hierarchical destroy of mbeans Added hierarchical destroy of mbeans - + added override descriptor for deployment of ro webapps Added override - descriptor for deployment of RO webapps - + alternate optimizations of writer (use -dbuffer.writers=true) alternate + + added extras/jboss added extras/jboss added extras/jboss added extras/ added + extras/jboss added extras/jboss added extras/jboss Added extras/jboss + + added hierarchical destroy of mbeans added hierarchical destroy of mbe added + hierarchical destroy of mbeans added hierarchical destroy of mbe added + hierarchical destroy of mbeans Added hierarchical destroy of mbeans + + added override descriptor for deployment of ro webapps added override added + override descriptor for deployment of ro webapps added override added + override descriptor for deployment of ro webapps Added override descriptor + for deployment of RO webapps + + alternate optimizations of writer (use -dbuffer.writers=true) alternat + alternate optimizations of writer (use -dbuffer.writers=true) alternat + alternate optimizations of writer (use -dbuffer.writers=true) alternate optimizations of writer (use -Dbuffer.writers=true) - + fixed npe in bio.socketendpoint.getremoteaddr() Fixed NPE in + + fixed npe in bio.socketendpoint.getremoteaddr() fixed npe in fixed npe fixed + npe in bio.socketendpoint.getremoteaddr() fixed npe in fixed npe in + bio.socketendpoint.getremoteaddr() Fixed NPE in bio.SocketEndPoint.getRemoteAddr() - + major refactor of selectchannel endpoint for client selector Major refactor - of SelectChannel EndPoint for client selector + + major refactor of selectchannel endpoint for client selector major ref major + refactor of selectchannel endpoint for client selector major ref major + refactor of selectchannel endpoint for client selector Major refactor of + SelectChannel EndPoint for client selector + release resource lookup in default servlet release resource lookup in + release resource lookup in default servlet release resource lookup in + release resource lookup in default servlet release resource lookup in Default servlet - + reverted unixcrypt to use coersions (that effected results) Reverted + + reverted unixcrypt to use coersions (that effected results) reverted + reverted unixcrypt to use coersions (that effected results) reverted + reverted unixcrypt to use coersions (that effected results) Reverted UnixCrypt to use coersions (that effected results) - + simplified resourcecache and default servlet Simplified ResourceCache and + + simplified resourcecache and default servlet simplified resourcecache + simplified resourcecache and default servlet simplified resourcecache + simplified resourcecache and default servlet Simplified ResourceCache and Default servlet - + use contextdeployer as main deployer in jetty.xml Use ContextDeployer as - main deployer in jetty.xml + + use contextdeployer as main deployer in jetty.xml use contextdeployer use + contextdeployer as main deployer in jetty.xml use contextdeployer use + contextdeployer as main deployer in jetty.xml Use ContextDeployer as main + deployer in jetty.xml jetty-6.1.0pre0 - 21 October 2006 + JETTY-112 ContextHandler checks if started @@ -7062,86 +7885,175 @@ jetty-6.1.0pre0 - 21 October 2006 + JETTY-124 always initialize filter caches + JETTY-126 handle content > Integer.MAX_VALUE + JETTY-129 ServletContextListeners called after servlets are initialized - + (re)make jaas classes available to webapp classloader (re)make JAAS classes + + (re)make jaas classes available to webapp classloader (re)make jaas cl + (re)make jaas classes available to webapp classloader (re)make jaas cl + (re)make jaas classes available to webapp classloader (re)make JAAS classes available to webapp classloader - + add replacement in jetty xml config files add - replacement in jetty xml config files - + add a maven-jetty-jspc-plugin to do jspc precompilation add a + + add replacement in jetty xml config files add ad add + replacement in jetty xml config files add add + replacement in jetty xml config files add replacement + in jetty xml config files + + add a maven-jetty-jspc-plugin to do jspc precompilation add a add a add a + maven-jetty-jspc-plugin to do jspc precompilation add a add a + maven-jetty-jspc-plugin to do jspc precompilation add a maven-jetty-jspc-plugin to do jspc precompilation - + added cometd chat demo added cometd chat demo - + added concept of bufferred endpoint Added concept of bufferred endpoint - + added conversion object -> objectname for the result of method calls m Added + + added cometd chat demo added cometd chat demo added cometd chat demo a added + cometd chat demo added cometd chat demo added cometd chat demo added cometd + chat demo + + added concept of bufferred endpoint added concept of bufferred endpoin added + concept of bufferred endpoint added concept of bufferred endpoin added + concept of bufferred endpoint Added concept of bufferred endpoint + + added conversion object -> objectname for the result of method calls m added + conversion object -> objectname for the result of method calls m added + conversion object -> objectname for the result of method calls m Added conversion Object -> ObjectName for the result of method calls made on MBeans - + added datafilter configuration to cometd Added DataFilter configuration to - cometd - + added examples/test-jaas-webapp added examples/test-jaas-webapp - + added extras/setuid to support start as root Added extras/setuid to support - start as root - + added id constructor to abstractsessionmanager.session Added ID constructor - to AbstractSessionManager.Session - + added isstopped() in lifecycle and abstractlifecycle added isStopped() in + + added datafilter configuration to cometd added datafilter configuratio added + datafilter configuration to cometd added datafilter configuratio added + datafilter configuration to cometd Added DataFilter configuration to cometd + + added examples/test-jaas-webapp added examples/test-jaas-webapp added added + examples/test-jaas-webapp added examples/test-jaas-webapp added + examples/test-jaas-webapp added examples/test-jaas-webapp + + added extras/setuid to support start as root added extras/setuid to su added + extras/setuid to support start as root added extras/setuid to su added + extras/setuid to support start as root Added extras/setuid to support start + as root + + added id constructor to abstractsessionmanager.session added id constr added + id constructor to abstractsessionmanager.session added id constr added id + constructor to abstractsessionmanager.session Added ID constructor to + AbstractSessionManager.Session + + added isstopped() in lifecycle and abstractlifecycle added isstopped() added + isstopped() in lifecycle and abstractlifecycle added isstopped() added + isstopped() in lifecycle and abstractlifecycle added isStopped() in LifeCycle and AbstractLifeCycle - + add hot deployment capability add hot deployment capability - + ajp connector AJP Connector - + allow session cookie to be refreshed Allow session cookie to be refreshed - + apply queryencoding to getquerystring Apply queryEncoding to getQueryString - + cgi example in test webapp CGI example in test webapp - + change examples/test-jndi-webapp so it can be regularly built change + + add hot deployment capability add hot deployment capability add hot add hot + deployment capability add hot deployment capability add hot deployment + capability add hot deployment capability + + ajp connector ajp connector ajp connector ajp connector ajp connector ajp + connector ajp connector AJP Connector + + allow session cookie to be refreshed allow session cookie to be refres allow + session cookie to be refreshed allow session cookie to be refres allow + session cookie to be refreshed Allow session cookie to be refreshed + + apply queryencoding to getquerystring apply queryencoding to getquerys apply + queryencoding to getquerystring apply queryencoding to getquerys apply + queryencoding to getquerystring Apply queryEncoding to getQueryString + + cgi example in test webapp cgi example in test webapp cgi example in t cgi + example in test webapp cgi example in test webapp cgi example in test webapp + CGI example in test webapp + + change examples/test-jndi-webapp so it can be regularly built change c + change examples/test-jndi-webapp so it can be regularly built change change + examples/test-jndi-webapp so it can be regularly built change examples/test-jndi-webapp so it can be regularly built - + default solinger is -1 (disabled) Default soLinger is -1 (disabled) + + default solinger is -1 (disabled) default solinger is -1 (disabled) de + default solinger is -1 (disabled) default solinger is -1 (disabled) default + solinger is -1 (disabled) Default soLinger is -1 (disabled) + ensure "" returned for servletcontext.getcontextpath() for root contex + ensure "" returned for servletcontext.getcontextpath() for root contex + ensure "" returned for servletcontext.getcontextpath() for root contex ensure "" returned for ServletContext.getContextPath() for root context + ensure sessions nulled out on request recycle; ensure session null aft + ensure sessions nulled out on request recycle; ensure session null aft + ensure sessions nulled out on request recycle; ensure session null aft ensure sessions nulled out on request recycle; ensure session null after invalidate - + ensure setcontextpath() works when invoked from jetty-web.xml ensure + + ensure setcontextpath() works when invoked from jetty-web.xml ensure e + ensure setcontextpath() works when invoked from jetty-web.xml ensure ensure + setcontextpath() works when invoked from jetty-web.xml ensure setContextPath() works when invoked from jetty-web.xml - + factored errorpageerrorhandler out of webappcontext Factored - ErrorPageErrorHandler out of WebAppContext - + fixed classcastexception in jaasuserrealm.setroleclassnames(string[]) fixed + + factored errorpageerrorhandler out of webappcontext factored factored + factored errorpageerrorhandler out of webappcontext factored factored + errorpageerrorhandler out of webappcontext Factored ErrorPageErrorHandler + out of WebAppContext + + fixed classcastexception in jaasuserrealm.setroleclassnames(string[]) fixed + classcastexception in jaasuserrealm.setroleclassnames(string[]) fixed + classcastexception in jaasuserrealm.setroleclassnames(string[]) fixed ClassCastException in JAASUserRealm.setRoleClassNames(String[]) - + fixed isuserinrole checking for jaasuserrealm fixed isUserInRole checking - for JAASUserRealm - + fixed tld parsing for maven plugin Fixed tld parsing for maven plugin - + httpgenerator can generate requests HttpGenerator can generate requests - + improved *-mbean.properties files and specialized some mbean Improved + + fixed isuserinrole checking for jaasuserrealm fixed isuserinrole check fixed + isuserinrole checking for jaasuserrealm fixed isuserinrole check fixed + isuserinrole checking for jaasuserrealm fixed isUserInRole checking for + JAASUserRealm + + fixed tld parsing for maven plugin fixed tld parsing for maven plugin fixed + tld parsing for maven plugin fixed tld parsing for maven plugin fixed tld + parsing for maven plugin Fixed tld parsing for maven plugin + + httpgenerator can generate requests httpgenerator can generate request + httpgenerator can generate requests httpgenerator can generate request + httpgenerator can generate requests HttpGenerator can generate requests + + improved *-mbean.properties files and specialized some mbean improved + improved *-mbean.properties files and specialized some mbean improved + improved *-mbean.properties files and specialized some mbean Improved + *-mbean.properties files and specialized some MBean - + improved charset handling in urls Improved charset handling in URLs - + jetyy-120 selectchannelconnector closes all connections on stop JETYY-120 + + improved charset handling in urls improved charset handling in urls im + improved charset handling in urls improved charset handling in urls improved + charset handling in urls Improved charset handling in URLs + + jetyy-120 selectchannelconnector closes all connections on stop jetyy- + jetyy-120 selectchannelconnector closes all connections on stop jetyy- + jetyy-120 selectchannelconnector closes all connections on stop JETYY-120 SelectChannelConnector closes all connections on stop - + make .tag files work in packed wars make .tag files work in packed wars - + minor optimization of bytes to utf8 strings minor optimization of bytes to - UTF8 strings - + plugin shutdown context before stopping it. Plugin shutdown context before + + make .tag files work in packed wars make .tag files work in packed war make + .tag files work in packed wars make .tag files work in packed war make .tag + files work in packed wars make .tag files work in packed wars + + minor optimization of bytes to utf8 strings minor optimization of byte minor + optimization of bytes to utf8 strings minor optimization of byte minor + optimization of bytes to utf8 strings minor optimization of bytes to UTF8 + strings + + plugin shutdown context before stopping it. plugin shutdown context be + plugin shutdown context before stopping it. plugin shutdown context be + plugin shutdown context before stopping it. Plugin shutdown context before stopping it. - + ported htaccesshandler Ported HtAccessHandler - + refactored errorhandler to avoid statics Refactored ErrorHandler to avoid + + ported htaccesshandler ported htaccesshandler ported htaccesshandler p + ported htaccesshandler ported htaccesshandler ported htaccesshandler Ported + HtAccessHandler + + refactored errorhandler to avoid statics refactored errorhandler to av + refactored errorhandler to avoid statics refactored errorhandler to av + refactored errorhandler to avoid statics Refactored ErrorHandler to avoid statics - + refactored session lifecycle and additional tests Refactored session + + refactored session lifecycle and additional tests refactored session + refactored session lifecycle and additional tests refactored session + refactored session lifecycle and additional tests Refactored session lifecycle and additional tests - + session ids can change worker id Session IDs can change worker ID - + socketconnector closes all connections in dostop SocketConnector closes all + + session ids can change worker id session ids can change worker id sess + session ids can change worker id session ids can change worker id session + ids can change worker id Session IDs can change worker ID + + socketconnector closes all connections in dostop socketconnector close + socketconnector closes all connections in dostop socketconnector close + socketconnector closes all connections in dostop SocketConnector closes all connections in doStop - + start of a client api Start of a client API - + transforming classloader does not transform resources. Transforming + + start of a client api start of a client api start of a client api star start + of a client api start of a client api start of a client api Start of a + client API + + transforming classloader does not transform resources. transforming + transforming classloader does not transform resources. transforming + transforming classloader does not transform resources. Transforming classloader does not transform resources. jetty-5.1.11 - 08 October 2006 - + default servlet only uses setcontentlength on wrapped responses Default + + default servlet only uses setcontentlength on wrapped responses defaul + default servlet only uses setcontentlength on wrapped responses defaul + default servlet only uses setcontentlength on wrapped responses Default servlet only uses setContentLength on wrapped responses - + fixed ajp chunk header (1507377) Fixed AJP chunk header (1507377) - + fixed ajp handling of certificate length (1494939) Fixed AJP handling of - certificate length (1494939) - + fixed bytebufferoutputstream capacity calculation fixed - ByteBufferOutputStream capacity calculation - + fixed order of destruction event calls Fixed order of destruction event - calls - + fix to httpoutputstream from m.traverso Fix to HttpOutputStream from - M.Traverso + + fixed ajp chunk header (1507377) fixed ajp chunk header (1507377) fixe fixed + ajp chunk header (1507377) fixed ajp chunk header (1507377) fixed ajp chunk + header (1507377) Fixed AJP chunk header (1507377) + + fixed ajp handling of certificate length (1494939) fixed ajp handling fixed + ajp handling of certificate length (1494939) fixed ajp handling fixed ajp + handling of certificate length (1494939) Fixed AJP handling of certificate + length (1494939) + + fixed bytebufferoutputstream capacity calculation fixed fixed fixed + bytebufferoutputstream capacity calculation fixed fixed + bytebufferoutputstream capacity calculation fixed ByteBufferOutputStream + capacity calculation + + fixed order of destruction event calls fixed order of destruction even fixed + order of destruction event calls fixed order of destruction even fixed order + of destruction event calls Fixed order of destruction event calls + + fix to httpoutputstream from m.traverso fix to httpoutputstream from f fix + to httpoutputstream from m.traverso fix to httpoutputstream from fix to + httpoutputstream from m.traverso Fix to HttpOutputStream from M.Traverso jetty-4.2.26 - 08 October 2006 - + backport of ajp fixes Backport of AJP fixes + + backport of ajp fixes backport of ajp fixes backport of ajp fixes back + backport of ajp fixes backport of ajp fixes backport of ajp fixes Backport + of AJP fixes jetty-6.0.1 - 24 September 2006 + JETTY-112 ContextHandler checks if started @@ -7150,4050 +8062,8025 @@ jetty-6.0.1 - 24 September 2006 + JETTY-115 Fixed addHeader + JETTY-121 init not called on externally constructed servlets + JETTY-124 always initialize filter caches - + factored errorpageerrorhandler out of webappcontext Factored - ErrorPageErrorHandler out of WebAppContext - + fixed classcastexception in jaasuserrealm.setroleclassnames(string[]) fixed + + factored errorpageerrorhandler out of webappcontext factored factored + factored errorpageerrorhandler out of webappcontext factored factored + errorpageerrorhandler out of webappcontext Factored ErrorPageErrorHandler + out of WebAppContext + + fixed classcastexception in jaasuserrealm.setroleclassnames(string[]) fixed + classcastexception in jaasuserrealm.setroleclassnames(string[]) fixed + classcastexception in jaasuserrealm.setroleclassnames(string[]) fixed ClassCastException in JAASUserRealm.setRoleClassNames(String[]) - + fixed isuserinrole checking for jaasuserrealm fixed isUserInRole checking - for JAASUserRealm - + improved charset handling in urls Improved charset handling in URLs - + jetyy-120 selectchannelconnector closes all connections on stop JETYY-120 + + fixed isuserinrole checking for jaasuserrealm fixed isuserinrole check fixed + isuserinrole checking for jaasuserrealm fixed isuserinrole check fixed + isuserinrole checking for jaasuserrealm fixed isUserInRole checking for + JAASUserRealm + + improved charset handling in urls improved charset handling in urls im + improved charset handling in urls improved charset handling in urls improved + charset handling in urls Improved charset handling in URLs + + jetyy-120 selectchannelconnector closes all connections on stop jetyy- + jetyy-120 selectchannelconnector closes all connections on stop jetyy- + jetyy-120 selectchannelconnector closes all connections on stop JETYY-120 SelectChannelConnector closes all connections on stop - + minor optimization of bytes to utf8 strings minor optimization of bytes to - UTF8 strings - + refactored errorhandler to avoid statics Refactored ErrorHandler to avoid + + minor optimization of bytes to utf8 strings minor optimization of byte minor + optimization of bytes to utf8 strings minor optimization of byte minor + optimization of bytes to utf8 strings minor optimization of bytes to UTF8 + strings + + refactored errorhandler to avoid statics refactored errorhandler to av + refactored errorhandler to avoid statics refactored errorhandler to av + refactored errorhandler to avoid statics Refactored ErrorHandler to avoid statics jetty-6.0.0 - 10 September 2006 - + conveniance builder methods for listeners and filters Conveniance builder + + conveniance builder methods for listeners and filters conveniance buil + conveniance builder methods for listeners and filters conveniance buil + conveniance builder methods for listeners and filters Conveniance builder methods for listeners and filters - + plugin shutdown context before stopping it. Plugin shutdown context before + + plugin shutdown context before stopping it. plugin shutdown context be + plugin shutdown context before stopping it. plugin shutdown context be + plugin shutdown context before stopping it. Plugin shutdown context before stopping it. - + socketconnector closes all connections in dostop SocketConnector closes all + + socketconnector closes all connections in dostop socketconnector close + socketconnector closes all connections in dostop socketconnector close + socketconnector closes all connections in dostop SocketConnector closes all connections in doStop - + transforming classloader does not transform resources. Transforming + + transforming classloader does not transform resources. transforming + transforming classloader does not transform resources. transforming + transforming classloader does not transform resources. Transforming classloader does not transform resources. jetty-6.0.0rc4 - 05 September 2006 + JETTY-107 Poor cast in SessionDump demo - + bind jetty-env.xml entries to java:comp/env bind jetty-env.xml entries to + + bind jetty-env.xml entries to java:comp/env bind jetty-env.xml entries bind + jetty-env.xml entries to java:comp/env bind jetty-env.xml entries bind + jetty-env.xml entries to java:comp/env bind jetty-env.xml entries to java:comp/env - + set charset on error pages Set charset on error pages + + set charset on error pages set charset on error pages set charset on e set + charset on error pages set charset on error pages set charset on error pages + Set charset on error pages jetty-6.0.0rc3 - 01 September 2006 + JETTY-68 Complete request after sendRedirect + JETTY-104 (raised glassfish ISSUE-1044) hide JSP forced path attribute - + avoid double error handling of bad requests Avoid double error handling of - Bad requests - + don't warn for content length on head requests don't warn for content length - on head requests + + avoid double error handling of bad requests avoid double error handlin avoid + double error handling of bad requests avoid double error handlin avoid + double error handling of bad requests Avoid double error handling of Bad + requests + + don't warn for content length on head requests don't warn for content don't + warn for content length on head requests don't warn for content don't warn + for content length on head requests don't warn for content length on head + requests + jetty-103 JETTY-103 - + less verbose handling of badresources from bad urls Less verbose handling of + + less verbose handling of badresources from bad urls less verbose handl less + verbose handling of badresources from bad urls less verbose handl less + verbose handling of badresources from bad urls Less verbose handling of BadResources from bad URLs - + move mailsessionreference to org.mortbay.naming.factories Move + + move mailsessionreference to org.mortbay.naming.factories move move move + mailsessionreference to org.mortbay.naming.factories move move + mailsessionreference to org.mortbay.naming.factories Move MailSessionReference to org.mortbay.naming.factories - + pulled 6.0.0 branch pulled 6.0.0 branch + + pulled 6.0.0 branch pulled 6.0.0 branch pulled 6.0.0 branch pulled 6.0 + pulled 6.0.0 branch pulled 6.0.0 branch pulled 6.0.0 branch pulled 6.0.0 + branch + transferred the sslengine patch from the patches directory to extras + transferred the sslengine patch from the patches directory to extras + transferred the sslengine patch from the patches directory to extras Transferred the sslengine patch from the patches directory to extras jetty-6.0.0rc2 - 25 August 2006 + added org.apache.commons.logging package to system classes that can't added + org.apache.commons.logging package to system classes that can't added + org.apache.commons.logging package to system classes that can't added org.apache.commons.logging package to system classes that can't be overridden by a webapp classloader - + destroy httpconnection to improve buffer pooling Destroy HttpConnection to + + destroy httpconnection to improve buffer pooling destroy httpconnectio + destroy httpconnection to improve buffer pooling destroy httpconnectio + destroy httpconnection to improve buffer pooling Destroy HttpConnection to improve buffer pooling - + direct buffer useage is optional Direct buffer useage is optional - + fixed npe when no resource cache Fixed NPE when no resource cache - + moved more utility packagtes to the util jar Moved more utility packagtes to - the util jar - + mvn -djetty.port=x jetty:run uses port number given for the default mvn + + direct buffer useage is optional direct buffer useage is optional dire + direct buffer useage is optional direct buffer useage is optional direct + buffer useage is optional Direct buffer useage is optional + + fixed npe when no resource cache fixed npe when no resource cache fixe fixed + npe when no resource cache fixed npe when no resource cache fixed npe when + no resource cache Fixed NPE when no resource cache + + moved more utility packagtes to the util jar moved more utility packag moved + more utility packagtes to the util jar moved more utility packag moved more + utility packagtes to the util jar Moved more utility packagtes to the util + jar + + mvn -djetty.port=x jetty:run uses port number given for the default mv mvn + -djetty.port=x jetty:run uses port number given for the default mv mvn + -djetty.port=x jetty:run uses port number given for the default mvn -Djetty.port=x jetty:run uses port number given for the default connector - + refactored webxmlconfiguration to allow custom web.xml resource Refactored + + refactored webxmlconfiguration to allow custom web.xml resource refact + refactored webxmlconfiguration to allow custom web.xml resource refact + refactored webxmlconfiguration to allow custom web.xml resource Refactored WebXmlConfiguration to allow custom web.xml resource - + timestamp in stderrlog Timestamp in StdErrLog - + use mvn -dslf4j=false jetty:run to disable use of slf4j logging with use mvn + + timestamp in stderrlog timestamp in stderrlog timestamp in stderrlog + timestamp in stderrlog timestamp in stderrlog timestamp in stderrlog + Timestamp in StdErrLog + + use mvn -dslf4j=false jetty:run to disable use of slf4j logging with u use + mvn -dslf4j=false jetty:run to disable use of slf4j logging with u use mvn + -dslf4j=false jetty:run to disable use of slf4j logging with use mvn -Dslf4j=false jetty:run to disable use of slf4j logging with jdk1.4/jsp2.0 jetty-6.0.0rc1 - 16 August 2006 + JETTY-85 JETTY-86 (TrustManager and SecureRandom are now configurable; better handling of null/default values) - + add config param to jetty plugin add config param - to jetty plugin - + added modules/spring with xmlbeanfactory configuration added modules/spring - with XmlBeanFactory configuration - + added simple resourcehandler and fileserver example Added simple - ResourceHandler and FileServer example - + added start of cometd implementation (json only) added start of cometd - implementation (JSON only) - + added start of grizzly connector added start of grizzly connector - + added transformingwebappclassloader for spring 2.0 byte code modificat Added + + add config param to jetty plugin add config add + config param to jetty plugin add config add + config param to jetty plugin add config param to + jetty plugin + + added modules/spring with xmlbeanfactory configuration added modules/s added + modules/spring with xmlbeanfactory configuration added modules/s added + modules/spring with xmlbeanfactory configuration added modules/spring with + XmlBeanFactory configuration + + added simple resourcehandler and fileserver example added simple added added + simple resourcehandler and fileserver example added simple added simple + resourcehandler and fileserver example Added simple ResourceHandler and + FileServer example + + added start of cometd implementation (json only) added start of cometd added + start of cometd implementation (json only) added start of cometd added start + of cometd implementation (json only) added start of cometd implementation + (JSON only) + + added start of grizzly connector added start of grizzly connector adde added + start of grizzly connector added start of grizzly connector added start of + grizzly connector added start of grizzly connector + + added transformingwebappclassloader for spring 2.0 byte code modificat added + transformingwebappclassloader for spring 2.0 byte code modificat added + transformingwebappclassloader for spring 2.0 byte code modificat Added TransformingWebAppClassLoader for spring 2.0 byte code modification support - + allow direct filling of buffers for uncached static content. Allow direct - filling of buffers for uncached static content. + + allow direct filling of buffers for uncached static content. allow dir allow + direct filling of buffers for uncached static content. allow dir allow + direct filling of buffers for uncached static content. Allow direct filling + of buffers for uncached static content. + change path mapping so that a path spec of /foo/* does not match /foo. + change path mapping so that a path spec of /foo/* does not match /foo. + change path mapping so that a path spec of /foo/* does not match /foo. Change path mapping so that a path spec of /foo/* does not match /foo.bar : JETTY-88 - + -dstop.port must be specified. -DSTOP.PORT must be specified. + + -dstop.port must be specified. -dstop.port must be specified. -dstop.p + -dstop.port must be specified. -dstop.port must be specified. -dstop.port + must be specified. -DSTOP.PORT must be specified. + fixed bug that caused response.setstatus to ignore the provided messag fixed - bug that caused Response.setStatus to ignore the provided message - + fixed fd leak for bad tcp acks. jetty-63 Fixed FD leak for bad TCP acks. - JETTY-63 + bug that caused response.setstatus to ignore the provided messag fixed bug + that caused response.setstatus to ignore the provided messag fixed bug that + caused Response.setStatus to ignore the provided message + + jetty-63 Fixed FD leak for bad TCP acks JETTY-63 + jetty-87 JETTY-87 + jetty-90 JETTY-90 + jetty-91 JETTY-91 - + moved optional modules to extras moved optional modules to extras + + moved optional modules to extras moved optional modules to extras move moved + optional modules to extras moved optional modules to extras moved optional + modules to extras moved optional modules to extras + parse jsp-property-group in web.xml for additional jsp servlet mapping parse + jsp-property-group in web.xml for additional jsp servlet mapping parse + jsp-property-group in web.xml for additional jsp servlet mapping parse jsp-property-group in web.xml for additional JSP servlet mappings - + protected setcontenttype from being set during include protected - setContentType from being set during include - + refactored resource cache refactored resource cache + + protected setcontenttype from being set during include protected prote + protected setcontenttype from being set during include protected protected + setcontenttype from being set during include protected setContentType from + being set during include + + refactored resource cache refactored resource cache refactored resourc + refactored resource cache refactored resource cache refactored resource + cache refactored resource cache + removed org.mortbay. from context system classes configuration removed + removed org.mortbay. from context system classes configuration removed + removed org.mortbay. from context system classes configuration removed org.mortbay. from context system classes configuration - + removed support for lowresources from selectchannelconnector removed support + + removed support for lowresources from selectchannelconnector removed s + removed support for lowresources from selectchannelconnector removed s + removed support for lowresources from selectchannelconnector removed support for lowResources from SelectChannelConnector + support for binding references and referenceables and javax.mail.sessi + support for binding references and referenceables and javax.mail.sessi + support for binding references and referenceables and javax.mail.sessi Support for binding References and Referenceables and javax.mail.Sessions in JNDI jetty-6.0.0rc0 - 07 July 2006 + add ability to have a lib/ext dir from which to recursively add all ja add + ability to have a lib/ext dir from which to recursively add all ja add + ability to have a lib/ext dir from which to recursively add all ja add ability to have a lib/ext dir from which to recursively add all jars and zips to the classpath - + added 8 random letters&digits to jetty-generated tmp work dir name to Added - 8 random letters&digits to Jetty-generated tmp work dir name to ensure + + added 8 random letters&digits to jetty-generated tmp work dir name to added + 8 random letters&digits to jetty-generated tmp work dir name to added 8 + random letters&digits to jetty-generated tmp work dir name to Added 8 + random letters&digits to Jetty-generated tmp work dir name to ensure uniqueness + added html module from jetty 5 - but deprecated until maintainer found added - html module from jetty 5 - but deprecated until maintainer found - + added maximum limit to filter chain cache. Added maximum limit to filter - chain cache. + html module from jetty 5 - but deprecated until maintainer found added html + module from jetty 5 - but deprecated until maintainer found added html + module from jetty 5 - but deprecated until maintainer found + + added maximum limit to filter chain cache. added maximum limit to filt added + maximum limit to filter chain cache. added maximum limit to filt added + maximum limit to filter chain cache. Added maximum limit to filter chain + cache. + added setters and getters on sessionmanager api for session related co added + setters and getters on sessionmanager api for session related co added + setters and getters on sessionmanager api for session related co added setters and getters on SessionManager API for session related config: cookie name, url parameter name, domain, max age and path. - + added statisticshandler and statistics on connector. added StatisticsHandler - and statistics on Connector. - + added webappcontextclassloader.newinstance to better support exensible Added + + added statisticshandler and statistics on connector. added statisticsh added + statisticshandler and statistics on connector. added statisticsh added + statisticshandler and statistics on connector. added StatisticsHandler and + statistics on Connector. + + added webappcontextclassloader.newinstance to better support exensible added + webappcontextclassloader.newinstance to better support exensible added + webappcontextclassloader.newinstance to better support exensible Added WebAppContextClassLoader.newInstance to better support exensible loaders. - + allow or in for plugin allow or - in for plugin + + allow or in for plugin allow or or in for plugin allow or + or in for plugin allow or in + for plugin + changed servletcontext.getresourcepaths() to not return paths contain + changed servletcontext.getresourcepaths() to not return paths contain + changed servletcontext.getresourcepaths() to not return paths contain changed ServletContext.getResourcePaths() to not return paths containing double slashes - + change name of generated tmp directory to be change name of generated tmp - directory to be "Jetty_"+host+"_"+port+"_"+contextpath+"_"+virtualhost + + change name of generated tmp directory to be change name of generated change + name of generated tmp directory to be change name of generated change name + of generated tmp directory to be change name of generated tmp directory to + be "Jetty_"+host+"_"+port+"_"+contextpath+"_"+virtualhost + change prefix from "jetty6" to just "jetty" for plugin: eg is now mvn change - prefix from "jetty6" to just "jetty" for plugin: eg is now mvn jetty:run - + cleaned up idle expiry. Cleaned up idle expiry. + prefix from "jetty6" to just "jetty" for plugin: eg is now mvn change prefix + from "jetty6" to just "jetty" for plugin: eg is now mvn change prefix from + "jetty6" to just "jetty" for plugin: eg is now mvn jetty:run + + cleaned up idle expiry. cleaned up idle expiry. cleaned up idle expiry + cleaned up idle expiry. cleaned up idle expiry. cleaned up idle expiry. + Cleaned up idle expiry. + contexthandlercollection addcontext and setcontextclass + contexthandlercollection addcontext and setcontextclass + contexthandlercollection addcontext and setcontextclass ContextHandlerCollection addContext and setContextClass - + discard excess bytes in header buffer if connection is closing Discard + + discard excess bytes in header buffer if connection is closing discard + discard excess bytes in header buffer if connection is closing discard + discard excess bytes in header buffer if connection is closing Discard excess bytes in header buffer if connection is closing - + do not wrap eofexception with eofexception Do not wrap EofException with + + do not wrap eofexception with eofexception do not wrap eofexception wi do + not wrap eofexception with eofexception do not wrap eofexception wi do not + wrap eofexception with eofexception Do not wrap EofException with EofException + ensure explicitly set tmp directory called "work" is not deleted on ex + ensure explicitly set tmp directory called "work" is not deleted on ex + ensure explicitly set tmp directory called "work" is not deleted on ex ensure explicitly set tmp directory called "work" is not deleted on exit - + ensure mvn clean cleans the build Ensure mvn clean cleans the build - + ensure war is only unpacked if war is newer than "work" directory ensure war + + ensure mvn clean cleans the build ensure mvn clean cleans the build en + ensure mvn clean cleans the build ensure mvn clean cleans the build ensure + mvn clean cleans the build Ensure mvn clean cleans the build + + ensure war is only unpacked if war is newer than "work" directory ensu + ensure war is only unpacked if war is newer than "work" directory ensu + ensure war is only unpacked if war is newer than "work" directory ensure war is only unpacked if war is newer than "work" directory - + fixed classesdirectory param for maven plugin to be configurable fixed + + fixed classesdirectory param for maven plugin to be configurable fixed fixed + classesdirectory param for maven plugin to be configurable fixed fixed + classesdirectory param for maven plugin to be configurable fixed classesDirectory param for maven plugin to be configurable - + fixed httpgenerator convertion of non utf-8: jetty-82 fixed HttpGenerator - convertion of non UTF-8: JETTY-82 - + immutable getparametermap() immutable getParameterMap() + + jetty-82 fixed HttpGenerator convertion of non UTF-8: JETTY-82 + + immutable getparametermap() immutable getparametermap() immutable immutable + getparametermap() immutable getparametermap() immutable getparametermap() + immutable getParameterMap() + patch to allow jetty to use jsp2.1 from glassfish instead of jasper fr patch - to allow Jetty to use JSP2.1 from Glassfish instead of Jasper from Tomcat - + refactor httpchannelendpoint in preparation for sslengine refactor + to allow jetty to use jsp2.1 from glassfish instead of jasper fr patch to + allow jetty to use jsp2.1 from glassfish instead of jasper fr patch to allow + Jetty to use JSP2.1 from Glassfish instead of Jasper from Tomcat + + refactor httpchannelendpoint in preparation for sslengine refactor ref + refactor httpchannelendpoint in preparation for sslengine refactor refactor + httpchannelendpoint in preparation for sslengine refactor HttpChannelEndPoint in preparation for SslEngine - + reverse order for destroy event listeners reverse order for destroy event + + reverse order for destroy event listeners reverse order for destroy ev + reverse order for destroy event listeners reverse order for destroy ev + reverse order for destroy event listeners reverse order for destroy event listeners - + simplified jetty.xml with new constructor injections simplified jetty.xml + + simplified jetty.xml with new constructor injections simplified jetty. + simplified jetty.xml with new constructor injections simplified jetty. + simplified jetty.xml with new constructor injections simplified jetty.xml with new constructor injections - + simplified servlet context api Simplified Servlet Context API - + simplify runtime resolution of jsp library for plugin Simplify runtime + + simplified servlet context api simplified servlet context api simplifi + simplified servlet context api simplified servlet context api simplified + servlet context api Simplified Servlet Context API + + simplify runtime resolution of jsp library for plugin simplify runtime + simplify runtime resolution of jsp library for plugin simplify runtime + simplify runtime resolution of jsp library for plugin Simplify runtime resolution of JSP library for plugin - + ssl algorithm taken from system property Ssl algorithm taken from system + + ssl algorithm taken from system property ssl algorithm taken from syst ssl + algorithm taken from system property ssl algorithm taken from syst ssl + algorithm taken from system property Ssl algorithm taken from system property - + support for singlethreadmodel support + + support for singlethreadmodel support for singlethreadmodel support for singlethreadmodel support for SingleThreadModel - + support graceful shutdown support graceful shutdown - + threadpool does not need to be a lifecycle Threadpool does not need to be a + + support graceful shutdown support graceful shutdown support graceful support + graceful shutdown support graceful shutdown support graceful shutdown + support graceful shutdown + + threadpool does not need to be a lifecycle threadpool does not need to + threadpool does not need to be a lifecycle threadpool does not need to + threadpool does not need to be a lifecycle Threadpool does not need to be a LifeCycle - + updated javax code from Updated javax code from + + updated javax code from updated javax code from updated javax code fro + updated javax code from updated javax code from updated javax code from + Updated javax code from http://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk/java/javax@417727 jetty-6.0.0beta17 - 01 June 2006 - + added clover reports and enough tests to get >50% coverage Added clover - reports and enough tests to get >50% coverage - + added config to disable file memory mapped buffers for windows Added config - to disable file memory mapped buffers for windows - + added request.ishandled() Added Request.isHandled() + + added clover reports and enough tests to get >50% coverage added clove added + clover reports and enough tests to get >50% coverage added clove added + clover reports and enough tests to get >50% coverage Added clover reports + and enough tests to get >50% coverage + + added config to disable file memory mapped buffers for windows added c added + config to disable file memory mapped buffers for windows added c added + config to disable file memory mapped buffers for windows Added config to + disable file memory mapped buffers for windows + + added request.ishandled() added request.ishandled() added added + request.ishandled() added request.ishandled() added request.ishandled() + Added Request.isHandled() + boundedthreadpool.dostop waits for threads to complete + boundedthreadpool.dostop waits for threads to complete + boundedthreadpool.dostop waits for threads to complete BoundedThreadPool.doStop waits for threads to complete - + connector lowresourcemaxidletime implemented. Connector - lowResourceMaxIdleTime implemented. - + contexthandler.setconnectors replace sethosts ContextHandler.setConnectors + + connector lowresourcemaxidletime implemented. connector connector connector + lowresourcemaxidletime implemented. connector connector + lowresourcemaxidletime implemented. Connector lowResourceMaxIdleTime + implemented. + + contexthandler.setconnectors replace sethosts contexthandler.setconnec + contexthandler.setconnectors replace sethosts contexthandler.setconnec + contexthandler.setconnectors replace sethosts ContextHandler.setConnectors replace setHosts - + default servlet checks for aliases resources Default servlet checks for + + default servlet checks for aliases resources default servlet checks fo + default servlet checks for aliases resources default servlet checks fo + default servlet checks for aliases resources Default servlet checks for aliases resources - + don't reset headers during forward don't reset headers during forward - + fixed ie ssl issue. Fixed IE SSL issue. - + flush will flush all bytes rather than just some. Flush will flush all bytes - rather than just some. - + implemented runas on servlets Implemented runAs on servlets - + protected web-inf and meta-inf Protected WEB-INF and META-INF - + recovered repository from codehaus crash Recovered repository from Codehaus + + don't reset headers during forward don't reset headers during forward don't + reset headers during forward don't reset headers during forward don't reset + headers during forward don't reset headers during forward + + fixed ie ssl issue. fixed ie ssl issue. fixed ie ssl issue. fixed ie s fixed + ie ssl issue. fixed ie ssl issue. fixed ie ssl issue. Fixed IE SSL issue. + + flush will flush all bytes rather than just some. flush will flush all flush + will flush all bytes rather than just some. flush will flush all flush will + flush all bytes rather than just some. Flush will flush all bytes rather + than just some. + + implemented runas on servlets implemented runas on servlets implemente + implemented runas on servlets implemented runas on servlets implemented + runas on servlets Implemented runAs on servlets + + protected web-inf and meta-inf protected web-inf and meta-inf protecte + protected web-inf and meta-inf protected web-inf and meta-inf protected + web-inf and meta-inf Protected WEB-INF and META-INF + + recovered repository from codehaus crash recovered repository from cod + recovered repository from codehaus crash recovered repository from cod + recovered repository from codehaus crash Recovered repository from Codehaus crash - + refactored synchronization of selectchannelconnector Refactored - Synchronization of SelectChannelConnector + + refactored synchronization of selectchannelconnector refactored refact + refactored synchronization of selectchannelconnector refactored refactored + synchronization of selectchannelconnector Refactored Synchronization of + SelectChannelConnector jetty-6.0.0beta16 - 12 May 2006 - + remove a couple of system.err.printlns remove a couple of - System.err.printlns - + replace backwards compativle api in urlencoded replace backwards compativle + + remove a couple of system.err.printlns remove a couple of remove a cou + remove a couple of system.err.printlns remove a couple of remove a couple of + system.err.printlns remove a couple of System.err.printlns + + replace backwards compativle api in urlencoded replace backwards compa + replace backwards compativle api in urlencoded replace backwards compa + replace backwards compativle api in urlencoded replace backwards compativle API in UrlEncoded jetty-6.0.0beta15 - 11 May 2006 - + added parameter to allow other locations to scan for plu Added + + added parameter to allow other locations to scan for plu added + parameter to allow other locations to scan for plu added + parameter to allow other locations to scan for plu Added parameter to allow other locations to scan for plugin - + added automatic scan of all web-inf/jetty-*.xml files for plugin Added - automatic scan of all WEB-INF/jetty-*.xml files for plugin - + added embedded examples Added embedded examples - + added server attribute org.mortbay.jetty.request.maxformcontentsize Added - Server attribute org.mortbay.jetty.Request.maxFormContentSize - + added taglib resources to 2.1 jsp api jar Added taglib resources to 2.1 jsp - api jar - + added throttlingfilter and fixed race in continuations Added - ThrottlingFilter and fixed race in Continuations - + added --version to start.jar Added --version to start.jar + + added automatic scan of all web-inf/jetty-*.xml files for plugin added added + automatic scan of all web-inf/jetty-*.xml files for plugin added added + automatic scan of all web-inf/jetty-*.xml files for plugin Added automatic + scan of all WEB-INF/jetty-*.xml files for plugin + + added embedded examples added embedded examples added embedded example added + embedded examples added embedded examples added embedded examples Added + embedded examples + + added server attribute org.mortbay.jetty.request.maxformcontentsize ad added + server attribute org.mortbay.jetty.request.maxformcontentsize ad added + server attribute org.mortbay.jetty.request.maxformcontentsize Added Server + attribute org.mortbay.jetty.Request.maxFormContentSize + + added taglib resources to 2.1 jsp api jar added taglib resources to 2. added + taglib resources to 2.1 jsp api jar added taglib resources to 2. added + taglib resources to 2.1 jsp api jar Added taglib resources to 2.1 jsp api + jar + + added throttlingfilter and fixed race in continuations added added added + throttlingfilter and fixed race in continuations added added + throttlingfilter and fixed race in continuations Added ThrottlingFilter and + fixed race in Continuations + + added --version to start.jar added --version to start.jar added --vers added + --version to start.jar added --version to start.jar added --version to + start.jar Added --version to start.jar + contexthandler.setcontextpath can be called after start. + contexthandler.setcontextpath can be called after start. + contexthandler.setcontextpath can be called after start. ContextHandler.setContextPath can be called after start. - + don't accept partial authority in request line. don't accept partial - authority in request line. - + enforce 204 and 304 have no content enforce 204 and 304 have no content - + fixed handling of params after forward Fixed handling of params after - forward - + improved httpexception Improved HttpException - + improved mbeancontainer object removal improved MBeanContainer object + + don't accept partial authority in request line. don't accept partial d don't + accept partial authority in request line. don't accept partial don't accept + partial authority in request line. don't accept partial authority in request + line. + + enforce 204 and 304 have no content enforce 204 and 304 have no conten + enforce 204 and 304 have no content enforce 204 and 304 have no conten + enforce 204 and 304 have no content enforce 204 and 304 have no content + + fixed handling of params after forward fixed handling of params after fixed + handling of params after forward fixed handling of params after fixed + handling of params after forward Fixed handling of params after forward + + improved httpexception improved httpexception improved httpexception + improved httpexception improved httpexception improved httpexception + Improved HttpException + + improved mbeancontainer object removal improved mbeancontainer object + improved mbeancontainer object removal improved mbeancontainer object + improved mbeancontainer object removal improved MBeanContainer object removal - + improved mbean names improved MBean names - + improved support for java5 jconsole improved support for java5 jconsole - + major refactor to simplify server and handler hierarchy Major refactor to - simplify Server and handler hierarchy - + moved more resources to resources Moved more resources to resources + + improved mbean names improved mbean names improved mbean names improve + improved mbean names improved mbean names improved mbean names improved + MBean names + + improved support for java5 jconsole improved support for java5 jconsol + improved support for java5 jconsole improved support for java5 jconsol + improved support for java5 jconsole improved support for java5 jconsole + + major refactor to simplify server and handler hierarchy major refactor major + refactor to simplify server and handler hierarchy major refactor major + refactor to simplify server and handler hierarchy Major refactor to simplify + Server and handler hierarchy + + moved more resources to resources moved more resources to resources mo moved + more resources to resources moved more resources to resources moved more + resources to resources Moved more resources to resources + readded boundedthreadpool shrinking (and then fixed resulting deadlock + readded boundedthreadpool shrinking (and then fixed resulting deadlock + readded boundedthreadpool shrinking (and then fixed resulting deadlock readded BoundedThreadPool shrinking (and then fixed resulting deadlock) - + removed selectblockingchannelconnector (unmaintained) removed + + removed selectblockingchannelconnector (unmaintained) removed removed + removed selectblockingchannelconnector (unmaintained) removed removed + selectblockingchannelconnector (unmaintained) removed SelectBlockingChannelConnector (unmaintained) - + renamed notfoundhandler to defaulthandler Renamed NotFoundHandler to - DefaultHandler - + reset of timer task clears expiry Reset of timer task clears expiry - + session scavenger threads from threadpool Session scavenger threads from + + renamed notfoundhandler to defaulthandler renamed notfoundhandler to r + renamed notfoundhandler to defaulthandler renamed notfoundhandler to renamed + notfoundhandler to defaulthandler Renamed NotFoundHandler to DefaultHandler + + reset of timer task clears expiry reset of timer task clears expiry re reset + of timer task clears expiry reset of timer task clears expiry reset of timer + task clears expiry Reset of timer task clears expiry + + session scavenger threads from threadpool session scavenger threads fr + session scavenger threads from threadpool session scavenger threads fr + session scavenger threads from threadpool Session scavenger threads from threadpool + setsendserverversion method added to server to control sending of serv + setsendserverversion method added to server to control sending of serv + setsendserverversion method added to server to control sending of serv setSendServerVersion method added to Server to control sending of Server: http header - + simplified defaultservlet static content buffering Simplified DefaultServlet + + simplified defaultservlet static content buffering simplified defaults + simplified defaultservlet static content buffering simplified defaults + simplified defaultservlet static content buffering Simplified DefaultServlet static content buffering - + thread names include uri if debug set Thread names include URI if debug set + + thread names include uri if debug set thread names include uri if debu + thread names include uri if debug set thread names include uri if debu + thread names include uri if debug set Thread names include URI if debug set jetty-6.0.0beta14 - 09 April 2006 - + added configurability for webdefault.xml in maven plugin added - configurability for webdefault.xml in maven plugin - + added jasper 2.1 as jesper (jasper without jcl) Added Jasper 2.1 as jesper - (jasper without JCL) - + added jetty-util.jar module added jetty-util.jar module - + added jsp 2.1 apis from apache Added JSP 2.1 APIs from apache - + added proxyservlet added ProxyServlet - + added reset to continuation added reset to Continuation - + added support for stopping jetty using "java -jar start.jar --stop" added - support for stopping jetty using "java -jar start.jar --stop" - + adding invokerservlet adding InvokerServlet - + change tmp dir of plugin to work to be in line with jetty convention Change + + added configurability for webdefault.xml in maven plugin added added added + configurability for webdefault.xml in maven plugin added added + configurability for webdefault.xml in maven plugin added configurability for + webdefault.xml in maven plugin + + added jasper 2.1 as jesper (jasper without jcl) added jasper 2.1 as je added + jasper 2.1 as jesper (jasper without jcl) added jasper 2.1 as je added + jasper 2.1 as jesper (jasper without jcl) Added Jasper 2.1 as jesper (jasper + without JCL) + + added jetty-util.jar module added jetty-util.jar module added jetty-ut added + jetty-util.jar module added jetty-util.jar module added jetty-util.jar + module added jetty-util.jar module + + added jsp 2.1 apis from apache added jsp 2.1 apis from apache added js added + jsp 2.1 apis from apache added jsp 2.1 apis from apache added jsp 2.1 apis + from apache Added JSP 2.1 APIs from apache + + added proxyservlet added proxyservlet added proxyservlet added proxyse added + proxyservlet added proxyservlet added proxyservlet added ProxyServlet + + added reset to continuation added reset to continuation added reset to added + reset to continuation added reset to continuation added reset to + continuation added reset to Continuation + + added support for stopping jetty using "java -jar start.jar --stop" ad added + support for stopping jetty using "java -jar start.jar --stop" ad added + support for stopping jetty using "java -jar start.jar --stop" added support + for stopping jetty using "java -jar start.jar --stop" + + adding invokerservlet adding invokerservlet adding invokerservlet addi + adding invokerservlet adding invokerservlet adding invokerservlet adding + InvokerServlet + + change tmp dir of plugin to work to be in line with jetty convention c + change tmp dir of plugin to work to be in line with jetty convention c + change tmp dir of plugin to work to be in line with jetty convention Change tmp dir of plugin to work to be in line with jetty convention - + fixed forward bug (treated as include) fixed forward bug (treated as - include) - + fixed httpfield iterator fixed HttpField iterator - + fixed priority of port from url over host header fixed priority of port from - url over host header - + ignore dirs and files that don't exist in plugin scanner ignore dirs and + + fixed forward bug (treated as include) fixed forward bug (treated as f fixed + forward bug (treated as include) fixed forward bug (treated as fixed forward + bug (treated as include) fixed forward bug (treated as include) + + fixed httpfield iterator fixed httpfield iterator fixed httpfield iter fixed + httpfield iterator fixed httpfield iterator fixed httpfield iterator fixed + HttpField iterator + + fixed priority of port from url over host header fixed priority of por fixed + priority of port from url over host header fixed priority of por fixed + priority of port from url over host header fixed priority of port from url + over host header + + ignore dirs and files that don't exist in plugin scanner ignore dirs a + ignore dirs and files that don't exist in plugin scanner ignore dirs a + ignore dirs and files that don't exist in plugin scanner ignore dirs and files that don't exist in plugin scanner - + implemented request.isuserinrole implemented request.isUserInRole - + improved contenttype handling and test harness improved contentType handling + + implemented request.isuserinrole implemented request.isuserinrole + implemented request.isuserinrole implemented request.isuserinrole + implemented request.isuserinrole implemented request.isUserInRole + + improved contenttype handling and test harness improved contenttype ha + improved contenttype handling and test harness improved contenttype ha + improved contenttype handling and test harness improved contentType handling and test harness - + modify plugin to select jsp impl at runtime Modify plugin to select JSP impl + + modify plugin to select jsp impl at runtime modify plugin to select js + modify plugin to select jsp impl at runtime modify plugin to select js + modify plugin to select jsp impl at runtime Modify plugin to select JSP impl at runtime - + moved test webapps to examples directory moved test webapps to examples - directory - + securityhandler removed if not used. securityHandler removed if not used. - + started readding logging to jesper using jdk logging Started readding + + moved test webapps to examples directory moved test webapps to example moved + test webapps to examples directory moved test webapps to example moved test + webapps to examples directory moved test webapps to examples directory + + securityhandler removed if not used. securityhandler removed if not us + securityhandler removed if not used. securityhandler removed if not us + securityhandler removed if not used. securityHandler removed if not used. + + started readding logging to jesper using jdk logging started readding + started readding logging to jesper using jdk logging started readding + started readding logging to jesper using jdk logging Started readding logging to jesper using jdk logging - + stop jdbcuserrealm coercing all credentials to string stop JDBCUserRealm - coercing all credentials to String - + use start.config to select which jsp impl at runtime based on jdk vers Use + + stop jdbcuserrealm coercing all credentials to string stop jdbcuserrea stop + jdbcuserrealm coercing all credentials to string stop jdbcuserrea stop + jdbcuserrealm coercing all credentials to string stop JDBCUserRealm coercing + all credentials to String + + use start.config to select which jsp impl at runtime based on jdk vers use + start.config to select which jsp impl at runtime based on jdk vers use + start.config to select which jsp impl at runtime based on jdk vers Use start.config to select which JSP impl at runtime based on jdk version jetty-6.0.0beta12 - 16 March 2006 - + added jsp2.0 demos to test webapp Added JSP2.0 demos to test webapp - + added provider support to ssllistener Added provider support to SslListener - + fixed error handling in error page Fixed error handling in error page - + fixed jettyplus for root contexts Fixed JettyPlus for root contexts - + fixed maven plugin jndi for redeploys Fixed maven plugin JNDI for redeploys - + fixed tld discovery for plugin (search dependencies) Fixed tld discovery for - plugin (search dependencies) - + log error for runtimeexceptions Log ERROR for runtimeExceptions - + upgraded jasper to 5.5.15 Upgraded jasper to 5.5.15 + + added jsp2.0 demos to test webapp added jsp2.0 demos to test webapp ad added + jsp2.0 demos to test webapp added jsp2.0 demos to test webapp added jsp2.0 + demos to test webapp Added JSP2.0 demos to test webapp + + added provider support to ssllistener added provider support to ssllis added + provider support to ssllistener added provider support to ssllis added + provider support to ssllistener Added provider support to SslListener + + fixed error handling in error page fixed error handling in error page fixed + error handling in error page fixed error handling in error page fixed error + handling in error page Fixed error handling in error page + + fixed jettyplus for root contexts fixed jettyplus for root contexts fi fixed + jettyplus for root contexts fixed jettyplus for root contexts fixed + jettyplus for root contexts Fixed JettyPlus for root contexts + + fixed maven plugin jndi for redeploys fixed maven plugin jndi for rede fixed + maven plugin jndi for redeploys fixed maven plugin jndi for rede fixed maven + plugin jndi for redeploys Fixed maven plugin JNDI for redeploys + + fixed tld discovery for plugin (search dependencies) fixed tld discove fixed + tld discovery for plugin (search dependencies) fixed tld discove fixed tld + discovery for plugin (search dependencies) Fixed tld discovery for plugin + (search dependencies) + + log error for runtimeexceptions log error for runtimeexceptions log er log + error for runtimeexceptions log error for runtimeexceptions log error for + runtimeexceptions Log ERROR for runtimeExceptions + + upgraded jasper to 5.5.15 upgraded jasper to 5.5.15 upgraded jasper to + upgraded jasper to 5.5.15 upgraded jasper to 5.5.15 upgraded jasper to + 5.5.15 Upgraded jasper to 5.5.15 jetty-6.0.0beta11 - 14 March 2006 - + added httpuri and improved utf-8 parsing. Added HttpURI and improved UTF-8 + + added httpuri and improved utf-8 parsing. added httpuri and improved u added + httpuri and improved utf-8 parsing. added httpuri and improved u added + httpuri and improved utf-8 parsing. Added HttpURI and improved UTF-8 parsing. - + added jaas added JAAS - + added missing configurations for maven plugin added missing Configurations - for maven plugin - + added patch to use joda-time added patch to use joda-time - + added webapp-specific jndi entries added webapp-specific JNDI entries - + fixed ; decoding in uris fixed ; decoding in URIs - + fixed form authentication fixed FORM authentication - + moved dtd and xsd to standard javax location moved dtd and xsd to standard - javax location - + refactored configuration files and start() refactored configuration files + + added jaas added jaas added jaas added jaas added jaas added jaas added jaas + added JAAS + + added missing configurations for maven plugin added missing configurat added + missing configurations for maven plugin added missing configurat added + missing configurations for maven plugin added missing Configurations for + maven plugin + + added patch to use joda-time added patch to use joda-time added patch added + patch to use joda-time added patch to use joda-time added patch to use + joda-time added patch to use joda-time + + added webapp-specific jndi entries added webapp-specific jndi entries added + webapp-specific jndi entries added webapp-specific jndi entries added + webapp-specific jndi entries added webapp-specific JNDI entries + + fixed ; decoding in uris fixed ; decoding in uris fixed ; decoding in fixed + ; decoding in uris fixed ; decoding in uris fixed ; decoding in uris fixed ; + decoding in URIs + + fixed form authentication fixed form authentication fixed form fixed form + authentication fixed form authentication fixed form authentication fixed + FORM authentication + + moved dtd and xsd to standard javax location moved dtd and xsd to stan moved + dtd and xsd to standard javax location moved dtd and xsd to stan moved dtd + and xsd to standard javax location moved dtd and xsd to standard javax + location + + refactored configuration files and start() refactored configuration fi + refactored configuration files and start() refactored configuration fi + refactored configuration files and start() refactored configuration files and start() - + refactored session id management refactored session ID management - + refactored writers and improved utf-8 generation. refactored writers and + + refactored session id management refactored session id management refa + refactored session id management refactored session id management refactored + session id management refactored session ID management + + refactored writers and improved utf-8 generation. refactored writers a + refactored writers and improved utf-8 generation. refactored writers a + refactored writers and improved utf-8 generation. refactored writers and improved UTF-8 generation. jetty-6.0.0beta10 - 25 February 2006 - + added getlocalport() to connector added getLocalPort() to connector - + added support for java:comp/env Added support for java:comp/env - + added support for pluggable transaction manager Added support for pluggable + + added getlocalport() to connector added getlocalport() to connector ad added + getlocalport() to connector added getlocalport() to connector added + getlocalport() to connector added getLocalPort() to connector + + added support for java:comp/env added support for java:comp/env added added + support for java:comp/env added support for java:comp/env added support for + java:comp/env Added support for java:comp/env + + added support for pluggable transaction manager added support for plug added + support for pluggable transaction manager added support for plug added + support for pluggable transaction manager Added support for pluggable transaction manager - + additional accessors for request logging Additional accessors for request + + additional accessors for request logging additional accessors for requ + additional accessors for request logging additional accessors for requ + additional accessors for request logging Additional accessors for request logging - + fixed content-type for range requests Fixed content-type for range requests - + fixed default servlet handling of includes Fixed default servlet handling of + + fixed content-type for range requests fixed content-type for range req fixed + content-type for range requests fixed content-type for range req fixed + content-type for range requests Fixed content-type for range requests + + fixed default servlet handling of includes fixed default servlet handl fixed + default servlet handling of includes fixed default servlet handl fixed + default servlet handling of includes Fixed default servlet handling of includes - + fix for myfaces and include with close Fix for myfaces and include with - close - + fix for sf1435795 30sec delay from c taylor Fix for sf1435795 30sec delay - from c taylor - + fix http://jira.codehaus.org/browse/jetty-6. hi byte reader Fix + + fix for myfaces and include with close fix for myfaces and include wit fix + for myfaces and include with close fix for myfaces and include wit fix for + myfaces and include with close Fix for myfaces and include with close + + fix for sf1435795 30sec delay from c taylor fix for sf1435795 30sec de fix + for sf1435795 30sec delay from c taylor fix for sf1435795 30sec de fix for + sf1435795 30sec delay from c taylor Fix for sf1435795 30sec delay from c + taylor + + fix http://jira.codehaus.org/browse/jetty-6. hi byte reader fix fix fix + http://jira.codehaus.org/browse/jetty-6. hi byte reader fix fix + http://jira.codehaus.org/browse/jetty-6. hi byte reader Fix http://jira.codehaus.org/browse/JETTY-6. hi byte reader - + fix sf1431936 don't chunk the chunk Fix sf1431936 don't chunk the chunk - + forward masks include attributes and vice versa Forward masks include + + fix sf1431936 don't chunk the chunk fix sf1431936 don't chunk the chun fix + sf1431936 don't chunk the chunk fix sf1431936 don't chunk the chun fix + sf1431936 don't chunk the chunk Fix sf1431936 don't chunk the chunk + + forward masks include attributes and vice versa forward masks include + forward masks include attributes and vice versa forward masks include + forward masks include attributes and vice versa Forward masks include attributes and vice versa - + updates javax to mr2 release Updates javax to MR2 release + + updates javax to mr2 release updates javax to mr2 release updates java + updates javax to mr2 release updates javax to mr2 release updates javax to + mr2 release Updates javax to MR2 release jetty-6.0.0beta9 - 09 February 2006 - + added cgi servlet. Added CGI servlet. - + added request log. Added request log. - + added tld tag listener handling. Added TLD tag listener handling. - + continuation cleanup Continuation cleanup - + fixed dispatch of wrapped requests. Fixed dispatch of wrapped requests. - + fixed double flush of short content. Fixed double flush of short content. - + fixed setlocale bug sf1426940 fixed setLocale bug sf1426940 - + fixed unraw decoding of query string Fixed unraw decoding of query string - + force a tempdir to be set. Force a tempdir to be set. - + force jasper scratch dir. Force jasper scratch dir. - + pathmap for direct context mapping. PathMap for direct context mapping. - + refactored chat demo and upgraded prototype.js Refactored chat demo and + + added cgi servlet. added cgi servlet. added cgi servlet. added cgi ser added + cgi servlet. added cgi servlet. added cgi servlet. Added CGI servlet. + + added request log. added request log. added request log. added request added + request log. added request log. added request log. Added request log. + + added tld tag listener handling. added tld tag listener handling. adde added + tld tag listener handling. added tld tag listener handling. added tld tag + listener handling. Added TLD tag listener handling. + + continuation cleanup continuation cleanup continuation cleanup continu + continuation cleanup continuation cleanup continuation cleanup Continuation + cleanup + + fixed dispatch of wrapped requests. fixed dispatch of wrapped requests fixed + dispatch of wrapped requests. fixed dispatch of wrapped requests fixed + dispatch of wrapped requests. Fixed dispatch of wrapped requests. + + fixed double flush of short content. fixed double flush of short conte fixed + double flush of short content. fixed double flush of short conte fixed + double flush of short content. Fixed double flush of short content. + + fixed setlocale bug sf1426940 fixed setlocale bug sf1426940 fixed setl fixed + setlocale bug sf1426940 fixed setlocale bug sf1426940 fixed setlocale bug + sf1426940 fixed setLocale bug sf1426940 + + fixed unraw decoding of query string fixed unraw decoding of query str fixed + unraw decoding of query string fixed unraw decoding of query str fixed unraw + decoding of query string Fixed unraw decoding of query string + + force a tempdir to be set. force a tempdir to be set. force a tempdir force + a tempdir to be set. force a tempdir to be set. force a tempdir to be set. + Force a tempdir to be set. + + force jasper scratch dir. force jasper scratch dir. force jasper scrat force + jasper scratch dir. force jasper scratch dir. force jasper scratch dir. + Force jasper scratch dir. + + pathmap for direct context mapping. pathmap for direct context mapping + pathmap for direct context mapping. pathmap for direct context mapping + pathmap for direct context mapping. PathMap for direct context mapping. + + refactored chat demo and upgraded prototype.js refactored chat demo an + refactored chat demo and upgraded prototype.js refactored chat demo an + refactored chat demo and upgraded prototype.js Refactored chat demo and upgraded prototype.js jetty-6.0.0beta8 - 24 January 2006 - + conveniance addhandler removehandler methods conveniance addHandler + + conveniance addhandler removehandler methods conveniance addhandler + conveniance addhandler removehandler methods conveniance addhandler + conveniance addhandler removehandler methods conveniance addHandler removeHandler methods + fixed bug in overloaded write method on httpconnection (reported again fixed - bug in overloaded write method on HttpConnection (reported against - Tapestry4.0) - + fixed dispatch of new session problem. sf:1407090 fixed dispatch of new - session problem. sf:1407090 - + handle pipeline requests without hangs Handle pipeline requests without + bug in overloaded write method on httpconnection (reported again fixed bug + in overloaded write method on httpconnection (reported again fixed bug in + overloaded write method on HttpConnection (reported against Tapestry4.0) + + fixed dispatch of new session problem. sf:1407090 fixed dispatch of ne fixed + dispatch of new session problem. sf:1407090 fixed dispatch of ne fixed + dispatch of new session problem. sf:1407090 fixed dispatch of new session + problem. sf:1407090 + + handle pipeline requests without hangs handle pipeline requests withou + handle pipeline requests without hangs handle pipeline requests withou + handle pipeline requests without hangs Handle pipeline requests without hangs - + hid org.apache.commons.logging and org.slf4j packages from webapp hid + + hid org.apache.commons.logging and org.slf4j packages from webapp hid hid + org.apache.commons.logging and org.slf4j packages from webapp hid hid + org.apache.commons.logging and org.slf4j packages from webapp hid org.apache.commons.logging and org.slf4j packages from webapp - + improve buffer return mechanism. improve buffer return mechanism. - + improved caching of content types improved caching of content types + + improve buffer return mechanism. improve buffer return mechanism. impr + improve buffer return mechanism. improve buffer return mechanism. improve + buffer return mechanism. improve buffer return mechanism. + + improved caching of content types improved caching of content types im + improved caching of content types improved caching of content types improved + caching of content types improved caching of content types + maven-jetty6-plugin: ensure compile is done before invoking jetty maven-jetty6-plugin: ensure compile is done before invoking jetty + maven-jetty6-plugin: ensure compile is done before invoking jetty + maven-jetty6-plugin: ensure compile is done before invoking jetty + maven-jetty6-plugin: support all types of artifact dependencies maven-jetty6-plugin: support all types of artifact dependencies + maven-jetty6-plugin: support all types of artifact dependencies + maven-jetty6-plugin: support all types of artifact dependencies + maven-jetty6-plugin stopped transitive inclusion of log4j and + maven-jetty6-plugin stopped transitive inclusion of log4j and + maven-jetty6-plugin stopped transitive inclusion of log4j and maven-jetty6-plugin stopped transitive inclusion of log4j and commons-logging from commons-el for jasper - + patch to remove spurious ; in httpfields patch to remove spurious ; in - HttpFields - + reinstated rfc2616 test harness reinstated rfc2616 test harness - + removed queue from thread pool. Removed queue from thread pool. + + patch to remove spurious ; in httpfields patch to remove spurious ; in patch + to remove spurious ; in httpfields patch to remove spurious ; in patch to + remove spurious ; in httpfields patch to remove spurious ; in HttpFields + + reinstated rfc2616 test harness reinstated rfc2616 test harness reinst + reinstated rfc2616 test harness reinstated rfc2616 test harness reinstated + rfc2616 test harness reinstated rfc2616 test harness + + removed queue from thread pool. removed queue from thread pool. remove + removed queue from thread pool. removed queue from thread pool. removed + queue from thread pool. Removed queue from thread pool. jetty-6.0.0Beta7 - + faster header name lookup Faster header name lookup - + fixed infinite loop with chunk handling Fixed infinite loop with chunk - handling - + maven-jetty6-plugin added tmpdirectory property maven-jetty6-plugin added + + faster header name lookup faster header name lookup faster header name + faster header name lookup faster header name lookup faster header name + lookup Faster header name lookup + + fixed infinite loop with chunk handling fixed infinite loop with chunk fixed + infinite loop with chunk handling fixed infinite loop with chunk fixed + infinite loop with chunk handling Fixed infinite loop with chunk handling + + maven-jetty6-plugin added tmpdirectory property maven-jetty6-plugin ad + maven-jetty6-plugin added tmpdirectory property maven-jetty6-plugin ad + maven-jetty6-plugin added tmpdirectory property maven-jetty6-plugin added tmpDirectory property + maven-jetty6-plugin stopped throwing an error if there is no target/cl + maven-jetty6-plugin stopped throwing an error if there is no target/cl + maven-jetty6-plugin stopped throwing an error if there is no target/cl maven-jetty6-plugin stopped throwing an error if there is no target/classes directory - + null dispatch attributes not in names null dispatch attributes not in names - + reduced info verbosity reduced info verbosity - + removed singleton container removed singleton Container + + null dispatch attributes not in names null dispatch attributes not in null + dispatch attributes not in names null dispatch attributes not in null + dispatch attributes not in names null dispatch attributes not in names + + reduced info verbosity reduced info verbosity reduced info verbosity r + reduced info verbosity reduced info verbosity reduced info verbosity reduced + info verbosity + + removed singleton container removed singleton container removed single + removed singleton container removed singleton container removed singleton + container removed singleton Container jetty-6.0.0Beta6 - + fixed issue with blocking reads Fixed issue with blocking reads - + fixed issue with unknown headers Fixed issue with unknown headers - + optimizations optimizations + + fixed issue with blocking reads fixed issue with blocking reads fixed fixed + issue with blocking reads fixed issue with blocking reads fixed issue with + blocking reads Fixed issue with blocking reads + + fixed issue with unknown headers fixed issue with unknown headers fixe fixed + issue with unknown headers fixed issue with unknown headers fixed issue with + unknown headers Fixed issue with unknown headers + + optimizations optimizations optimizations optimizations optimizations + optimizations optimizations optimizations jetty-6.0.0Beta5 - + added management module for mbeans Added management module for mbeans - + fixed writer char[] creations Fixed writer char[] creations - + moved to svn Moved to SVN + + added management module for mbeans added management module for mbeans added + management module for mbeans added management module for mbeans added + management module for mbeans Added management module for mbeans + + fixed writer char[] creations fixed writer char[] creations fixed writ fixed + writer char[] creations fixed writer char[] creations fixed writer char[] + creations Fixed writer char[] creations + + moved to svn moved to svn moved to svn moved to svn moved to svn moved to + svn moved to svn Moved to SVN jetty-6.0.0Beta4 - + cve-2006-2758 fixed jsp visibility security issue. CVE-2006-2758 Fixed JSP + + cve-2006-2758 fixed jsp visibility security issue. cve-2006-2758 fixed + cve-2006-2758 fixed jsp visibility security issue. cve-2006-2758 fixed + cve-2006-2758 fixed jsp visibility security issue. CVE-2006-2758 Fixed JSP visibility security issue. - + improved jetty-web.xml access to org.mortbay classes. Improved jetty-web.xml + + improved jetty-web.xml access to org.mortbay classes. improved jetty-w + improved jetty-web.xml access to org.mortbay classes. improved jetty-w + improved jetty-web.xml access to org.mortbay classes. Improved jetty-web.xml access to org.mortbay classes. - + jasper 5.5.12 Jasper 5.5.12 - + system property support in plugin System property support in plugin + + jasper 5.5.12 jasper 5.5.12 jasper 5.5.12 jasper 5.5.12 jasper 5.5.12 jasper + 5.5.12 jasper 5.5.12 Jasper 5.5.12 + + system property support in plugin system property support in plugin sy + system property support in plugin system property support in plugin system + property support in plugin System property support in plugin jetty-6.0.0Beta3 - + fixed classloader issue with server classes Fixed classloader issue with - server classes - + fixed error in block read Fixed error in block read - + named dispatch. Named dispatch. + + fixed classloader issue with server classes fixed classloader issue wi fixed + classloader issue with server classes fixed classloader issue wi fixed + classloader issue with server classes Fixed classloader issue with server + classes + + fixed error in block read fixed error in block read fixed error in blo fixed + error in block read fixed error in block read fixed error in block read + Fixed error in block read + + named dispatch. named dispatch. named dispatch. named dispatch. named + dispatch. named dispatch. named dispatch. Named dispatch. jetty-6.0.0Beta2 - + improved buffer return Improved buffer return - + improved reuse of httpfield values and cookies. Improved reuse of HttpField + + improved buffer return improved buffer return improved buffer return + improved buffer return improved buffer return improved buffer return + Improved buffer return + + improved reuse of httpfield values and cookies. improved reuse of http + improved reuse of httpfield values and cookies. improved reuse of http + improved reuse of httpfield values and cookies. Improved reuse of HttpField values and cookies. - + loosely coupled with jsp servlet loosely coupled with JSP servlet - + loosely coupled with slf4j loosely coupled with SLF4J - + merged util jar back into jetty jar merged util jar back into jetty jar - + simpler continuation api Simpler continuation API + + loosely coupled with jsp servlet loosely coupled with jsp servlet loos + loosely coupled with jsp servlet loosely coupled with jsp servlet loosely + coupled with jsp servlet loosely coupled with JSP servlet + + loosely coupled with slf4j loosely coupled with slf4j loosely coupled + loosely coupled with slf4j loosely coupled with slf4j loosely coupled with + slf4j loosely coupled with SLF4J + + merged util jar back into jetty jar merged util jar back into jetty ja + merged util jar back into jetty jar merged util jar back into jetty ja + merged util jar back into jetty jar merged util jar back into jetty jar + + simpler continuation api simpler continuation api simpler continuation + simpler continuation api simpler continuation api simpler continuation api + Simpler continuation API jetty-6.0.0Beta1 - + error pages Error pages - + implemented all listeners Implemented all listeners - + maven2 plugin maven2 plugin - + multiple select sets Multiple select sets - + refactored start/stop refactored start/stop - + servlet 2.5 api Servlet 2.5 API - + shutdown hook shutdown hook - + ssl connector SSL connector - + virtual hosts Virtual hosts + + error pages error pages error pages error pages error pages error pages + error pages Error pages + + implemented all listeners implemented all listeners implemented all + implemented all listeners implemented all listeners implemented all + listeners Implemented all listeners + + maven2 plugin maven2 plugin maven2 plugin maven2 plugin maven2 plugin maven2 + plugin maven2 plugin maven2 plugin + + multiple select sets multiple select sets multiple select sets multipl + multiple select sets multiple select sets multiple select sets Multiple + select sets + + refactored start/stop refactored start/stop refactored start/stop refa + refactored start/stop refactored start/stop refactored start/stop refactored + start/stop + + servlet 2.5 api servlet 2.5 api servlet 2.5 api servlet 2.5 api servlet 2.5 + api servlet 2.5 api servlet 2.5 api Servlet 2.5 API + + shutdown hook shutdown hook shutdown hook shutdown hook shutdown hook + shutdown hook shutdown hook shutdown hook + + ssl connector ssl connector ssl connector ssl connector ssl connector ssl + connector ssl connector SSL connector + + virtual hosts virtual hosts virtual hosts virtual hosts virtual hosts + virtual hosts virtual hosts Virtual hosts jetty-6.0.0Beta0 - + dispatcher parameters Dispatcher parameters - + fixed blocking read Fixed blocking read - + maven 2 build Maven 2 build - + utf-8 encoding for urls UTF-8 encoding for URLs + + dispatcher parameters dispatcher parameters dispatcher parameters disp + dispatcher parameters dispatcher parameters dispatcher parameters Dispatcher + parameters + + fixed blocking read fixed blocking read fixed blocking read fixed bloc fixed + blocking read fixed blocking read fixed blocking read Fixed blocking read + + maven 2 build maven 2 build maven 2 build maven 2 build maven 2 build maven + 2 build maven 2 build Maven 2 build + + utf-8 encoding for urls utf-8 encoding for urls utf-8 encoding for url utf-8 + encoding for urls utf-8 encoding for urls utf-8 encoding for urls UTF-8 + encoding for URLs jetty-6.0.0APLPA3 - + added demo for continuations Added demo for Continuations - + jasper and associated libraries. Jasper and associated libraries. + + added demo for continuations added demo for continuations added demo f added + demo for continuations added demo for continuations added demo for + continuations Added demo for Continuations + + jasper and associated libraries. jasper and associated libraries. jasp + jasper and associated libraries. jasper and associated libraries. jasper and + associated libraries. Jasper and associated libraries. jetty-6.0.0ALPHA2 + continuations - way cool way to suspend a request and retry later. + continuations - way cool way to suspend a request and retry later. + continuations - way cool way to suspend a request and retry later. Continuations - way cool way to suspend a request and retry later. - + dispatchers Dispatchers - + security Security + + dispatchers dispatchers dispatchers dispatchers dispatchers dispatchers + dispatchers Dispatchers + + security security security security security security security Security jetty-6.0.0ALPHA1 - + filters Filters - + web.xml handling web.xml handling + + filters filters filters filters filters filters filters Filters + + web.xml handling web.xml handling web.xml handling web.xml handling web.xml + handling web.xml handling web.xml handling web.xml handling jetty-6.0.0ALPHA0 - + file may be sent as sent is a single operation. file may be sent as sent is - a single operation. + + file may be sent as sent is a single operation. file may be sent as se file + may be sent as sent is a single operation. file may be sent as se file may + be sent as sent is a single operation. file may be sent as sent is a single + operation. + improved "dependancy injection" and "inversion of control" design of + improved "dependancy injection" and "inversion of control" design of + improved "dependancy injection" and "inversion of control" design of Improved "dependancy injection" and "inversion of control" design of components - + improved "interceptor" design of handlers Improved "interceptor" design of + + improved "interceptor" design of handlers improved "interceptor" desig + improved "interceptor" design of handlers improved "interceptor" desig + improved "interceptor" design of handlers Improved "interceptor" design of handlers - + missing request dispatchers Missing Request Dispatchers - + missing security Missing Security - + missing war support Missing war support - + missing web.xml based configuration Missing web.xml based configuration + + missing request dispatchers missing request dispatchers missing reques + missing request dispatchers missing request dispatchers missing request + dispatchers Missing Request Dispatchers + + missing security missing security missing security missing security missing + security missing security missing security Missing Security + + missing war support missing war support missing war support missing wa + missing war support missing war support missing war support Missing war + support + + missing web.xml based configuration missing web.xml based configuratio + missing web.xml based configuration missing web.xml based configuratio + missing web.xml based configuration Missing web.xml based configuration + optional use of nio buffering so that efficient direct buffers and mem + optional use of nio buffering so that efficient direct buffers and mem + optional use of nio buffering so that efficient direct buffers and mem Optional use of NIO Buffering so that efficient direct buffers and memory mapped files can be used. + optional use of nio gather writes, so that for example a http header a + optional use of nio gather writes, so that for example a http header a + optional use of nio gather writes, so that for example a http header a Optional use of NIO gather writes, so that for example a HTTP header and a memory mapped - + optional use of nio non-blocking scheduling so that threads are not Optional + + optional use of nio non-blocking scheduling so that threads are not op + optional use of nio non-blocking scheduling so that threads are not op + optional use of nio non-blocking scheduling so that threads are not Optional use of NIO non-blocking scheduling so that threads are not allocated per connection. - + smart split buffer design allows large buffers to only be allocated to Smart - split buffer design allows large buffers to only be allocated to active + + smart split buffer design allows large buffers to only be allocated to smart + split buffer design allows large buffers to only be allocated to smart split + buffer design allows large buffers to only be allocated to Smart split + buffer design allows large buffers to only be allocated to active connections. The resulting memory savings allow very large buffers to be used, which increases the chance of efficient asynchronous flushing and of avoiding chunking. + totally rearchitected and rebuilt, so 10 years of cruft could be remov + totally rearchitected and rebuilt, so 10 years of cruft could be remov + totally rearchitected and rebuilt, so 10 years of cruft could be remov Totally rearchitected and rebuilt, so 10 years of cruft could be removed! jetty-5.1.11RC0 - 05 April 2006 - + added provider support to ssllistener Added provider support to SslListener - + fixed ajp handling of ;jsessionid. Fixed AJP handling of ;jsessionid. - + force close with shutdownoutput for win32 force close with shutdownOutput - for win32 - + improved contenttype param handling improved contentType param handling - + logging improvements for servlet and runtime exceptions logging improvements + + added provider support to ssllistener added provider support to ssllis added + provider support to ssllistener added provider support to ssllis added + provider support to ssllistener Added provider support to SslListener + + fixed ajp handling of ;jsessionid. fixed ajp handling of ;jsessionid. fixed + ajp handling of ;jsessionid. fixed ajp handling of ;jsessionid. fixed ajp + handling of ;jsessionid. Fixed AJP handling of ;jsessionid. + + force close with shutdownoutput for win32 force close with shutdownout force + close with shutdownoutput for win32 force close with shutdownout force close + with shutdownoutput for win32 force close with shutdownOutput for win32 + + improved contenttype param handling improved contenttype param handlin + improved contenttype param handling improved contenttype param handlin + improved contenttype param handling improved contentType param handling + + logging improvements for servlet and runtime exceptions logging improv + logging improvements for servlet and runtime exceptions logging improv + logging improvements for servlet and runtime exceptions logging improvements for servlet and runtime exceptions - + npe protection if desirable client certificates NPE protection if desirable + + npe protection if desirable client certificates npe protection if desi npe + protection if desirable client certificates npe protection if desi npe + protection if desirable client certificates NPE protection if desirable client certificates - + stop jdbcuserrealm forcing all credentials to be string stop JDBCUserRealm + + stop jdbcuserrealm forcing all credentials to be string stop jdbcuserr stop + jdbcuserrealm forcing all credentials to be string stop jdbcuserr stop + jdbcuserrealm forcing all credentials to be string stop JDBCUserRealm forcing all credentials to be String jetty-5.1.10 - 05 January 2006 - + fixed path aliasing with // on windows. Fixed path aliasing with // on - windows. - + fix for ajp13 with encoded path Fix for AJP13 with encoded path - + fix for ajp13 with multiple headers Fix for AJP13 with multiple headers - + put post content default back to iso_8859_1. get is utf-8 still Put POST - content default back to iso_8859_1. GET is UTF-8 still - + remove null dispatch attributes from getattributenames Remove null dispatch + + fixed path aliasing with // on windows. fixed path aliasing with // on fixed + path aliasing with // on windows. fixed path aliasing with // on fixed path + aliasing with // on windows. Fixed path aliasing with // on windows. + + fix for ajp13 with encoded path fix for ajp13 with encoded path fix fo fix + for ajp13 with encoded path fix for ajp13 with encoded path fix for ajp13 + with encoded path Fix for AJP13 with encoded path + + fix for ajp13 with multiple headers fix for ajp13 with multiple header fix + for ajp13 with multiple headers fix for ajp13 with multiple header fix for + ajp13 with multiple headers Fix for AJP13 with multiple headers + + put post content default back to iso_8859_1. get is utf-8 still put po put + post content default back to iso_8859_1. get is utf-8 still put po put post + content default back to iso_8859_1. get is utf-8 still Put POST content + default back to iso_8859_1. GET is UTF-8 still + + remove null dispatch attributes from getattributenames remove null dis + remove null dispatch attributes from getattributenames remove null dis + remove null dispatch attributes from getattributenames Remove null dispatch attributes from getAttributeNames jetty-4.2.25 - 04 January 2006 - + fixed aliasing of // for win32 Fixed aliasing of // for win32 + + fixed aliasing of // for win32 fixed aliasing of // for win32 fixed al fixed + aliasing of // for win32 fixed aliasing of // for win32 fixed aliasing of // + for win32 Fixed aliasing of // for win32 jetty-5.1.9 - 07 December 2005 - + fixed wantclientauth(false) overriding netclientauth(true) Fixed + + fixed wantclientauth(false) overriding netclientauth(true) fixed fixed fixed + wantclientauth(false) overriding netclientauth(true) fixed fixed + wantclientauth(false) overriding netclientauth(true) Fixed wantClientAuth(false) overriding netClientAuth(true) jetty-6.0.0betaX - + see http://jetty.mortbay.org/jetty6 for 6.0 releases See + + see http://jetty.mortbay.org/jetty6 for 6.0 releases see see see + http://jetty.mortbay.org/jetty6 for 6.0 releases see see + http://jetty.mortbay.org/jetty6 for 6.0 releases See http://jetty.mortbay.org/jetty6 for 6.0 releases jetty-5.1.8 - 07 December 2005 - + fixed space in url issued created in 5.1.6 Fixed space in URL issued created - in 5.1.6 + + fixed space in url issued created in 5.1.6 fixed space in url issued c fixed + space in url issued created in 5.1.6 fixed space in url issued c fixed space + in url issued created in 5.1.6 Fixed space in URL issued created in 5.1.6 jetty-5.1.7 - 07 December 2005 jetty-5.1.7rc0 - 06 December 2005 - + better support for uri character encodings better support for URI character + + better support for uri character encodings better support for uri char + better support for uri character encodings better support for uri char + better support for uri character encodings better support for URI character encodings - + char encoding for multipartrequest char encoding for MultiPartRequest - + fixed merging of post params in dispatch query string. fixed merging of POST + + char encoding for multipartrequest char encoding for multipartrequest char + encoding for multipartrequest char encoding for multipartrequest char + encoding for multipartrequest char encoding for MultiPartRequest + + fixed merging of post params in dispatch query string. fixed merging o fixed + merging of post params in dispatch query string. fixed merging o fixed + merging of post params in dispatch query string. fixed merging of POST params in dispatch query string. - + improved server stats improved server stats - + jsp file servlet mappings copy jspservlet init params. JSP file servlet - mappings copy JspServlet init params. - + prefix servlet context logs with org.mortbay.jetty.context Prefix servlet + + improved server stats improved server stats improved server stats impr + improved server stats improved server stats improved server stats improved + server stats + + jsp file servlet mappings copy jspservlet init params. jsp file servle jsp + file servlet mappings copy jspservlet init params. jsp file servle jsp file + servlet mappings copy jspservlet init params. JSP file servlet mappings copy + JspServlet init params. + + prefix servlet context logs with org.mortbay.jetty.context prefix serv + prefix servlet context logs with org.mortbay.jetty.context prefix serv + prefix servlet context logs with org.mortbay.jetty.context Prefix servlet context logs with org.mortbay.jetty.context - + protect from npe in dispatcher getvalues protect from NPE in dispatcher + + protect from npe in dispatcher getvalues protect from npe in dispatche + protect from npe in dispatcher getvalues protect from npe in dispatche + protect from npe in dispatcher getvalues protect from NPE in dispatcher getValues - + updated to 2.6.2 xerces Updated to 2.6.2 xerces - + use commons logging jar instead of api jar. use commons logging jar instead - of api jar. + + updated to 2.6.2 xerces updated to 2.6.2 xerces updated to 2.6.2 xerce + updated to 2.6.2 xerces updated to 2.6.2 xerces updated to 2.6.2 xerces + Updated to 2.6.2 xerces + + use commons logging jar instead of api jar. use commons logging jar in use + commons logging jar instead of api jar. use commons logging jar in use + commons logging jar instead of api jar. use commons logging jar instead of + api jar. jetty-5.1.6 - 18 November 2005 - + cve-2006-2758 fixed jsp visibility security issue. CVE-2006-2758 Fixed JSP + + cve-2006-2758 fixed jsp visibility security issue. cve-2006-2758 fixed + cve-2006-2758 fixed jsp visibility security issue. cve-2006-2758 fixed + cve-2006-2758 fixed jsp visibility security issue. CVE-2006-2758 Fixed JSP visibility security issue. - + improved jetty-web.xml access to org.mortbay classes. Improved jetty-web.xml + + improved jetty-web.xml access to org.mortbay classes. improved jetty-w + improved jetty-web.xml access to org.mortbay classes. improved jetty-w + improved jetty-web.xml access to org.mortbay classes. Improved jetty-web.xml access to org.mortbay classes. jetty-5.1.5 - 10 November 2005 - + improved mapping of jsp files. Improved mapping of JSP files. - + improved shutdown hook Improved shutdown hook - + improved url decoding Improved URL Decoding + + improved mapping of jsp files. improved mapping of jsp files. improved + improved mapping of jsp files. improved mapping of jsp files. improved + mapping of jsp files. Improved mapping of JSP files. + + improved shutdown hook improved shutdown hook improved shutdown hook + improved shutdown hook improved shutdown hook improved shutdown hook + Improved shutdown hook + + improved url decoding improved url decoding improved url decoding impr + improved url decoding improved url decoding improved url decoding Improved + URL Decoding jetty-5.1.5rc2 - 07 October 2005 - + proxyhandler can handle chained proxies ProxyHandler can handle chained + + proxyhandler can handle chained proxies proxyhandler can handle chaine + proxyhandler can handle chained proxies proxyhandler can handle chaine + proxyhandler can handle chained proxies ProxyHandler can handle chained proxies - + public servermbean constructor public ServerMBean constructor - + refixed merge of dispatcher params ReFixed merge of Dispatcher params + + public servermbean constructor public servermbean constructor public public + servermbean constructor public servermbean constructor public servermbean + constructor public ServerMBean constructor + + refixed merge of dispatcher params refixed merge of dispatcher params + refixed merge of dispatcher params refixed merge of dispatcher params + refixed merge of dispatcher params ReFixed merge of Dispatcher params + response.setlocale will set locale even if getwriter called. + response.setlocale will set locale even if getwriter called. + response.setlocale will set locale even if getwriter called. Response.setLocale will set locale even if getWriter called. - + reverted dispatcher params to ri rather than spec behaviour. Reverted + + reverted dispatcher params to ri rather than spec behaviour. reverted + reverted dispatcher params to ri rather than spec behaviour. reverted + reverted dispatcher params to ri rather than spec behaviour. Reverted dispatcher params to RI rather than spec behaviour. - + unsynchronized contextloader unsynchronized ContextLoader - + utf-8 encoding for urls UTF-8 encoding for URLs + + unsynchronized contextloader unsynchronized contextloader unsynchroniz + unsynchronized contextloader unsynchronized contextloader unsynchronized + contextloader unsynchronized ContextLoader + + utf-8 encoding for urls utf-8 encoding for urls utf-8 encoding for url utf-8 + encoding for urls utf-8 encoding for urls utf-8 encoding for urls UTF-8 + encoding for URLs jetty-5.1.5rc1 - 23 August 2005 - + encoded full path in resourcehandler directory listing Encoded full path in + + encoded full path in resourcehandler directory listing encoded full pa + encoded full path in resourcehandler directory listing encoded full pa + encoded full path in resourcehandler directory listing Encoded full path in ResourceHandler directory listing - + fixed 100-continues with chunking and early commit Fixed 100-continues with + + fixed 100-continues with chunking and early commit fixed 100-continues fixed + 100-continues with chunking and early commit fixed 100-continues fixed + 100-continues with chunking and early commit Fixed 100-continues with chunking and early commit - + fixed illegal state with chunks and 100 continue - tony seebregts Fixed - illegal state with chunks and 100 continue - Tony Seebregts - + fixed merge of dispatcher parameters Fixed merge of Dispatcher parameters - + fixed pkcs12import input string method Fixed PKCS12Import input string - method - + handle extra params after charset in header handle extra params after - charset in header - + release commons logging factories when stopping context. Release commons + + fixed illegal state with chunks and 100 continue - tony seebregts fixe fixed + illegal state with chunks and 100 continue - tony seebregts fixe fixed + illegal state with chunks and 100 continue - tony seebregts Fixed illegal + state with chunks and 100 continue - Tony Seebregts + + fixed merge of dispatcher parameters fixed merge of dispatcher paramet fixed + merge of dispatcher parameters fixed merge of dispatcher paramet fixed merge + of dispatcher parameters Fixed merge of Dispatcher parameters + + fixed pkcs12import input string method fixed pkcs12import input string fixed + pkcs12import input string method fixed pkcs12import input string fixed + pkcs12import input string method Fixed PKCS12Import input string method + + handle extra params after charset in header handle extra params after + handle extra params after charset in header handle extra params after handle + extra params after charset in header handle extra params after charset in + header + + release commons logging factories when stopping context. release commo + release commons logging factories when stopping context. release commo + release commons logging factories when stopping context. Release commons logging factories when stopping context. - + upgraded to commons logging 1.0.4 upgraded to commons logging 1.0.4 + + upgraded to commons logging 1.0.4 upgraded to commons logging 1.0.4 up + upgraded to commons logging 1.0.4 upgraded to commons logging 1.0.4 upgraded + to commons logging 1.0.4 upgraded to commons logging 1.0.4 jetty-5.1.5rc0 - 16 August 2005 - + applied ciphersuite patch from tonyj Applied ciphersuite patch from tonyj - + authenticators use servlet senderror Authenticators use servlet sendError - + cgi sets script_filename CGI sets SCRIPT_FILENAME - + expect continues only sent if input is read. Expect continues only sent if + + applied ciphersuite patch from tonyj applied ciphersuite patch from to + applied ciphersuite patch from tonyj applied ciphersuite patch from to + applied ciphersuite patch from tonyj Applied ciphersuite patch from tonyj + + authenticators use servlet senderror authenticators use servlet sender + authenticators use servlet senderror authenticators use servlet sender + authenticators use servlet senderror Authenticators use servlet sendError + + cgi sets script_filename cgi sets script_filename cgi sets script_file cgi + sets script_filename cgi sets script_filename cgi sets script_filename CGI + sets SCRIPT_FILENAME + + expect continues only sent if input is read. expect continues only sen + expect continues only sent if input is read. expect continues only sen + expect continues only sent if input is read. Expect continues only sent if input is read. - + facade over commons logfactory so that discovery may be avoided. Facade over + + facade over commons logfactory so that discovery may be avoided. facad + facade over commons logfactory so that discovery may be avoided. facad + facade over commons logfactory so that discovery may be avoided. Facade over commons LogFactory so that discovery may be avoided. - + fixed component remove memory leak for stop/start cycles Fixed component - remove memory leak for stop/start cycles - + httptunnel timeout HttpTunnel timeout - + npe protection for double stop in threadedserver NPE protection for double - stop in ThreadedServer + + fixed component remove memory leak for stop/start cycles fixed compone fixed + component remove memory leak for stop/start cycles fixed compone fixed + component remove memory leak for stop/start cycles Fixed component remove + memory leak for stop/start cycles + + httptunnel timeout httptunnel timeout httptunnel timeout httptunnel ti + httptunnel timeout httptunnel timeout httptunnel timeout HttpTunnel timeout + + npe protection for double stop in threadedserver npe protection for do npe + protection for double stop in threadedserver npe protection for do npe + protection for double stop in threadedserver NPE protection for double stop + in ThreadedServer jetty-5.1.4 - 05 June 2005 - + change jaas impl to be more flexible on finding roles Change JAAS impl to be + + change jaas impl to be more flexible on finding roles change jaas impl + change jaas impl to be more flexible on finding roles change jaas impl + change jaas impl to be more flexible on finding roles Change JAAS impl to be more flexible on finding roles - + fixed ftp close issue. Fixed FTP close issue. - + modelmbean handles null signatures ModelMBean handles null signatures - + npe protection in threadedserver NPE protection in ThreadedServer - + set classloader during webapp dostop set classloader during webapp doStop - + setup mx4j with jdk1.5 in start.config setup MX4J with JDK1.5 in - start.config + + fixed ftp close issue. fixed ftp close issue. fixed ftp close issue. f fixed + ftp close issue. fixed ftp close issue. fixed ftp close issue. Fixed FTP + close issue. + + modelmbean handles null signatures modelmbean handles null signatures + modelmbean handles null signatures modelmbean handles null signatures + modelmbean handles null signatures ModelMBean handles null signatures + + npe protection in threadedserver npe protection in threadedserver npe npe + protection in threadedserver npe protection in threadedserver npe protection + in threadedserver NPE protection in ThreadedServer + + set classloader during webapp dostop set classloader during webapp dos set + classloader during webapp dostop set classloader during webapp dos set + classloader during webapp dostop set classloader during webapp doStop + + setup mx4j with jdk1.5 in start.config setup mx4j with jdk1.5 in setup setup + mx4j with jdk1.5 in start.config setup mx4j with jdk1.5 in setup mx4j with + jdk1.5 in start.config setup MX4J with JDK1.5 in start.config jetty-5.1.4rc0 - 19 April 2005 - + allow servlethandler in normal httpcontext again. Allow ServletHandler in - normal HttpContext again. - + httpserver delegates component handling to container. HttpServer delegates + + allow servlethandler in normal httpcontext again. allow servlethandler allow + servlethandler in normal httpcontext again. allow servlethandler allow + servlethandler in normal httpcontext again. Allow ServletHandler in normal + HttpContext again. + + httpserver delegates component handling to container. httpserver deleg + httpserver delegates component handling to container. httpserver deleg + httpserver delegates component handling to container. HttpServer delegates component handling to Container. - + more protection from null classloaders. More protection from null - classloaders. - + servlethttpcontext correctly calls super.dostop. ServletHttpContext + + more protection from null classloaders. more protection from null more more + protection from null classloaders. more protection from null more protection + from null classloaders. More protection from null classloaders. + + servlethttpcontext correctly calls super.dostop. servlethttpcontext + servlethttpcontext correctly calls super.dostop. servlethttpcontext + servlethttpcontext correctly calls super.dostop. ServletHttpContext correctly calls super.doStop. - + stop start.jar putting current directory on classpath. Stop start.jar - putting current directory on classpath. - + turn off web.xml validation for jboss. Turn off web.xml validation for - JBoss. + + stop start.jar putting current directory on classpath. stop start.jar stop + start.jar putting current directory on classpath. stop start.jar stop + start.jar putting current directory on classpath. Stop start.jar putting + current directory on classpath. + + turn off web.xml validation for jboss. turn off web.xml validation for turn + off web.xml validation for jboss. turn off web.xml validation for turn off + web.xml validation for jboss. Turn off web.xml validation for JBoss. jetty-5.1.3 - 07 April 2005 - + some minor code janitorial services Some minor code janitorial services + + some minor code janitorial services some minor code janitorial service some + minor code janitorial services some minor code janitorial service some minor + code janitorial services Some minor code janitorial services jetty-4.2.24 - 07 April 2005 jetty-5.1.3rc4 - 31 March 2005 - + allow xmlconfiguration to start with no object. Allow XmlConfiguration to - start with no object. - + make java:comp/env immutable for webapps as per j2ee spec make java:comp/env + + allow xmlconfiguration to start with no object. allow xmlconfiguration allow + xmlconfiguration to start with no object. allow xmlconfiguration allow + xmlconfiguration to start with no object. Allow XmlConfiguration to start + with no object. + + make java:comp/env immutable for webapps as per j2ee spec make java:co make + java:comp/env immutable for webapps as per j2ee spec make java:co make + java:comp/env immutable for webapps as per j2ee spec make java:comp/env immutable for webapps as per J2EE spec - + moved servlet request wrapping to entercontextscope for geronimo secur Moved + + moved servlet request wrapping to entercontextscope for geronimo secur moved + servlet request wrapping to entercontextscope for geronimo secur moved + servlet request wrapping to entercontextscope for geronimo secur Moved servlet request wrapping to enterContextScope for geronimo security - + refixed / mapping for filters refixed / mapping for filters - + rework initialcontextfactory to use static 'default' namespace rework + + refixed / mapping for filters refixed / mapping for filters refixed / + refixed / mapping for filters refixed / mapping for filters refixed / + mapping for filters refixed / mapping for filters + + rework initialcontextfactory to use static 'default' namespace rework + rework initialcontextfactory to use static 'default' namespace rework rework + initialcontextfactory to use static 'default' namespace rework InitialContextFactory to use static 'default' namespace - + updated to mx4j 3.0.1 updated to mx4j 3.0.1 + + updated to mx4j 3.0.1 updated to mx4j 3.0.1 updated to mx4j 3.0.1 upda + updated to mx4j 3.0.1 updated to mx4j 3.0.1 updated to mx4j 3.0.1 updated to + mx4j 3.0.1 jetty-5.1.3rc3 - 20 March 2005 - + fixed "no getter or setter found" mbean errors fixed "No getter or setter - found" mbean errors - + removed accidental enablement of debug for jettyplus jndi in removed - accidental enablement of DEBUG for JettyPlus jndi in log4j.properties + + fixed "no getter or setter found" mbean errors fixed "no getter or set fixed + "no getter or setter found" mbean errors fixed "no getter or set fixed "no + getter or setter found" mbean errors fixed "No getter or setter found" mbean + errors + + removed accidental enablement of debug for jettyplus jndi in removed r + removed accidental enablement of debug for jettyplus jndi in removed removed + accidental enablement of debug for jettyplus jndi in removed accidental + enablement of DEBUG for JettyPlus jndi in log4j.properties jetty-5.1.3rc2 - 16 March 2005 - + fixed context to _context refactory error Fixed context to _context - refactory error - + updated jsr154filter for error dispatch Updated JSR154Filter for ERROR + + fixed context to _context refactory error fixed context to _context fi fixed + context to _context refactory error fixed context to _context fixed context + to _context refactory error Fixed context to _context refactory error + + updated jsr154filter for error dispatch updated jsr154filter for error + updated jsr154filter for error dispatch updated jsr154filter for error + updated jsr154filter for error dispatch Updated JSR154Filter for ERROR dispatch jetty-5.1.3rc1 - 13 March 2005 - + fixed principal naming in formauthenticator Fixed principal naming in + + fixed principal naming in formauthenticator fixed principal naming in fixed + principal naming in formauthenticator fixed principal naming in fixed + principal naming in formauthenticator Fixed principal naming in FormAuthenticator - + fixed typo in context-param handling. Fixed typo in context-param handling. - + jettyplus updated to jotm 2.0.5, xapool 1.4.2 JettyPlus updated to JOTM + + fixed typo in context-param handling. fixed typo in context-param hand fixed + typo in context-param handling. fixed typo in context-param hand fixed typo + in context-param handling. Fixed typo in context-param handling. + + jettyplus updated to jotm 2.0.5, xapool 1.4.2 jettyplus updated to jot + jettyplus updated to jotm 2.0.5, xapool 1.4.2 jettyplus updated to jot + jettyplus updated to jotm 2.0.5, xapool 1.4.2 JettyPlus updated to JOTM 2.0.5, XAPool 1.4.2 - + update to demo site look and feel. update to demo site look and feel. + + update to demo site look and feel. update to demo site look and feel. + update to demo site look and feel. update to demo site look and feel. update + to demo site look and feel. update to demo site look and feel. jetty-4.2.24rc1 - + fixed principal naming in formauthenticator Fixed principal naming in + + fixed principal naming in formauthenticator fixed principal naming in fixed + principal naming in formauthenticator fixed principal naming in fixed + principal naming in formauthenticator Fixed principal naming in FormAuthenticator jetty-5.1.3rc0 - 08 March 2005 - + added logcookie and loglatency support to ncsarequestlog Added logCookie and + + added logcookie and loglatency support to ncsarequestlog added logcook added + logcookie and loglatency support to ncsarequestlog added logcook added + logcookie and loglatency support to ncsarequestlog Added logCookie and logLatency support to NCSARequestLog - + added new jaas callback to allow extra login form fields in authentica Added - new JAAS callback to allow extra login form fields in authentication - + added simple xpath support to xmlparser Added simple xpath support to - XmlParser - + added ssllistener for 1.4 jsse api. Added SslListener for 1.4 JSSE API. - + added taglibconfiguration to search for listeners in tlds. Added + + added new jaas callback to allow extra login form fields in authentica added + new jaas callback to allow extra login form fields in authentica added new + jaas callback to allow extra login form fields in authentica Added new JAAS + callback to allow extra login form fields in authentication + + added simple xpath support to xmlparser added simple xpath support to added + simple xpath support to xmlparser added simple xpath support to added simple + xpath support to xmlparser Added simple xpath support to XmlParser + + added ssllistener for 1.4 jsse api. added ssllistener for 1.4 jsse api added + ssllistener for 1.4 jsse api. added ssllistener for 1.4 jsse api added + ssllistener for 1.4 jsse api. Added SslListener for 1.4 JSSE API. + + added taglibconfiguration to search for listeners in tlds. added added added + taglibconfiguration to search for listeners in tlds. added added + taglibconfiguration to search for listeners in tlds. Added TagLibConfiguration to search for listeners in TLDs. - + allow system and server classes to be configured for context loader. Allow - system and server classes to be configured for context loader. - + fixed htaccess crypt salt handling. Fixed HTAccess crypt salt handling. - + fixed jsr154 error dispatch with explicit pass of type. Fixed JSR154 error + + allow system and server classes to be configured for context loader. a allow + system and server classes to be configured for context loader. a allow + system and server classes to be configured for context loader. Allow system + and server classes to be configured for context loader. + + fixed htaccess crypt salt handling. fixed htaccess crypt salt handling fixed + htaccess crypt salt handling. fixed htaccess crypt salt handling fixed + htaccess crypt salt handling. Fixed HTAccess crypt salt handling. + + fixed jsr154 error dispatch with explicit pass of type. fixed jsr154 e fixed + jsr154 error dispatch with explicit pass of type. fixed jsr154 e fixed + jsr154 error dispatch with explicit pass of type. Fixed JSR154 error dispatch with explicit pass of type. - + fixed moderate load preventing threadpool shrinking. Fixed moderate load + + fixed moderate load preventing threadpool shrinking. fixed moderate lo fixed + moderate load preventing threadpool shrinking. fixed moderate lo fixed + moderate load preventing threadpool shrinking. Fixed moderate load preventing ThreadPool shrinking. - + fixed rollover filename format bug Fixed rollover filename format bug - + flush filter chain caches on servlet/filter change Flush filter chain caches - on servlet/filter change - + ioexception if eof read during chunk. IOException if EOF read during chunk. + + fixed rollover filename format bug fixed rollover filename format bug fixed + rollover filename format bug fixed rollover filename format bug fixed + rollover filename format bug Fixed rollover filename format bug + + flush filter chain caches on servlet/filter change flush filter chain flush + filter chain caches on servlet/filter change flush filter chain flush + filter chain caches on servlet/filter change Flush filter chain caches on + servlet/filter change + + ioexception if eof read during chunk. ioexception if eof read during c + ioexception if eof read during chunk. ioexception if eof read during c + ioexception if eof read during chunk. IOException if EOF read during chunk. jetty-4.2.24rc0 - 08 March 2005 - + added logcookie and loglatency support to ncsarequestlog Added logCookie and + + added logcookie and loglatency support to ncsarequestlog added logcook added + logcookie and loglatency support to ncsarequestlog added logcook added + logcookie and loglatency support to ncsarequestlog Added logCookie and logLatency support to NCSARequestLog - + back ported jetty 5 threadedserver and threadpool Back ported Jetty 5 - ThreadedServer and ThreadPool + + back ported jetty 5 threadedserver and threadpool back ported jetty 5 back + ported jetty 5 threadedserver and threadpool back ported jetty 5 back ported + jetty 5 threadedserver and threadpool Back ported Jetty 5 ThreadedServer and + ThreadPool jetty-5.1.2 - 18 January 2005 - + added id and ref support to xmlconfiguration Added id and ref support to + + added id and ref support to xmlconfiguration added id and ref support added + id and ref support to xmlconfiguration added id and ref support added id + and ref support to xmlconfiguration Added id and ref support to XmlConfiguration + 1103953 Apply patch #1103953 - + cleaned up abstractsessionmanager synchronization. Cleaned up - AbstractSessionManager synchronization. - + fixed potential concurrent login problem with jaas Fixed potential - concurrent login problem with JAAS + + cleaned up abstractsessionmanager synchronization. cleaned up cleaned + cleaned up abstractsessionmanager synchronization. cleaned up cleaned up + abstractsessionmanager synchronization. Cleaned up AbstractSessionManager + synchronization. + + fixed potential concurrent login problem with jaas fixed potential fix fixed + potential concurrent login problem with jaas fixed potential fixed potential + concurrent login problem with jaas Fixed potential concurrent login problem + with JAAS jetty-4.2.23 - 16 January 2005 - + cleaned up abstractsessionmanager synchronization. Cleaned up - AbstractSessionManager synchronization. - + fixed potential concurrent login problem with jaas Fixed potential - concurrent login problem with JAAS + + cleaned up abstractsessionmanager synchronization. cleaned up cleaned + cleaned up abstractsessionmanager synchronization. cleaned up cleaned up + abstractsessionmanager synchronization. Cleaned up AbstractSessionManager + synchronization. + + fixed potential concurrent login problem with jaas fixed potential fix fixed + potential concurrent login problem with jaas fixed potential fixed potential + concurrent login problem with jaas Fixed potential concurrent login problem + with JAAS jetty-5.1.2pre0 - 22 December 2004 - + added global invalidation to abstractsessionmanager Added global - invalidation to AbstractSessionManager - + fixed case of cookie parameters Fixed case of Cookie parameters - + fixed suffix filters Fixed suffix filters + + added global invalidation to abstractsessionmanager added global added added + global invalidation to abstractsessionmanager added global added global + invalidation to abstractsessionmanager Added global invalidation to + AbstractSessionManager + + fixed case of cookie parameters fixed case of cookie parameters fixed fixed + case of cookie parameters fixed case of cookie parameters fixed case of + cookie parameters Fixed case of Cookie parameters + + fixed suffix filters fixed suffix filters fixed suffix filters fixed s fixed + suffix filters fixed suffix filters fixed suffix filters Fixed suffix + filters + modified userequestedid handling to only use ids from other contexts + modified userequestedid handling to only use ids from other contexts + modified userequestedid handling to only use ids from other contexts Modified useRequestedID handling to only use IDs from other contexts - + support secure and httponly in session cookies Support Secure and HttpOnly + + support secure and httponly in session cookies support secure and http + support secure and httponly in session cookies support secure and http + support secure and httponly in session cookies Support Secure and HttpOnly in session cookies - + unavailableexception handling from handle UnavailableException handling from + + unavailableexception handling from handle unavailableexception handlin + unavailableexception handling from handle unavailableexception handlin + unavailableexception handling from handle UnavailableException handling from handle jetty-4.2.23RC0 - 17 December 2004 - + added logstream to capture stderr and stdout to logging Added LogStream to - capture stderr and stdout to logging - + build unsealed jars Build unsealed jars - + lineinput handles readers with small internal buffer LineInput handles + + added logstream to capture stderr and stdout to logging added logstrea added + logstream to capture stderr and stdout to logging added logstrea added + logstream to capture stderr and stdout to logging Added LogStream to capture + stderr and stdout to logging + + build unsealed jars build unsealed jars build unsealed jars build unse build + unsealed jars build unsealed jars build unsealed jars Build unsealed jars + + lineinput handles readers with small internal buffer lineinput handles + lineinput handles readers with small internal buffer lineinput handles + lineinput handles readers with small internal buffer LineInput handles readers with small internal buffer - + support secure and httponly in session cookies Support Secure and HttpOnly + + support secure and httponly in session cookies support secure and http + support secure and httponly in session cookies support secure and http + support secure and httponly in session cookies Support Secure and HttpOnly in session cookies jetty-5.1.1 - 01 December 2004 jetty-5.1.1RC1 - + allow double // within uris Allow double // within URIs - + applied patch for md5 hashed credentials for md5 Applied patch for MD5 + + allow double // within uris allow double // within uris allow double / allow + double // within uris allow double // within uris allow double // within + uris Allow double // within URIs + + applied patch for md5 hashed credentials for md5 applied patch for md5 + applied patch for md5 hashed credentials for md5 applied patch for md5 + applied patch for md5 hashed credentials for md5 Applied patch for MD5 hashed credentials for MD5 - + fixed ordering of filters with multiple interleaved mappings. Fixed ordering - of filters with multiple interleaved mappings. - + made more webapplicationhandle configuration methods public. Made more + + fixed ordering of filters with multiple interleaved mappings. fixed or fixed + ordering of filters with multiple interleaved mappings. fixed or fixed + ordering of filters with multiple interleaved mappings. Fixed ordering of + filters with multiple interleaved mappings. + + made more webapplicationhandle configuration methods public. made more made + more webapplicationhandle configuration methods public. made more made more + webapplicationhandle configuration methods public. Made more WebApplicationHandle configuration methods public. - + some minor findbugs code cleanups Some minor findbugs code cleanups + + some minor findbugs code cleanups some minor findbugs code cleanups so some + minor findbugs code cleanups some minor findbugs code cleanups some minor + findbugs code cleanups Some minor findbugs code cleanups jetty-5.1.1RC0 - 17 November 2004 - + added new contributed shell start/stop script added new contributed shell - start/stop script - + excluded errorpagehandler from standard build in extra/jdk1.2 build excluded + + added new contributed shell start/stop script added new contributed sh added + new contributed shell start/stop script added new contributed sh added new + contributed shell start/stop script added new contributed shell start/stop + script + + excluded errorpagehandler from standard build in extra/jdk1.2 build ex + excluded errorpagehandler from standard build in extra/jdk1.2 build ex + excluded errorpagehandler from standard build in extra/jdk1.2 build excluded ErrorPageHandler from standard build in extra/jdk1.2 build - + fix commons logging imports to ibmjsselistener fix commons logging imports - to IbmJsseListener - + fix for adding recognized eventlisteners fix for adding recognized - EventListeners + + fix commons logging imports to ibmjsselistener fix commons logging imp fix + commons logging imports to ibmjsselistener fix commons logging imp fix + commons logging imports to ibmjsselistener fix commons logging imports to + IbmJsseListener + + fix for adding recognized eventlisteners fix for adding recognized fix fix + for adding recognized eventlisteners fix for adding recognized fix for + adding recognized eventlisteners fix for adding recognized EventListeners jetty-5.1.0 - 14 November 2004 jetty-5.1.RC1 - 24 October 2004 - + allow jsse listener to be just confidential or just integral. Allow JSSE - listener to be just confidential or just integral. - + allow multiple accepting threads Allow multiple accepting threads - + build unsealed jars Build unsealed jars - + default / mapping does not apply to filters default / mapping does not apply + + allow jsse listener to be just confidential or just integral. allow js allow + jsse listener to be just confidential or just integral. allow js allow jsse + listener to be just confidential or just integral. Allow JSSE listener to be + just confidential or just integral. + + allow multiple accepting threads allow multiple accepting threads allo allow + multiple accepting threads allow multiple accepting threads allow multiple + accepting threads Allow multiple accepting threads + + build unsealed jars build unsealed jars build unsealed jars build unse build + unsealed jars build unsealed jars build unsealed jars Build unsealed jars + + default / mapping does not apply to filters default / mapping does not + default / mapping does not apply to filters default / mapping does not + default / mapping does not apply to filters default / mapping does not apply to Filters - + fixed npe for null contenttype Fixed NPE for null contenttype - + improved clean targets improved clean targets - + many minor cleanups suggested from figbug utility many minor cleanups - suggested from figbug utility + + fixed npe for null contenttype fixed npe for null contenttype fixed np fixed + npe for null contenttype fixed npe for null contenttype fixed npe for null + contenttype Fixed NPE for null contenttype + + improved clean targets improved clean targets improved clean targets + improved clean targets improved clean targets improved clean targets + improved clean targets + + many minor cleanups suggested from figbug utility many minor cleanups many + minor cleanups suggested from figbug utility many minor cleanups many minor + cleanups suggested from figbug utility many minor cleanups suggested from + figbug utility + partially flush writers on every write so content length can be detect + partially flush writers on every write so content length can be detect + partially flush writers on every write so content length can be detect Partially flush writers on every write so content length can be detected. - + when committed setheader is a noop rather than illegalstateexception when + + when committed setheader is a noop rather than illegalstateexception w when + committed setheader is a noop rather than illegalstateexception w when + committed setheader is a noop rather than illegalstateexception when committed setHeader is a noop rather than IllegalStateException jetty-5.1.RC0 - 11 October 2004 - + added filter chain cache Added filter chain cache - + added jsr77 servlet statistic support Added JSR77 servlet statistic support - + added lifecycle events and generic container. Added LifeCycle events and - generic container. - + added logstream to capture stderr and stdout to logging Added LogStream to - capture stderr and stdout to logging - + fixed htaccesshandler Fixed HTAccessHandler - + fixed many minor issues from j2ee 1.4 tck testing see sf.net bugs 1031 Fixed - many minor issues from J2EE 1.4 TCK testing See sf.net bugs 1031520 - - 1032205 - + jboss 4.0.0 support JBoss 4.0.0 support - + lineinput handles readers with small internal buffer LineInput handles + + added filter chain cache added filter chain cache added filter chain c added + filter chain cache added filter chain cache added filter chain cache Added + filter chain cache + + added jsr77 servlet statistic support added jsr77 servlet statistic su added + jsr77 servlet statistic support added jsr77 servlet statistic su added jsr77 + servlet statistic support Added JSR77 servlet statistic support + + added lifecycle events and generic container. added lifecycle events a added + lifecycle events and generic container. added lifecycle events a added + lifecycle events and generic container. Added LifeCycle events and generic + container. + + added logstream to capture stderr and stdout to logging added logstrea added + logstream to capture stderr and stdout to logging added logstrea added + logstream to capture stderr and stdout to logging Added LogStream to capture + stderr and stdout to logging + + fixed htaccesshandler fixed htaccesshandler fixed htaccesshandler fixe fixed + htaccesshandler fixed htaccesshandler fixed htaccesshandler Fixed + HTAccessHandler + + fixed many minor issues from j2ee 1.4 tck testing see sf.net bugs 1031 fixed + many minor issues from j2ee 1.4 tck testing see sf.net bugs 1031 fixed many + minor issues from j2ee 1.4 tck testing see sf.net bugs 1031 Fixed many minor + issues from J2EE 1.4 TCK testing See sf.net bugs 1031520 - 1032205 + + jboss 4.0.0 support jboss 4.0.0 support jboss 4.0.0 support jboss 4.0. jboss + 4.0.0 support jboss 4.0.0 support jboss 4.0.0 support JBoss 4.0.0 support + + lineinput handles readers with small internal buffer lineinput handles + lineinput handles readers with small internal buffer lineinput handles + lineinput handles readers with small internal buffer LineInput handles readers with small internal buffer - + refactored, simplified and optimized httpoutputstream Refactored, simplified + + refactored, simplified and optimized httpoutputstream refactored, simp + refactored, simplified and optimized httpoutputstream refactored, simp + refactored, simplified and optimized httpoutputstream Refactored, simplified and optimized HttpOutputStream - + refactored webapp context configurations Refactored webapp context + + refactored webapp context configurations refactored webapp context + refactored webapp context configurations refactored webapp context + refactored webapp context configurations Refactored webapp context configurations - + upgraded to ant-1.6 for jasper Upgraded to ant-1.6 for jasper + + upgraded to ant-1.6 for jasper upgraded to ant-1.6 for jasper upgraded + upgraded to ant-1.6 for jasper upgraded to ant-1.6 for jasper upgraded to + ant-1.6 for jasper Upgraded to ant-1.6 for jasper jetty-5.0.0 - 10 September 2004 jetty-5.0.RC4 - 05 September 2004 - + fixed configuration of url alias checking Fixed configuration of URL alias + + fixed configuration of url alias checking fixed configuration of url a fixed + configuration of url alias checking fixed configuration of url a fixed + configuration of url alias checking Fixed configuration of URL alias checking + jettyjboss: use realm-name from web.xml if present, otherwise use + jettyjboss: use realm-name from web.xml if present, otherwise use + jettyjboss: use realm-name from web.xml if present, otherwise use JettyJBoss: Use realm-name from web.xml if present, otherwise use security-domain from jboss-web.xml jetty-5.0.RC3 - 28 August 2004 - + added parameters for acceptqueuesize and lowresources level. Added - parameters for acceptQueueSize and lowResources level. - + always say close for http/1.0 non keep alive. Always say close for HTTP/1.0 + + added parameters for acceptqueuesize and lowresources level. added add added + parameters for acceptqueuesize and lowresources level. added added + parameters for acceptqueuesize and lowresources level. Added parameters for + acceptQueueSize and lowResources level. + + always say close for http/1.0 non keep alive. always say close for htt + always say close for http/1.0 non keep alive. always say close for htt + always say close for http/1.0 non keep alive. Always say close for HTTP/1.0 non keep alive. - + changed default uri encoding to utf-8 Changed default URI encoding to UTF-8 - + digest auth handles qop, stale and maxnonceage. DIGEST auth handles qop, + + changed default uri encoding to utf-8 changed default uri encoding to + changed default uri encoding to utf-8 changed default uri encoding to + changed default uri encoding to utf-8 Changed default URI encoding to UTF-8 + + digest auth handles qop, stale and maxnonceage. digest auth handles qo + digest auth handles qop, stale and maxnonceage. digest auth handles qo + digest auth handles qop, stale and maxnonceage. DIGEST auth handles qop, stale and maxNonceAge. - + fixed deployment of ejb-link elements in web.xml with jboss fixed deployment - of ejb-link elements in web.xml with jboss - + fixed jaas logout for jetty-jboss fixed jaas logout for jetty-jboss - + fixes to work with java 1.5 Fixes to work with java 1.5 - + jettyplus addition of pluggable datasources JettyPlus addition of pluggable + + fixed deployment of ejb-link elements in web.xml with jboss fixed depl fixed + deployment of ejb-link elements in web.xml with jboss fixed depl fixed + deployment of ejb-link elements in web.xml with jboss fixed deployment of + ejb-link elements in web.xml with jboss + + fixed jaas logout for jetty-jboss fixed jaas logout for jetty-jboss fi fixed + jaas logout for jetty-jboss fixed jaas logout for jetty-jboss fixed jaas + logout for jetty-jboss fixed jaas logout for jetty-jboss + + fixes to work with java 1.5 fixes to work with java 1.5 fixes to work fixes + to work with java 1.5 fixes to work with java 1.5 fixes to work with java + 1.5 Fixes to work with java 1.5 + + jettyplus addition of pluggable datasources jettyplus addition of plug + jettyplus addition of pluggable datasources jettyplus addition of plug + jettyplus addition of pluggable datasources JettyPlus addition of pluggable DataSources - + jettyplus upgrade to xapool 1.3.3. and hsqldb 1.7.2 JettyPlus upgrade to + + jettyplus upgrade to xapool 1.3.3. and hsqldb 1.7.2 jettyplus upgrade + jettyplus upgrade to xapool 1.3.3. and hsqldb 1.7.2 jettyplus upgrade + jettyplus upgrade to xapool 1.3.3. and hsqldb 1.7.2 JettyPlus upgrade to XAPool 1.3.3. and HSQLDB 1.7.2 - + less verbose warning for non validating xml parser. Less verbose warning for - non validating xml parser. - + update to jasper 5.0.27 Update to jasper 5.0.27 + + less verbose warning for non validating xml parser. less verbose warni less + verbose warning for non validating xml parser. less verbose warni less + verbose warning for non validating xml parser. Less verbose warning for non + validating xml parser. + + update to jasper 5.0.27 update to jasper 5.0.27 update to jasper 5.0.2 + update to jasper 5.0.27 update to jasper 5.0.27 update to jasper 5.0.27 + Update to jasper 5.0.27 jetty-4.2.22 - + added parameters for acceptqueuesize and lowresources level. Added - parameters for acceptQueueSize and lowResources level. - + fixed deployment of ejb-link elements in web.xml for jboss fixed deployment - of ejb-link elements in web.xml for jboss - + fixed jaas logout for jetty-jboss integration fixed jaas logout for - jetty-jboss integration + + added parameters for acceptqueuesize and lowresources level. added add added + parameters for acceptqueuesize and lowresources level. added added + parameters for acceptqueuesize and lowresources level. Added parameters for + acceptQueueSize and lowResources level. + + fixed deployment of ejb-link elements in web.xml for jboss fixed deplo fixed + deployment of ejb-link elements in web.xml for jboss fixed deplo fixed + deployment of ejb-link elements in web.xml for jboss fixed deployment of + ejb-link elements in web.xml for jboss + + fixed jaas logout for jetty-jboss integration fixed jaas logout for fi fixed + jaas logout for jetty-jboss integration fixed jaas logout for fixed jaas + logout for jetty-jboss integration fixed jaas logout for jetty-jboss + integration jetty-5.0.RC2 - 02 July 2004 - + add jmx support for jettyplus add JMX support for JettyPlus - + add listing of java:comp/env for webapp with jmx add listing of - java:comp/env for webapp with JMX - + default servlet may use only pathinfo for resource Default servlet may use + + add jmx support for jettyplus add jmx support for jettyplus add jmx su add + jmx support for jettyplus add jmx support for jettyplus add jmx support for + jettyplus add JMX support for JettyPlus + + add listing of java:comp/env for webapp with jmx add listing of add li add + listing of java:comp/env for webapp with jmx add listing of add listing of + java:comp/env for webapp with jmx add listing of java:comp/env for webapp + with JMX + + default servlet may use only pathinfo for resource default servlet may + default servlet may use only pathinfo for resource default servlet may + default servlet may use only pathinfo for resource Default servlet may use only pathInfo for resource - + error dispatchers are always get requests. Error dispatchers are always GET + + error dispatchers are always get requests. error dispatchers are alway error + dispatchers are always get requests. error dispatchers are alway error + dispatchers are always get requests. Error dispatchers are always GET requests. - + fixed digest challenge delimiters Fixed DIGEST challenge delimiters - + fixed jaas logout Fixed JAAS logout - + fixed no-role security constraint combination. Fixed no-role security - constraint combination. - + fixed session leak in j2ee Fixed session leak in j2ee - + fix to use runas roles during servlet init and destroy Fix to use runas - roles during servlet init and destroy - + htaccess calls unixcrypt correctly HTAccess calls UnixCrypt correctly - + httpcontext senderror for authentication errors HttpContext sendError for + + fixed digest challenge delimiters fixed digest challenge delimiters fi fixed + digest challenge delimiters fixed digest challenge delimiters fixed digest + challenge delimiters Fixed DIGEST challenge delimiters + + fixed jaas logout fixed jaas logout fixed jaas logout fixed jaas logou fixed + jaas logout fixed jaas logout fixed jaas logout Fixed JAAS logout + + fixed no-role security constraint combination. fixed no-role security fixed + no-role security constraint combination. fixed no-role security fixed + no-role security constraint combination. Fixed no-role security constraint + combination. + + fixed session leak in j2ee fixed session leak in j2ee fixed session le fixed + session leak in j2ee fixed session leak in j2ee fixed session leak in j2ee + Fixed session leak in j2ee + + fix to use runas roles during servlet init and destroy fix to use runa fix + to use runas roles during servlet init and destroy fix to use runa fix to + use runas roles during servlet init and destroy Fix to use runas roles + during servlet init and destroy + + htaccess calls unixcrypt correctly htaccess calls unixcrypt correctly + htaccess calls unixcrypt correctly htaccess calls unixcrypt correctly + htaccess calls unixcrypt correctly HTAccess calls UnixCrypt correctly + + httpcontext senderror for authentication errors httpcontext senderror + httpcontext senderror for authentication errors httpcontext senderror + httpcontext senderror for authentication errors HttpContext sendError for authentication errors + integrated jetty-jboss with jboss-3.2.4 integrated jetty-jboss with + integrated jetty-jboss with jboss-3.2.4 integrated jetty-jboss with + integrated jetty-jboss with jboss-3.2.4 integrated jetty-jboss with jboss-3.2.4 - + make choice of override of jndi enc entries: config.xml or web.xml make - choice of override of JNDI ENC entries: config.xml or web.xml - + options works for all urls on default servlet OPTIONS works for all URLs on + + make choice of override of jndi enc entries: config.xml or web.xml mak make + choice of override of jndi enc entries: config.xml or web.xml mak make + choice of override of jndi enc entries: config.xml or web.xml make choice of + override of JNDI ENC entries: config.xml or web.xml + + options works for all urls on default servlet options works for all ur + options works for all urls on default servlet options works for all ur + options works for all urls on default servlet OPTIONS works for all URLs on default servlet jetty-4.2.21 - 02 July 2004 - + add jmx support for jettyplus add JMX support for JettyPlus - + add listing of java:comp/env for webapp with jmx add listing of - java:comp/env for webapp with JMX - + fixed jaas logout Fixed JAAS logout + + add jmx support for jettyplus add jmx support for jettyplus add jmx su add + jmx support for jettyplus add jmx support for jettyplus add jmx support for + jettyplus add JMX support for JettyPlus + + add listing of java:comp/env for webapp with jmx add listing of add li add + listing of java:comp/env for webapp with jmx add listing of add listing of + java:comp/env for webapp with jmx add listing of java:comp/env for webapp + with JMX + + fixed jaas logout fixed jaas logout fixed jaas logout fixed jaas logou fixed + jaas logout fixed jaas logout fixed jaas logout Fixed JAAS logout + integrated jetty-jboss with jboss-3.2.4 integrated jetty-jboss with + integrated jetty-jboss with jboss-3.2.4 integrated jetty-jboss with + integrated jetty-jboss with jboss-3.2.4 integrated jetty-jboss with jboss-3.2.4 - + make choice of override of jndi enc entries: config.xml or web.xml make - choice of override of JNDI ENC entries: config.xml or web.xml + + make choice of override of jndi enc entries: config.xml or web.xml mak make + choice of override of jndi enc entries: config.xml or web.xml mak make + choice of override of jndi enc entries: config.xml or web.xml make choice of + override of JNDI ENC entries: config.xml or web.xml jetty-5.0.RC1 - 24 May 2004 - + added extra/etc/start-plus.config to set up main.class for jettyplus added + + added extra/etc/start-plus.config to set up main.class for jettyplus a added + extra/etc/start-plus.config to set up main.class for jettyplus a added + extra/etc/start-plus.config to set up main.class for jettyplus added extra/etc/start-plus.config to set up main.class for jettyplus - + changed to apache 2.0 license Changed to apache 2.0 license - + fixed http tunnel timeout setting. Fixed HTTP tunnel timeout setting. - + form auth redirects to context on a re-auth FORM auth redirects to context - on a re-auth - + handle multiple virutal hosts from jboss 3.2.4rc2 Handle multiple virutal + + changed to apache 2.0 license changed to apache 2.0 license changed to + changed to apache 2.0 license changed to apache 2.0 license changed to + apache 2.0 license Changed to apache 2.0 license + + fixed http tunnel timeout setting. fixed http tunnel timeout setting. fixed + http tunnel timeout setting. fixed http tunnel timeout setting. fixed http + tunnel timeout setting. Fixed HTTP tunnel timeout setting. + + form auth redirects to context on a re-auth form auth redirects to con form + auth redirects to context on a re-auth form auth redirects to con form auth + redirects to context on a re-auth FORM auth redirects to context on a + re-auth + + handle multiple virutal hosts from jboss 3.2.4rc2 handle multiple viru + handle multiple virutal hosts from jboss 3.2.4rc2 handle multiple viru + handle multiple virutal hosts from jboss 3.2.4rc2 Handle multiple virutal hosts from JBoss 3.2.4RC2 - + improved handling of exception from servlet init. Improved handling of + + improved handling of exception from servlet init. improved handling of + improved handling of exception from servlet init. improved handling of + improved handling of exception from servlet init. Improved handling of exception from servlet init. - + maxformcontentlength may be unlimited with <0 value maxFormContentLength may + + maxformcontentlength may be unlimited with <0 value maxformcontentleng + maxformcontentlength may be unlimited with <0 value maxformcontentleng + maxformcontentlength may be unlimited with <0 value maxFormContentLength may be unlimited with <0 value jetty-4.2.20 - 22 May 2004 - + fixed http tunnel timeout setting. Fixed HTTP tunnel timeout setting. - + form auth redirects to context on a re-auth FORM auth redirects to context - on a re-auth - + improved handling of exception from servlet init. Improved handling of + + fixed http tunnel timeout setting. fixed http tunnel timeout setting. fixed + http tunnel timeout setting. fixed http tunnel timeout setting. fixed http + tunnel timeout setting. Fixed HTTP tunnel timeout setting. + + form auth redirects to context on a re-auth form auth redirects to con form + auth redirects to context on a re-auth form auth redirects to con form auth + redirects to context on a re-auth FORM auth redirects to context on a + re-auth + + improved handling of exception from servlet init. improved handling of + improved handling of exception from servlet init. improved handling of + improved handling of exception from servlet init. Improved handling of exception from servlet init. - + maxformcontentlength may be unlimited with <0 value maxFormContentLength may + + maxformcontentlength may be unlimited with <0 value maxformcontentleng + maxformcontentlength may be unlimited with <0 value maxformcontentleng + maxformcontentlength may be unlimited with <0 value maxFormContentLength may be unlimited with <0 value jetty-5.0.0RC0 - 07 April 2004 - + changed dist naming convention to lowercase Changed dist naming convention + + changed dist naming convention to lowercase changed dist naming conven + changed dist naming convention to lowercase changed dist naming conven + changed dist naming convention to lowercase Changed dist naming convention to lowercase - + default servlet respectes servlet path Default servlet respectes servlet + + default servlet respectes servlet path default servlet respectes servl + default servlet respectes servlet path default servlet respectes servl + default servlet respectes servlet path Default servlet respectes servlet path - + factored out xml based config from webapplicationcontext Factored out XML + + factored out xml based config from webapplicationcontext factored out + factored out xml based config from webapplicationcontext factored out + factored out xml based config from webapplicationcontext Factored out XML based config from WebApplicationContext - + fixed default servlet for non empty servlet paths Fixed Default servlet for - non empty servlet paths - + fixed dos problem Fixed DOS problem - + fixed j2se 1.3 problem with httpfields Fixed j2se 1.3 problem with - HttpFields - + fixed setcharacterencoding for parameters. Fixed setCharacterEncoding for + + fixed default servlet for non empty servlet paths fixed default servle fixed + default servlet for non empty servlet paths fixed default servle fixed + default servlet for non empty servlet paths Fixed Default servlet for non + empty servlet paths + + fixed dos problem fixed dos problem fixed dos problem fixed dos proble fixed + dos problem fixed dos problem fixed dos problem Fixed DOS problem + + fixed j2se 1.3 problem with httpfields fixed j2se 1.3 problem with fix fixed + j2se 1.3 problem with httpfields fixed j2se 1.3 problem with fixed j2se 1.3 + problem with httpfields Fixed j2se 1.3 problem with HttpFields + + fixed setcharacterencoding for parameters. fixed setcharacterencoding fixed + setcharacterencoding for parameters. fixed setcharacterencoding fixed + setcharacterencoding for parameters. Fixed setCharacterEncoding for parameters. - + forced close of connections over stop/start Forced close of connections over + + forced close of connections over stop/start forced close of connection + forced close of connections over stop/start forced close of connection + forced close of connections over stop/start Forced close of connections over stop/start - + improved requestlog performance Improved RequestLog performance - + proxiedfor field support added to ncsarequestlog ProxiedFor field support + + improved requestlog performance improved requestlog performance improv + improved requestlog performance improved requestlog performance improved + requestlog performance Improved RequestLog performance + + proxiedfor field support added to ncsarequestlog proxiedfor field supp + proxiedfor field support added to ncsarequestlog proxiedfor field supp + proxiedfor field support added to ncsarequestlog ProxiedFor field support added to NCSARequestLog - + servletcontext attributes wrap httpcontext attributes. ServletContext + + servletcontext attributes wrap httpcontext attributes. servletcontext + servletcontext attributes wrap httpcontext attributes. servletcontext + servletcontext attributes wrap httpcontext attributes. ServletContext attributes wrap HttpContext attributes. - + updated jasper to 5.0.19 Updated jasper to 5.0.19 - + updated jettyplus to jotm 1.4.3 (carol-1.5.2, xapool-1.3.1) Updated - JettyPlus to JOTM 1.4.3 (carol-1.5.2, xapool-1.3.1) - + updated mx4j to v2 Updated mx4j to V2 - + worked around bad jboss url handler in xmlparser Worked around bad jboss URL + + updated jasper to 5.0.19 updated jasper to 5.0.19 updated jasper to 5. + updated jasper to 5.0.19 updated jasper to 5.0.19 updated jasper to 5.0.19 + Updated jasper to 5.0.19 + + updated jettyplus to jotm 1.4.3 (carol-1.5.2, xapool-1.3.1) updated up + updated jettyplus to jotm 1.4.3 (carol-1.5.2, xapool-1.3.1) updated updated + jettyplus to jotm 1.4.3 (carol-1.5.2, xapool-1.3.1) Updated JettyPlus to + JOTM 1.4.3 (carol-1.5.2, xapool-1.3.1) + + updated mx4j to v2 updated mx4j to v2 updated mx4j to v2 updated mx4j + updated mx4j to v2 updated mx4j to v2 updated mx4j to v2 Updated mx4j to V2 + + worked around bad jboss url handler in xmlparser worked around bad jbo + worked around bad jboss url handler in xmlparser worked around bad jbo + worked around bad jboss url handler in xmlparser Worked around bad jboss URL handler in XMLParser jetty-4.2.20RC0 - 07 April 2004 - + changed dist naming convention to lowercase Changed dist naming convention + + changed dist naming convention to lowercase changed dist naming conven + changed dist naming convention to lowercase changed dist naming conven + changed dist naming convention to lowercase Changed dist naming convention to lowercase - + fixed default servlet for non empty servlet paths Fixed Default servlet for - non empty servlet paths - + forced close of connections over stop/start Forced close of connections over + + fixed default servlet for non empty servlet paths fixed default servle fixed + default servlet for non empty servlet paths fixed default servle fixed + default servlet for non empty servlet paths Fixed Default servlet for non + empty servlet paths + + forced close of connections over stop/start forced close of connection + forced close of connections over stop/start forced close of connection + forced close of connections over stop/start Forced close of connections over stop/start - + httpfields protected headers HttpFields protected headers - + proxiedfor field support added to ncsarequestlog ProxiedFor field support + + httpfields protected headers httpfields protected headers httpfields + httpfields protected headers httpfields protected headers httpfields + protected headers HttpFields protected headers + + proxiedfor field support added to ncsarequestlog proxiedfor field supp + proxiedfor field support added to ncsarequestlog proxiedfor field supp + proxiedfor field support added to ncsarequestlog ProxiedFor field support added to NCSARequestLog - + worked around bad jboss url handler in xmlparser Worked around bad jboss URL + + worked around bad jboss url handler in xmlparser worked around bad jbo + worked around bad jboss url handler in xmlparser worked around bad jbo + worked around bad jboss url handler in xmlparser Worked around bad jboss URL handler in XMLParser jetty-4.2.19 - 19 March 2004 - + fixed dos attack problem Fixed DOS attack problem + + fixed dos attack problem fixed dos attack problem fixed dos attack pro fixed + dos attack problem fixed dos attack problem fixed dos attack problem Fixed + DOS attack problem jetty-5.0.beta2 - 12 February 2004 - + added experimental nio listeners again. Added experimental NIO listeners - again. - + added log4j context repository to jettyplus Added log4j context repository - to jettyplus - + added skeleton jmx mbean for jetty plus Added skeleton JMX MBean for jetty - plus - + fileresource better handles non sun jvm FileResource better handles non sun + + added experimental nio listeners again. added experimental nio listene added + experimental nio listeners again. added experimental nio listene added + experimental nio listeners again. Added experimental NIO listeners again. + + added log4j context repository to jettyplus added log4j context reposi added + log4j context repository to jettyplus added log4j context reposi added log4j + context repository to jettyplus Added log4j context repository to jettyplus + + added skeleton jmx mbean for jetty plus added skeleton jmx mbean for j added + skeleton jmx mbean for jetty plus added skeleton jmx mbean for j added + skeleton jmx mbean for jetty plus Added skeleton JMX MBean for jetty plus + + fileresource better handles non sun jvm fileresource better handles no + fileresource better handles non sun jvm fileresource better handles no + fileresource better handles non sun jvm FileResource better handles non sun JVM - + fixed busy loop in threadpool run Fixed busy loop in threadpool run - + fixed filter dispatch configuration. fixed filter dispatch configuration. - + fixed head with empty chunk bug. Fixed HEAD with empty chunk bug. - + fixed jetty.home/work handling Fixed jetty.home/work handling - + fixed lazy authentication with forms fixed lazy authentication with FORMs - + fixed sessionmanager init Fixed SessionManager init - + fixed setdate thread safety Fixed setDate thread safety - + improved low thread handling Improved low thread handling - + monitor closes socket before exit Monitor closes socket before exit - + npe guard for no-listener junit deployment NPE guard for no-listener junit - deployment - + reorganized servletholder init Reorganized ServletHolder init - + requestdispatcher uses request encoding for query params RequestDispatcher + + fixed busy loop in threadpool run fixed busy loop in threadpool run fi fixed + busy loop in threadpool run fixed busy loop in threadpool run fixed busy + loop in threadpool run Fixed busy loop in threadpool run + + fixed filter dispatch configuration. fixed filter dispatch configurati fixed + filter dispatch configuration. fixed filter dispatch configurati fixed + filter dispatch configuration. fixed filter dispatch configuration. + + fixed head with empty chunk bug. fixed head with empty chunk bug. fixe fixed + head with empty chunk bug. fixed head with empty chunk bug. fixed head with + empty chunk bug. Fixed HEAD with empty chunk bug. + + fixed jetty.home/work handling fixed jetty.home/work handling fixed fixed + jetty.home/work handling fixed jetty.home/work handling fixed + jetty.home/work handling Fixed jetty.home/work handling + + fixed lazy authentication with forms fixed lazy authentication with fo fixed + lazy authentication with forms fixed lazy authentication with fo fixed lazy + authentication with forms fixed lazy authentication with FORMs + + fixed sessionmanager init fixed sessionmanager init fixed sessionmanag fixed + sessionmanager init fixed sessionmanager init fixed sessionmanager init + Fixed SessionManager init + + fixed setdate thread safety fixed setdate thread safety fixed setdate fixed + setdate thread safety fixed setdate thread safety fixed setdate thread + safety Fixed setDate thread safety + + improved low thread handling improved low thread handling improved low + improved low thread handling improved low thread handling improved low + thread handling Improved low thread handling + + monitor closes socket before exit monitor closes socket before exit mo + monitor closes socket before exit monitor closes socket before exit monitor + closes socket before exit Monitor closes socket before exit + + npe guard for no-listener junit deployment npe guard for no-listener j npe + guard for no-listener junit deployment npe guard for no-listener j npe guard + for no-listener junit deployment NPE guard for no-listener junit deployment + + reorganized servletholder init reorganized servletholder init reorgani + reorganized servletholder init reorganized servletholder init reorganized + servletholder init Reorganized ServletHolder init + + requestdispatcher uses request encoding for query params requestdispat + requestdispatcher uses request encoding for query params requestdispat + requestdispatcher uses request encoding for query params RequestDispatcher uses request encoding for query params - + updated to japser 5.0.16 Updated to Japser 5.0.16 + + updated to japser 5.0.16 updated to japser 5.0.16 updated to japser 5. + updated to japser 5.0.16 updated to japser 5.0.16 updated to japser 5.0.16 + Updated to Japser 5.0.16 jetty-4.2.18 - 01 March 2004 - + added log4j context repository to jettyplus Added log4j context repository - to jettyplus - + default servlet respectes servlet path Default servlet respectes servlet + + added log4j context repository to jettyplus added log4j context reposi added + log4j context repository to jettyplus added log4j context reposi added log4j + context repository to jettyplus Added log4j context repository to jettyplus + + default servlet respectes servlet path default servlet respectes servl + default servlet respectes servlet path default servlet respectes servl + default servlet respectes servlet path Default servlet respectes servlet path - + fixed j2se 1.3 problem with httpfields Fixed j2se 1.3 problem with - HttpFields - + improved log performance Improved log performance - + npe guard for no-listener junit deployment NPE guard for no-listener junit - deployment - + suppress some more ioexceptions Suppress some more IOExceptions + + fixed j2se 1.3 problem with httpfields fixed j2se 1.3 problem with fix fixed + j2se 1.3 problem with httpfields fixed j2se 1.3 problem with fixed j2se 1.3 + problem with httpfields Fixed j2se 1.3 problem with HttpFields + + improved log performance improved log performance improved log perform + improved log performance improved log performance improved log performance + Improved log performance + + npe guard for no-listener junit deployment npe guard for no-listener j npe + guard for no-listener junit deployment npe guard for no-listener j npe guard + for no-listener junit deployment NPE guard for no-listener junit deployment + + suppress some more ioexceptions suppress some more ioexceptions suppre + suppress some more ioexceptions suppress some more ioexceptions suppress + some more ioexceptions Suppress some more IOExceptions jetty-4.2.17 - 01 February 2004 - + fixed busy loop in threadpool run Fixed busy loop in threadpool run - + reorganized servletholder init Reorganized ServletHolder init + + fixed busy loop in threadpool run fixed busy loop in threadpool run fi fixed + busy loop in threadpool run fixed busy loop in threadpool run fixed busy + loop in threadpool run Fixed busy loop in threadpool run + + reorganized servletholder init reorganized servletholder init reorgani + reorganized servletholder init reorganized servletholder init reorganized + servletholder init Reorganized ServletHolder init jetty-4.2.16 - 30 January 2004 - + fileresource better handles non sun jvm FileResource better handles non sun + + fileresource better handles non sun jvm fileresource better handles no + fileresource better handles non sun jvm fileresource better handles no + fileresource better handles non sun jvm FileResource better handles non sun JVM - + fixed httptunnel for jdk 1.2 Fixed HttpTunnel for JDK 1.2 - + fixed setdate multi-cpu race Fixed setDate multi-cpu race - + improved low thread handling Improved low thread handling - + monitor closes socket before exit Monitor closes socket before exit - + requestdispatcher uses request encoding for query params RequestDispatcher + + fixed httptunnel for jdk 1.2 fixed httptunnel for jdk 1.2 fixed httptu fixed + httptunnel for jdk 1.2 fixed httptunnel for jdk 1.2 fixed httptunnel for jdk + 1.2 Fixed HttpTunnel for JDK 1.2 + + fixed setdate multi-cpu race fixed setdate multi-cpu race fixed setdat fixed + setdate multi-cpu race fixed setdate multi-cpu race fixed setdate multi-cpu + race Fixed setDate multi-cpu race + + improved low thread handling improved low thread handling improved low + improved low thread handling improved low thread handling improved low + thread handling Improved low thread handling + + monitor closes socket before exit monitor closes socket before exit mo + monitor closes socket before exit monitor closes socket before exit monitor + closes socket before exit Monitor closes socket before exit + + requestdispatcher uses request encoding for query params requestdispat + requestdispatcher uses request encoding for query params requestdispat + requestdispatcher uses request encoding for query params RequestDispatcher uses request encoding for query params - + update jasper to 4.1.29 Update jasper to 4.1.29 + + update jasper to 4.1.29 update jasper to 4.1.29 update jasper to 4.1.2 + update jasper to 4.1.29 update jasper to 4.1.29 update jasper to 4.1.29 + Update jasper to 4.1.29 jetty-5.0.beta1 - 24 December 2003 - + added patch for jboss realm single sign on Added patch for JBoss realm - single sign on - + env variables for cgi Env variables for CGI - + fixed unixcrypt handling in htaccesshandler Fixed UnixCrypt handling in + + added patch for jboss realm single sign on added patch for jboss realm added + patch for jboss realm single sign on added patch for jboss realm added patch + for jboss realm single sign on Added patch for JBoss realm single sign on + + env variables for cgi env variables for cgi env variables for cgi env env + variables for cgi env variables for cgi env variables for cgi Env variables + for CGI + + fixed unixcrypt handling in htaccesshandler fixed unixcrypt handling i fixed + unixcrypt handling in htaccesshandler fixed unixcrypt handling i fixed + unixcrypt handling in htaccesshandler Fixed UnixCrypt handling in HTAccessHandler - + removed support for old jboss clustering Removed support for old JBoss + + removed support for old jboss clustering removed support for old jboss + removed support for old jboss clustering removed support for old jboss + removed support for old jboss clustering Removed support for old JBoss clustering - + reorganized faq Reorganized FAQ + + reorganized faq reorganized faq reorganized faq reorganized faq reorganized + faq reorganized faq reorganized faq Reorganized FAQ + securityconstraints not reset by stop() on custom context + securityconstraints not reset by stop() on custom context + securityconstraints not reset by stop() on custom context SecurityConstraints not reset by stop() on custom context jetty-4.2.15 - 24 December 2003 - + added patch for jboss realm single sign on Added patch for JBoss realm - single sign on - + environment variables for cgi Environment variables for CGI - + fixed unixcrypt handling in htaccesshandler Fixed UnixCrypt handling in + + added patch for jboss realm single sign on added patch for jboss realm added + patch for jboss realm single sign on added patch for jboss realm added patch + for jboss realm single sign on Added patch for JBoss realm single sign on + + environment variables for cgi environment variables for cgi environmen + environment variables for cgi environment variables for cgi environment + variables for cgi Environment variables for CGI + + fixed unixcrypt handling in htaccesshandler fixed unixcrypt handling i fixed + unixcrypt handling in htaccesshandler fixed unixcrypt handling i fixed + unixcrypt handling in htaccesshandler Fixed UnixCrypt handling in HTAccessHandler - + removed support for old jboss clustering Removed support for old JBoss + + removed support for old jboss clustering removed support for old jboss + removed support for old jboss clustering removed support for old jboss + removed support for old jboss clustering Removed support for old JBoss clustering + securityconstraints not reset by stop() on custom context + securityconstraints not reset by stop() on custom context + securityconstraints not reset by stop() on custom context SecurityConstraints not reset by stop() on custom context jetty-5.0.beta0 - 22 November 2003 - + added msiesslhandler to handle browsers that don't grok persistent ssl Added + + added msiesslhandler to handle browsers that don't grok persistent ssl added + msiesslhandler to handle browsers that don't grok persistent ssl added + msiesslhandler to handle browsers that don't grok persistent ssl Added MsieSslHandler to handle browsers that don't grok persistent SSL (msie 5) - + added org.mortbay.http.errorhandler for error pages. Added + + added org.mortbay.http.errorhandler for error pages. added added added + org.mortbay.http.errorhandler for error pages. added added + org.mortbay.http.errorhandler for error pages. Added org.mortbay.http.ErrorHandler for error pages. - + allow per listener handlers Allow per listener handlers - + expire pages that contain set-cookie as per rfc2109 recommendation Expire + + allow per listener handlers allow per listener handlers allow per list allow + per listener handlers allow per listener handlers allow per listener + handlers Allow per listener handlers + + expire pages that contain set-cookie as per rfc2109 recommendation exp + expire pages that contain set-cookie as per rfc2109 recommendation exp + expire pages that contain set-cookie as per rfc2109 recommendation Expire pages that contain set-cookie as per RFC2109 recommendation - + fixed init race in httpfields cache Fixed init race in HttpFields cache - + jboss integration uses writer rather than stream for xml config handli JBoss + + fixed init race in httpfields cache fixed init race in httpfields cach fixed + init race in httpfields cache fixed init race in httpfields cach fixed init + race in httpfields cache Fixed init race in HttpFields cache + + jboss integration uses writer rather than stream for xml config handli jboss + integration uses writer rather than stream for xml config handli jboss + integration uses writer rather than stream for xml config handli JBoss integration uses writer rather than stream for XML config handling - + pathmap uses own map.entry impl for ibm jvms PathMap uses own Map.Entry impl + + pathmap uses own map.entry impl for ibm jvms pathmap uses own map.entr + pathmap uses own map.entry impl for ibm jvms pathmap uses own map.entr + pathmap uses own map.entry impl for ibm jvms PathMap uses own Map.Entry impl for IBM JVMs - + protect threadpool.run() from interrupted exceptions Protect - ThreadPool.run() from interrupted exceptions - + removed support for http trailers Removed support for HTTP trailers - + removed the cmr/cmp distributed session implementation Removed the CMR/CMP + + protect threadpool.run() from interrupted exceptions protect protect protect + threadpool.run() from interrupted exceptions protect protect + threadpool.run() from interrupted exceptions Protect ThreadPool.run() from + interrupted exceptions + + removed support for http trailers removed support for http trailers re + removed support for http trailers removed support for http trailers removed + support for http trailers Removed support for HTTP trailers + + removed the cmr/cmp distributed session implementation removed the cmr + removed the cmr/cmp distributed session implementation removed the cmr + removed the cmr/cmp distributed session implementation Removed the CMR/CMP distributed session implementation - + respect content length when decoding form content. Respect content length + + respect content length when decoding form content. respect content len + respect content length when decoding form content. respect content len + respect content length when decoding form content. Respect content length when decoding form content. - + updated jasper to 5.0.14beta Updated jasper to 5.0.14beta - + use ${jetty.home}/work or web-inf/work for temp directories if present Use + + updated jasper to 5.0.14beta updated jasper to 5.0.14beta updated jasp + updated jasper to 5.0.14beta updated jasper to 5.0.14beta updated jasper to + 5.0.14beta Updated jasper to 5.0.14beta + + use ${jetty.home}/work or web-inf/work for temp directories if present use + ${jetty.home}/work or web-inf/work for temp directories if present use + ${jetty.home}/work or web-inf/work for temp directories if present Use ${jetty.home}/work or WEB-INF/work for temp directories if present jetty-4.2.15rc0 - 22 November 2003 - + added org.mortbay.http.errorhandler for error pages. Added + + added org.mortbay.http.errorhandler for error pages. added added added + org.mortbay.http.errorhandler for error pages. added added + org.mortbay.http.errorhandler for error pages. Added org.mortbay.http.ErrorHandler for error pages. - + jsselistener checks useragent for browsers that can't grok persistent + + jsselistener checks useragent for browsers that can't grok persistent + jsselistener checks useragent for browsers that can't grok persistent + jsselistener checks useragent for browsers that can't grok persistent JsseListener checks UserAgent for browsers that can't grok persistent SSL (msie5) - + pathmap uses own map.entry impl for ibm jvms PathMap uses own Map.Entry impl + + pathmap uses own map.entry impl for ibm jvms pathmap uses own map.entr + pathmap uses own map.entry impl for ibm jvms pathmap uses own map.entr + pathmap uses own map.entry impl for ibm jvms PathMap uses own Map.Entry impl for IBM JVMs - + protect threadpool.run() from interrupted exceptions Protect - ThreadPool.run() from interrupted exceptions - + race in httpfields cache Race in HttpFields cache - + removed the cmr/cmp distributed session implementation Removed the CMR/CMP + + protect threadpool.run() from interrupted exceptions protect protect protect + threadpool.run() from interrupted exceptions protect protect + threadpool.run() from interrupted exceptions Protect ThreadPool.run() from + interrupted exceptions + + race in httpfields cache race in httpfields cache race in httpfields c race + in httpfields cache race in httpfields cache race in httpfields cache Race + in HttpFields cache + + removed the cmr/cmp distributed session implementation removed the cmr + removed the cmr/cmp distributed session implementation removed the cmr + removed the cmr/cmp distributed session implementation Removed the CMR/CMP distributed session implementation - + use ${jetty.home}/work or web-inf/work for temp directories if present Use + + use ${jetty.home}/work or web-inf/work for temp directories if present use + ${jetty.home}/work or web-inf/work for temp directories if present use + ${jetty.home}/work or web-inf/work for temp directories if present Use ${jetty.home}/work or WEB-INF/work for temp directories if present jetty-4.2.14 - 04 November 2003 - + expire pages that contain set-cookie as per rfc2109 recommendation Expire + + expire pages that contain set-cookie as per rfc2109 recommendation exp + expire pages that contain set-cookie as per rfc2109 recommendation exp + expire pages that contain set-cookie as per rfc2109 recommendation Expire pages that contain set-cookie as per RFC2109 recommendation - + fixed npe in sso Fixed NPE in SSO - + jboss integration uses writer rather than stream for xml config handli JBoss + + fixed npe in sso fixed npe in sso fixed npe in sso fixed npe in sso fixed + npe in sso fixed npe in sso fixed npe in sso Fixed NPE in SSO + + jboss integration uses writer rather than stream for xml config handli jboss + integration uses writer rather than stream for xml config handli jboss + integration uses writer rather than stream for xml config handli JBoss integration uses writer rather than stream for XML config handling - + respect content length when decoding form content. respect content length + + respect content length when decoding form content. respect content len + respect content length when decoding form content. respect content len + respect content length when decoding form content. respect content length when decoding form content. jetty-5.0.alpha3 - 19 October 2003 - + allow customization of httpconnections Allow customization of - HttpConnections - + failed requests excluded from duration stats Failed requests excluded from - duration stats - + fileclasspath derived from walk of classloader hierarchy. FileClassPath + + allow customization of httpconnections allow customization of allow allow + customization of httpconnections allow customization of allow customization + of httpconnections Allow customization of HttpConnections + + failed requests excluded from duration stats failed requests excluded failed + requests excluded from duration stats failed requests excluded failed + requests excluded from duration stats Failed requests excluded from duration + stats + + fileclasspath derived from walk of classloader hierarchy. fileclasspat + fileclasspath derived from walk of classloader hierarchy. fileclasspat + fileclasspath derived from walk of classloader hierarchy. FileClassPath derived from walk of classloader hierarchy. - + fixed null pointer if no sevices configured for jettyplus Fixed null pointer - if no sevices configured for JettyPlus - + implemented security constraint combinations Implemented security constraint + + fixed null pointer if no sevices configured for jettyplus fixed null p fixed + null pointer if no sevices configured for jettyplus fixed null p fixed null + pointer if no sevices configured for jettyplus Fixed null pointer if no + sevices configured for JettyPlus + + implemented security constraint combinations implemented security cons + implemented security constraint combinations implemented security cons + implemented security constraint combinations Implemented security constraint combinations - + lazy authentication if no auth constraint. Lazy authentication if no auth + + lazy authentication if no auth constraint. lazy authentication if no a lazy + authentication if no auth constraint. lazy authentication if no a lazy + authentication if no auth constraint. Lazy authentication if no auth constraint. - + priority added to threadpool Priority added to ThreadPool - + replaced win32 service with http://wrapper.tanukisoftware.org replaced win32 + + priority added to threadpool priority added to threadpool priority add + priority added to threadpool priority added to threadpool priority added to + threadpool Priority added to ThreadPool + + replaced win32 service with http://wrapper.tanukisoftware.org replaced + replaced win32 service with http://wrapper.tanukisoftware.org replaced + replaced win32 service with http://wrapper.tanukisoftware.org replaced win32 service with http://wrapper.tanukisoftware.org - + restore servlet handler after dispatch Restore servlet handler after - dispatch - + reworked dispatcher to better support cross context sessions. Reworked + + restore servlet handler after dispatch restore servlet handler after r + restore servlet handler after dispatch restore servlet handler after restore + servlet handler after dispatch Restore servlet handler after dispatch + + reworked dispatcher to better support cross context sessions. reworked + reworked dispatcher to better support cross context sessions. reworked + reworked dispatcher to better support cross context sessions. Reworked Dispatcher to better support cross context sessions. - + set transactionmanager on jettyplus datasources and pools Set - TransactionManager on JettyPlus datasources and pools - + updated jasper and examples to 5.0.12 Updated jasper and examples to 5.0.12 - + use file.touri().tourl() when jdk 1.2 alternative is available. Use + + set transactionmanager on jettyplus datasources and pools set set set + transactionmanager on jettyplus datasources and pools set set + transactionmanager on jettyplus datasources and pools Set TransactionManager + on JettyPlus datasources and pools + + updated jasper and examples to 5.0.12 updated jasper and examples to 5 + updated jasper and examples to 5.0.12 updated jasper and examples to 5 + updated jasper and examples to 5.0.12 Updated jasper and examples to 5.0.12 + + use file.touri().tourl() when jdk 1.2 alternative is available. use us use + file.touri().tourl() when jdk 1.2 alternative is available. use use + file.touri().tourl() when jdk 1.2 alternative is available. Use File.toURI().toURL() when jdk 1.2 alternative is available. jetty-4.2.14RC1 - 19 October 2003 - + added userrealm.logout and arrange for form auth Added UserRealm.logout and + + added userrealm.logout and arrange for form auth added userrealm.logou added + userrealm.logout and arrange for form auth added userrealm.logou added + userrealm.logout and arrange for form auth Added UserRealm.logout and arrange for form auth - + allow customization of httpconnections Allow customization of - HttpConnections - + failed requests excluded from Failed requests excluded from - + reworked dispatcher to better support cross context sessions. Reworked + + allow customization of httpconnections allow customization of allow allow + customization of httpconnections allow customization of allow customization + of httpconnections Allow customization of HttpConnections + + failed requests excluded from failed requests excluded from failed req + failed requests excluded from failed requests excluded from failed requests + excluded from Failed requests excluded from + + reworked dispatcher to better support cross context sessions. reworked + reworked dispatcher to better support cross context sessions. reworked + reworked dispatcher to better support cross context sessions. Reworked Dispatcher to better support cross context sessions. jetty-4.2.14RC0 - 07 October 2003 - + build fileclasspath from a walk of the classloaders Build fileclasspath from - a walk of the classloaders - + cookie timestamps are in gmt cookie timestamps are in GMT - + correctly setup context classloader in cross context dispatch. Correctly + + build fileclasspath from a walk of the classloaders build fileclasspat build + fileclasspath from a walk of the classloaders build fileclasspat build + fileclasspath from a walk of the classloaders Build fileclasspath from a + walk of the classloaders + + cookie timestamps are in gmt cookie timestamps are in gmt cookie times + cookie timestamps are in gmt cookie timestamps are in gmt cookie timestamps + are in gmt cookie timestamps are in GMT + + correctly setup context classloader in cross context dispatch. correct + correctly setup context classloader in cross context dispatch. correct + correctly setup context classloader in cross context dispatch. Correctly setup context classloader in cross context dispatch. - + fixed comments with embedded double dashes on jettyplus.xml file Fixed - comments with embedded double dashes on jettyplus.xml file - + fixed handling of error pages for io and servlet exceptions Fixed handling - of error pages for IO and Servlet exceptions - + fixed null pointer if no sevices configured for jettyplus Fixed null pointer - if no sevices configured for JettyPlus - + priority on threadedserver Priority on ThreadedServer - + put a semi busy loop into proxy tunnels for ie problems Put a semi busy loop - into proxy tunnels for IE problems - + replaced win32 service with http://wrapper.tanukisoftware.org replaced win32 + + fixed comments with embedded double dashes on jettyplus.xml file fixed fixed + comments with embedded double dashes on jettyplus.xml file fixed fixed + comments with embedded double dashes on jettyplus.xml file Fixed comments + with embedded double dashes on jettyplus.xml file + + fixed handling of error pages for io and servlet exceptions fixed hand fixed + handling of error pages for io and servlet exceptions fixed hand fixed + handling of error pages for io and servlet exceptions Fixed handling of + error pages for IO and Servlet exceptions + + fixed null pointer if no sevices configured for jettyplus fixed null p fixed + null pointer if no sevices configured for jettyplus fixed null p fixed null + pointer if no sevices configured for jettyplus Fixed null pointer if no + sevices configured for JettyPlus + + priority on threadedserver priority on threadedserver priority on priority + on threadedserver priority on threadedserver priority on threadedserver + Priority on ThreadedServer + + put a semi busy loop into proxy tunnels for ie problems put a semi bus put a + semi busy loop into proxy tunnels for ie problems put a semi bus put a semi + busy loop into proxy tunnels for ie problems Put a semi busy loop into proxy + tunnels for IE problems + + replaced win32 service with http://wrapper.tanukisoftware.org replaced + replaced win32 service with http://wrapper.tanukisoftware.org replaced + replaced win32 service with http://wrapper.tanukisoftware.org replaced win32 service with http://wrapper.tanukisoftware.org - + set transactionmanager on jettyplus datasources and pools Set - TransactionManager on JettyPlus datasources and pools + + set transactionmanager on jettyplus datasources and pools set set set + transactionmanager on jettyplus datasources and pools set set + transactionmanager on jettyplus datasources and pools Set TransactionManager + on JettyPlus datasources and pools + updated extra/j2ee to jboss 3.2.1+ updated extra/j2ee to jboss 3.2.1+ - + use file.touri().tourl() when jdk 1.2 alternative is available. Use + updated extra/j2ee to jboss 3.2.1+ updated extra/j2ee to jboss 3.2.1+ + updated extra/j2ee to jboss 3.2.1+ updated extra/j2ee to jboss 3.2.1+ + + use file.touri().tourl() when jdk 1.2 alternative is available. use us use + file.touri().tourl() when jdk 1.2 alternative is available. use use + file.touri().tourl() when jdk 1.2 alternative is available. Use File.toURI().toURL() when jdk 1.2 alternative is available. jetty-5.0.alpha2 - 19 September 2003 - + correctly setup context classloader in cross context dispatch. Correctly + + correctly setup context classloader in cross context dispatch. correct + correctly setup context classloader in cross context dispatch. correct + correctly setup context classloader in cross context dispatch. Correctly setup context classloader in cross context dispatch. - + fixed error page handling of io and servlet exceptions. Fixed error page - handling of IO and Servlet exceptions. - + implemented servletrequestlisteners as optional filter. Implemented + + fixed error page handling of io and servlet exceptions. fixed error pa fixed + error page handling of io and servlet exceptions. fixed error pa fixed error + page handling of io and servlet exceptions. Fixed error page handling of IO + and Servlet exceptions. + + implemented servletrequestlisteners as optional filter. implemented + implemented servletrequestlisteners as optional filter. implemented + implemented servletrequestlisteners as optional filter. Implemented ServletRequestListeners as optional filter. - + improved jmx start. Improved JMX start. - + minor doco updates. minor doco updates. - + moved error page mechanism to be webapp only. Moved error page mechanism to - be webapp only. - + moved mailing lists to sourceforge. moved mailing lists to sourceforge. - + multipartrequest supports multi value headers. MultipartRequest supports + + improved jmx start. improved jmx start. improved jmx start. improved j + improved jmx start. improved jmx start. improved jmx start. Improved JMX + start. + + minor doco updates. minor doco updates. minor doco updates. minor doco minor + doco updates. minor doco updates. minor doco updates. minor doco updates. + + moved error page mechanism to be webapp only. moved error page mechani moved + error page mechanism to be webapp only. moved error page mechani moved error + page mechanism to be webapp only. Moved error page mechanism to be webapp + only. + + moved mailing lists to sourceforge. moved mailing lists to sourceforge moved + mailing lists to sourceforge. moved mailing lists to sourceforge moved + mailing lists to sourceforge. moved mailing lists to sourceforge. + + multipartrequest supports multi value headers. multipartrequest suppor + multipartrequest supports multi value headers. multipartrequest suppor + multipartrequest supports multi value headers. MultipartRequest supports multi value headers. - + put a semi busy loop into proxy tunnels for ie problems Put a semi busy loop - into proxy tunnels for IE problems - + turn off validation without non-xerces errors Turn off validation without - non-xerces errors - + update jakarta examples Update jakarta examples - + use commons logging. Use commons logging. - + use log4j if extra is present. Use log4j if extra is present. - + xml entity resolution uses urls not resources XML entity resolution uses - URLs not Resources + + put a semi busy loop into proxy tunnels for ie problems put a semi bus put a + semi busy loop into proxy tunnels for ie problems put a semi bus put a semi + busy loop into proxy tunnels for ie problems Put a semi busy loop into proxy + tunnels for IE problems + + turn off validation without non-xerces errors turn off validation with turn + off validation without non-xerces errors turn off validation with turn off + validation without non-xerces errors Turn off validation without non-xerces + errors + + update jakarta examples update jakarta examples update jakarta example + update jakarta examples update jakarta examples update jakarta examples + Update jakarta examples + + use commons logging. use commons logging. use commons logging. use com use + commons logging. use commons logging. use commons logging. Use commons + logging. + + use log4j if extra is present. use log4j if extra is present. use log4 use + log4j if extra is present. use log4j if extra is present. use log4j if extra + is present. Use log4j if extra is present. + + xml entity resolution uses urls not resources xml entity resolution us xml + entity resolution uses urls not resources xml entity resolution us xml + entity resolution uses urls not resources XML entity resolution uses URLs + not Resources jetty-5.0.alpha1 - 12 August 2003 - + implemented locale encoding mapping. Implemented locale encoding mapping. - + improve combinations of security constraints Improve combinations of - Security Constraints - + server javadoc from war Server javadoc from war - + switched to mx4j Switched to mx4j - + synced with 4.2.12 Synced with 4.2.12 - + updated to jasper 5.0.7 Updated to Jasper 5.0.7 + + implemented locale encoding mapping. implemented locale encoding mappi + implemented locale encoding mapping. implemented locale encoding mappi + implemented locale encoding mapping. Implemented locale encoding mapping. + + improve combinations of security constraints improve combinations of i + improve combinations of security constraints improve combinations of improve + combinations of security constraints Improve combinations of Security + Constraints + + server javadoc from war server javadoc from war server javadoc from wa + server javadoc from war server javadoc from war server javadoc from war + Server javadoc from war + + switched to mx4j switched to mx4j switched to mx4j switched to mx4j switched + to mx4j switched to mx4j switched to mx4j Switched to mx4j + + synced with 4.2.12 synced with 4.2.12 synced with 4.2.12 synced with 4 + synced with 4.2.12 synced with 4.2.12 synced with 4.2.12 Synced with 4.2.12 + + updated to jasper 5.0.7 updated to jasper 5.0.7 updated to jasper 5.0. + updated to jasper 5.0.7 updated to jasper 5.0.7 updated to jasper 5.0.7 + Updated to Jasper 5.0.7 jetty-5.0.alpha0 - 16 July 2003 - + compiled against 2.4 servlet spec. Compiled against 2.4 servlet spec. - + implemented dispatcher forward attributes. Implemented Dispatcher forward + + compiled against 2.4 servlet spec. compiled against 2.4 servlet spec. + compiled against 2.4 servlet spec. compiled against 2.4 servlet spec. + compiled against 2.4 servlet spec. Compiled against 2.4 servlet spec. + + implemented dispatcher forward attributes. implemented dispatcher forw + implemented dispatcher forward attributes. implemented dispatcher forw + implemented dispatcher forward attributes. Implemented Dispatcher forward attributes. - + implemented filter-mapping element Implemented filter-mapping + + implemented filter-mapping element implemented filter-map + implemented filter-mapping element implemented filter-map + implemented filter-mapping element Implemented filter-mapping element - + implemented remote/local addr/port methods Implemented remote/local + + implemented remote/local addr/port methods implemented remote/local + implemented remote/local addr/port methods implemented remote/local + implemented remote/local addr/port methods Implemented remote/local addr/port methods - + implemented setcharaterencoding Implemented setCharaterEncoding - + updated authentication so that a normal principal is used. Updated - authentication so that a normal Principal is used. - + updated to jasper 5.0.3 updated to jasper 5.0.3 + + implemented setcharaterencoding implemented setcharaterencoding implem + implemented setcharaterencoding implemented setcharaterencoding implemented + setcharaterencoding Implemented setCharaterEncoding + + updated authentication so that a normal principal is used. updated upd + updated authentication so that a normal principal is used. updated updated + authentication so that a normal principal is used. Updated authentication so + that a normal Principal is used. + + updated to jasper 5.0.3 updated to jasper 5.0.3 updated to jasper 5.0. + updated to jasper 5.0.3 updated to jasper 5.0.3 updated to jasper 5.0.3 + updated to jasper 5.0.3 jetty-4.2.12 - 12 August 2003 - + added missing s to some options strings Added missing S to some OPTIONS - strings - + added open method to threaded server. Added open method to threaded server. - + fixed mime types for chemicals Fixed MIME types for chemicals - + fixed parameter ordering for a forward request. Fixed parameter ordering for - a forward request. - + fixed up htaccesshandler Fixed up HTAccessHandler - + formauthenticator does 403 with empty error page. FORMAuthenticator does 403 + + added missing s to some options strings added missing s to some option added + missing s to some options strings added missing s to some option added + missing s to some options strings Added missing S to some OPTIONS strings + + added open method to threaded server. added open method to threaded se added + open method to threaded server. added open method to threaded se added open + method to threaded server. Added open method to threaded server. + + fixed mime types for chemicals fixed mime types for chemicals fixed mi fixed + mime types for chemicals fixed mime types for chemicals fixed mime types for + chemicals Fixed MIME types for chemicals + + fixed parameter ordering for a forward request. fixed parameter orderi fixed + parameter ordering for a forward request. fixed parameter orderi fixed + parameter ordering for a forward request. Fixed parameter ordering for a + forward request. + + fixed up htaccesshandler fixed up htaccesshandler fixed up htaccesshan fixed + up htaccesshandler fixed up htaccesshandler fixed up htaccesshandler Fixed + up HTAccessHandler + + formauthenticator does 403 with empty error page. formauthenticator do + formauthenticator does 403 with empty error page. formauthenticator do + formauthenticator does 403 with empty error page. FORMAuthenticator does 403 with empty error page. - + improved error messages from proxyhandler Improved error messages from + + improved error messages from proxyhandler improved error messages from + improved error messages from proxyhandler improved error messages from + improved error messages from proxyhandler Improved error messages from ProxyHandler - + padding for ie in rootnotfoundhandler Padding for IE in RootNotFoundHandler - + removed protection of org.mortbay.http attributes Removed protection of + + padding for ie in rootnotfoundhandler padding for ie in rootnotfoundha + padding for ie in rootnotfoundhandler padding for ie in rootnotfoundha + padding for ie in rootnotfoundhandler Padding for IE in RootNotFoundHandler + + removed protection of org.mortbay.http attributes removed protection o + removed protection of org.mortbay.http attributes removed protection o + removed protection of org.mortbay.http attributes Removed protection of org.mortbay.http attributes - + restore max inactive interval for session manager Restore max inactive + + restore max inactive interval for session manager restore max inactive + restore max inactive interval for session manager restore max inactive + restore max inactive interval for session manager Restore max inactive interval for session manager jetty-4.2.11 - 12 July 2003 - + branched for jetty 5 development. Branched for Jetty 5 development. - + cookie params all in lower case. Cookie params all in lower case. - + fixed race in servlet initialization code. Fixed race in servlet - initialization code. - + prevent ajp13 from reordering query. Prevent AJP13 from reordering query. - + simplified ajp13 connection handling. Simplified AJP13 connection handling. - + support separate monitor class for start Support separate Monitor class for + + branched for jetty 5 development. branched for jetty 5 development. br + branched for jetty 5 development. branched for jetty 5 development. branched + for jetty 5 development. Branched for Jetty 5 development. + + cookie params all in lower case. cookie params all in lower case. cook + cookie params all in lower case. cookie params all in lower case. cookie + params all in lower case. Cookie params all in lower case. + + fixed race in servlet initialization code. fixed race in servlet fixed fixed + race in servlet initialization code. fixed race in servlet fixed race in + servlet initialization code. Fixed race in servlet initialization code. + + prevent ajp13 from reordering query. prevent ajp13 from reordering que + prevent ajp13 from reordering query. prevent ajp13 from reordering que + prevent ajp13 from reordering query. Prevent AJP13 from reordering query. + + simplified ajp13 connection handling. simplified ajp13 connection hand + simplified ajp13 connection handling. simplified ajp13 connection hand + simplified ajp13 connection handling. Simplified AJP13 connection handling. + + support separate monitor class for start support separate monitor clas + support separate monitor class for start support separate monitor clas + support separate monitor class for start Support separate Monitor class for start jetty-4.2.10 - 07 July 2003 - + updates to jettyplus documentation Updates to JettyPlus documentation - + updates to jetty tutorial for start.jar, jmx etc Updates to Jetty tutorial + + updates to jettyplus documentation updates to jettyplus documentation + updates to jettyplus documentation updates to jettyplus documentation + updates to jettyplus documentation Updates to JettyPlus documentation + + updates to jetty tutorial for start.jar, jmx etc updates to jetty tuto + updates to jetty tutorial for start.jar, jmx etc updates to jetty tuto + updates to jetty tutorial for start.jar, jmx etc Updates to Jetty tutorial for start.jar, jmx etc jetty-4.2.10pre2 - 04 July 2003 - + addition of mail service for jettyplus Addition of mail service for - JettyPlus - + allow multiple security-role-ref elements per servlet. Allow multiple + + addition of mail service for jettyplus addition of mail service for ad + addition of mail service for jettyplus addition of mail service for addition + of mail service for jettyplus Addition of mail service for JettyPlus + + allow multiple security-role-ref elements per servlet. allow multiple allow + multiple security-role-ref elements per servlet. allow multiple allow + multiple security-role-ref elements per servlet. Allow multiple security-role-ref elements per servlet. - + cleaned up alias handling. Cleaned up alias handling. - + confidential redirection includes query Confidential redirection includes + + cleaned up alias handling. cleaned up alias handling. cleaned up alias + cleaned up alias handling. cleaned up alias handling. cleaned up alias + handling. Cleaned up alias handling. + + confidential redirection includes query confidential redirection inclu + confidential redirection includes query confidential redirection inclu + confidential redirection includes query Confidential redirection includes query - + fixed cookie handling for old cookies and safari Fixed cookie handling for - old cookies and safari + + fixed cookie handling for old cookies and safari fixed cookie handling fixed + cookie handling for old cookies and safari fixed cookie handling fixed + cookie handling for old cookies and safari Fixed cookie handling for old + cookies and safari + handle multiple security role references handle multiple security role + handle multiple security role references handle multiple security role + handle multiple security role references handle multiple security role references - + handle proxy-connection better Handle Proxy-Connection better + + handle proxy-connection better handle proxy-connection better handle handle + proxy-connection better handle proxy-connection better handle + proxy-connection better Handle Proxy-Connection better + improvement to jettyplus config of datasources and connection pools + improvement to jettyplus config of datasources and connection pools + improvement to jettyplus config of datasources and connection pools Improvement to JettyPlus config of datasources and connection pools - + many improvements in jettyplus java:comp handling Many improvements in - JettyPlus java:comp handling - + move to service-based architecture for jettyplus features Move to - Service-based architecture for JettyPlus features - + re-implementation of jndi Re-implementation of JNDI - + restricted ports in proxyhandler. Restricted ports in ProxyHandler. - + session statistics Session statistics - + uri always encodes % URI always encodes % - + xmlconfiguration can get/set fields. XmlConfiguration can get/set fields. + + many improvements in jettyplus java:comp handling many improvements in many + improvements in jettyplus java:comp handling many improvements in many + improvements in jettyplus java:comp handling Many improvements in JettyPlus + java:comp handling + + move to service-based architecture for jettyplus features move to move move + to service-based architecture for jettyplus features move to move to + service-based architecture for jettyplus features Move to Service-based + architecture for JettyPlus features + + re-implementation of jndi re-implementation of jndi re-implementation + re-implementation of jndi re-implementation of jndi re-implementation of + jndi Re-implementation of JNDI + + restricted ports in proxyhandler. restricted ports in proxyhandler. + restricted ports in proxyhandler. restricted ports in proxyhandler. + restricted ports in proxyhandler. Restricted ports in ProxyHandler. + + session statistics session statistics session statistics session stati + session statistics session statistics session statistics Session statistics + + uri always encodes % uri always encodes % uri always encodes % uri alw uri + always encodes % uri always encodes % uri always encodes % URI always + encodes % + + xmlconfiguration can get/set fields. xmlconfiguration can get/set fiel + xmlconfiguration can get/set fields. xmlconfiguration can get/set fiel + xmlconfiguration can get/set fields. XmlConfiguration can get/set fields. jetty-4.2.10pre1 - 02 June 2003 - + added sso implementation for form authentication. Added SSO implementation - for FORM authentication. - + added stop.jar Added stop.jar - + deprecated forced chunking. Deprecated forced chunking. - + fixed ajp13 protocol so that request/response header enums are correct Fixed - AJP13 protocol so that request/response header enums are correct. - + fixed form auth success redirect after retry, introduced in 4.2.9rc1 Fixed - form auth success redirect after retry, introduced in 4.2.9rc1 - + fixed jsp code visibility problem introduced in jetty-4.2.10pre0 Fixed JSP - code visibility problem introduced in Jetty-4.2.10pre0 - + fixed problem with shared session for inter context dispatching. Fixed - problem with shared session for inter context dispatching. - + form authentication remembers url over 403 Form authentication remembers URL - over 403 - + proxyhandler has improved test for request content ProxyHandler has improved + + added sso implementation for form authentication. added sso implementa added + sso implementation for form authentication. added sso implementa added sso + implementation for form authentication. Added SSO implementation for FORM + authentication. + + added stop.jar added stop.jar added stop.jar added stop.jar added stop.jar + added stop.jar added stop.jar Added stop.jar + + deprecated forced chunking. deprecated forced chunking. deprecated for + deprecated forced chunking. deprecated forced chunking. deprecated forced + chunking. Deprecated forced chunking. + + fixed ajp13 protocol so that request/response header enums are correct fixed + ajp13 protocol so that request/response header enums are correct fixed ajp13 + protocol so that request/response header enums are correct Fixed AJP13 + protocol so that request/response header enums are correct. + + fixed form auth success redirect after retry, introduced in 4.2.9rc1 f fixed + form auth success redirect after retry, introduced in 4.2.9rc1 f fixed form + auth success redirect after retry, introduced in 4.2.9rc1 Fixed form auth + success redirect after retry, introduced in 4.2.9rc1 + + fixed jsp code visibility problem introduced in jetty-4.2.10pre0 fixed fixed + jsp code visibility problem introduced in jetty-4.2.10pre0 fixed fixed jsp + code visibility problem introduced in jetty-4.2.10pre0 Fixed JSP code + visibility problem introduced in Jetty-4.2.10pre0 + + fixed problem with shared session for inter context dispatching. fixed fixed + problem with shared session for inter context dispatching. fixed fixed + problem with shared session for inter context dispatching. Fixed problem + with shared session for inter context dispatching. + + form authentication remembers url over 403 form authentication remembe form + authentication remembers url over 403 form authentication remembe form + authentication remembers url over 403 Form authentication remembers URL over + 403 + + proxyhandler has improved test for request content proxyhandler has im + proxyhandler has improved test for request content proxyhandler has im + proxyhandler has improved test for request content ProxyHandler has improved test for request content - + removed support of org.mortbay.http.user role. Removed support of + + removed support of org.mortbay.http.user role. removed support of remo + removed support of org.mortbay.http.user role. removed support of removed + support of org.mortbay.http.user role. Removed support of org.mortbay.http.User role. - + trace support is now optional (in abstracthttphandler). Trace support is now + + trace support is now optional (in abstracthttphandler). trace support trace + support is now optional (in abstracthttphandler). trace support trace + support is now optional (in abstracthttphandler). Trace support is now optional (in AbstractHttpHandler). + webapplicationcontext does not reassign defaults descriptor value. + webapplicationcontext does not reassign defaults descriptor value. + webapplicationcontext does not reassign defaults descriptor value. WebApplicationContext does not reassign defaults descriptor value. jetty-4.2.10pre0 - 05 May 2003 - + added ability to override jetty startup class by using -djetty.server Added + + added ability to override jetty startup class by using -djetty.server added + ability to override jetty startup class by using -djetty.server added + ability to override jetty startup class by using -djetty.server Added ability to override jetty startup class by using -Djetty.server on runline - + allow params in form auth urls Allow params in form auth URLs - + allow query params in error page url. Allow query params in error page URL. - + apply the append flag of rolloverfileoutputstream constructor. Apply the - append flag of RolloverFileOutputStream constructor. - + fixed crlf bug in multipartrequest Fixed CRLF bug in MultiPartRequest - + fixed table refs in jdbcuserrealm. Fixed table refs in JDBCUserRealm. - + form authentication is serializable for session distribution. FORM - Authentication is serializable for session distribution. - + getauthtype maps the httpservletrequest final strings. getAuthType maps the + + allow params in form auth urls allow params in form auth urls allow pa allow + params in form auth urls allow params in form auth urls allow params in form + auth urls Allow params in form auth URLs + + allow query params in error page url. allow query params in error page allow + query params in error page url. allow query params in error page allow query + params in error page url. Allow query params in error page URL. + + apply the append flag of rolloverfileoutputstream constructor. apply t apply + the append flag of rolloverfileoutputstream constructor. apply t apply the + append flag of rolloverfileoutputstream constructor. Apply the append flag + of RolloverFileOutputStream constructor. + + fixed crlf bug in multipartrequest fixed crlf bug in multipartrequest fixed + crlf bug in multipartrequest fixed crlf bug in multipartrequest fixed crlf + bug in multipartrequest Fixed CRLF bug in MultiPartRequest + + fixed table refs in jdbcuserrealm. fixed table refs in jdbcuserrealm. fixed + table refs in jdbcuserrealm. fixed table refs in jdbcuserrealm. fixed table + refs in jdbcuserrealm. Fixed table refs in JDBCUserRealm. + + form authentication is serializable for session distribution. form for form + authentication is serializable for session distribution. form form + authentication is serializable for session distribution. FORM Authentication + is serializable for session distribution. + + getauthtype maps the httpservletrequest final strings. getauthtype map + getauthtype maps the httpservletrequest final strings. getauthtype map + getauthtype maps the httpservletrequest final strings. getAuthType maps the HttpServletRequest final strings. - + getauthtype returns client_cert instead of client-cert. getAuthType returns + + getauthtype returns client_cert instead of client-cert. getauthtype re + getauthtype returns client_cert instead of client-cert. getauthtype re + getauthtype returns client_cert instead of client-cert. getAuthType returns CLIENT_CERT instead of CLIENT-CERT. - + incorporate jetty extra and plus into build Incorporate jetty extra and plus + + incorporate jetty extra and plus into build incorporate jetty extra an + incorporate jetty extra and plus into build incorporate jetty extra an + incorporate jetty extra and plus into build Incorporate jetty extra and plus into build - + incorporate jettyplus jotm etc into build. Incorporate JettyPlus jotm etc + + incorporate jettyplus jotm etc into build. incorporate jettyplus jotm + incorporate jettyplus jotm etc into build. incorporate jettyplus jotm + incorporate jettyplus jotm etc into build. Incorporate JettyPlus jotm etc into build. - + integrate with jaas Integrate with JAAS - + massive reorg of the cvs tree. Massive reorg of the CVS tree. - + merge multivalued parameters in dispatcher. Merge multivalued parameters in + + integrate with jaas integrate with jaas integrate with jaas integrate + integrate with jaas integrate with jaas integrate with jaas Integrate with + JAAS + + massive reorg of the cvs tree. massive reorg of the cvs tree. massive + massive reorg of the cvs tree. massive reorg of the cvs tree. massive reorg + of the cvs tree. Massive reorg of the CVS tree. + + merge multivalued parameters in dispatcher. merge multivalued paramete merge + multivalued parameters in dispatcher. merge multivalued paramete merge + multivalued parameters in dispatcher. Merge multivalued parameters in dispatcher. - + moved log4jlogsink into jettyplus Moved Log4JLogSink into JettyPlus - + new look and feel for www site. New look and feel for www site. - + proxyhandler checks black and white lists for connect. ProxyHandler checks + + moved log4jlogsink into jettyplus moved log4jlogsink into jettyplus mo moved + log4jlogsink into jettyplus moved log4jlogsink into jettyplus moved + log4jlogsink into jettyplus Moved Log4JLogSink into JettyPlus + + new look and feel for www site. new look and feel for www site. new lo new + look and feel for www site. new look and feel for www site. new look and + feel for www site. New look and feel for www site. + + proxyhandler checks black and white lists for connect. proxyhandler ch + proxyhandler checks black and white lists for connect. proxyhandler ch + proxyhandler checks black and white lists for connect. ProxyHandler checks black and white lists for Connect. - + rolloverfileoutputstream manages rollover thread. RolloverFileOutputStream + + rolloverfileoutputstream manages rollover thread. rolloverfileoutputst + rolloverfileoutputstream manages rollover thread. rolloverfileoutputst + rolloverfileoutputstream manages rollover thread. RolloverFileOutputStream manages Rollover thread. - + updated to jasper jars from tomcat 4.1.24 Updated to jasper jars from tomcat + + updated to jasper jars from tomcat 4.1.24 updated to jasper jars from + updated to jasper jars from tomcat 4.1.24 updated to jasper jars from + updated to jasper jars from tomcat 4.1.24 Updated to jasper jars from tomcat 4.1.24 - + warn if max form content size is reached. Warn if max form content size is - reached. + + warn if max form content size is reached. warn if max form content siz warn + if max form content size is reached. warn if max form content siz warn if + max form content size is reached. Warn if max form content size is reached. jetty-4.2.9 - 19 March 2003 - + conditional headers check after /dir to /dir/ redirection. Conditional + + conditional headers check after /dir to /dir/ redirection. conditional + conditional headers check after /dir to /dir/ redirection. conditional + conditional headers check after /dir to /dir/ redirection. Conditional headers check after /dir to /dir/ redirection. jetty-4.2.9rc2 - 16 March 2003 - + added x-forwarded-for header in proxyhandler Added X-Forwarded-For header in + + added x-forwarded-for header in proxyhandler added x-forwarded-for hea added + x-forwarded-for header in proxyhandler added x-forwarded-for hea added + x-forwarded-for header in proxyhandler Added X-Forwarded-For header in ProxyHandler - + allow dispatch to j_security_check Allow dispatch to j_security_check - + defaults descriptor has context classloader set. Defaults descriptor has + + allow dispatch to j_security_check allow dispatch to j_security_check allow + dispatch to j_security_check allow dispatch to j_security_check allow + dispatch to j_security_check Allow dispatch to j_security_check + + defaults descriptor has context classloader set. defaults descriptor h + defaults descriptor has context classloader set. defaults descriptor h + defaults descriptor has context classloader set. Defaults descriptor has context classloader set. - + fixed build.xml for source release Fixed build.xml for source release - + made rfc2068 put/post continues support optional. Made rfc2068 PUT/POST - Continues support optional. - + updated included jmx jars Updated included jmx jars + + fixed build.xml for source release fixed build.xml for source release fixed + build.xml for source release fixed build.xml for source release fixed + build.xml for source release Fixed build.xml for source release + + made rfc2068 put/post continues support optional. made rfc2068 put/pos made + rfc2068 put/post continues support optional. made rfc2068 put/pos made + rfc2068 put/post continues support optional. Made rfc2068 PUT/POST Continues + support optional. + + updated included jmx jars updated included jmx jars updated included j + updated included jmx jars updated included jmx jars updated included jmx + jars Updated included jmx jars jetty-4.2.9rc1 - 06 March 2003 - + added requestlog to httpcontext. Added requestlog to HttpContext. - + added support for client certs to ajp13. Added support for client certs to - AJP13. - + added trust manager support to sunjsselistener. Added trust manager support - to SunJsseListener. - + allow delegated creation of webapplication derivations. Allow delegated - creation of WebApplication derivations. - + check data contraints before auth constraints Check Data contraints before - Auth constraints - + cleaned up includes Cleaned up includes - + dump servlet can load resources for testing now. Dump servlet can load - resources for testing now. - + optional 2.4 behaviour for sessiondestroyed notification. Optional 2.4 + + added requestlog to httpcontext. added requestlog to httpcontext. adde added + requestlog to httpcontext. added requestlog to httpcontext. added requestlog + to httpcontext. Added requestlog to HttpContext. + + added support for client certs to ajp13. added support for client cert added + support for client certs to ajp13. added support for client cert added + support for client certs to ajp13. Added support for client certs to AJP13. + + added trust manager support to sunjsselistener. added trust manager su added + trust manager support to sunjsselistener. added trust manager su added trust + manager support to sunjsselistener. Added trust manager support to + SunJsseListener. + + allow delegated creation of webapplication derivations. allow delegate allow + delegated creation of webapplication derivations. allow delegate allow + delegated creation of webapplication derivations. Allow delegated creation + of WebApplication derivations. + + check data contraints before auth constraints check data contraints be check + data contraints before auth constraints check data contraints be check data + contraints before auth constraints Check Data contraints before Auth + constraints + + cleaned up includes cleaned up includes cleaned up includes cleaned up + cleaned up includes cleaned up includes cleaned up includes Cleaned up + includes + + dump servlet can load resources for testing now. dump servlet can load dump + servlet can load resources for testing now. dump servlet can load dump + servlet can load resources for testing now. Dump servlet can load resources + for testing now. + + optional 2.4 behaviour for sessiondestroyed notification. optional 2.4 + optional 2.4 behaviour for sessiondestroyed notification. optional 2.4 + optional 2.4 behaviour for sessiondestroyed notification. Optional 2.4 behaviour for sessionDestroyed notification. - + proxyhandler has black and white host list. ProxyHandler has black and white + + proxyhandler has black and white host list. proxyhandler has black and + proxyhandler has black and white host list. proxyhandler has black and + proxyhandler has black and white host list. ProxyHandler has black and white host list. - + reduced default context cache sizes (total 1mb file 100kb). Reduced default + + reduced default context cache sizes (total 1mb file 100kb). reduced de + reduced default context cache sizes (total 1mb file 100kb). reduced de + reduced default context cache sizes (total 1mb file 100kb). Reduced default context cache sizes (Total 1MB file 100KB). - + removed checking for single valued headers. Removed checking for single + + removed checking for single valued headers. removed checking for singl + removed checking for single valued headers. removed checking for singl + removed checking for single valued headers. Removed checking for single valued headers. - + stop proxy url from doing user interaction. Stop proxy url from doing user - interaction. - + turn request log buffering off by default. Turn request log buffering off by + + stop proxy url from doing user interaction. stop proxy url from doing stop + proxy url from doing user interaction. stop proxy url from doing stop proxy + url from doing user interaction. Stop proxy url from doing user interaction. + + turn request log buffering off by default. turn request log buffering turn + request log buffering off by default. turn request log buffering turn + request log buffering off by default. Turn request log buffering off by default. - + work around urlclassloader not handling leading / Work around URLClassloader - not handling leading / + + work around urlclassloader not handling leading / work around urlclass work + around urlclassloader not handling leading / work around urlclass work + around urlclassloader not handling leading / Work around URLClassloader not + handling leading / jetty-4.2.8_01 - 18 February 2003 - + added a setresponseheadershandler, can set p3p headers etc. Added a + + added a setresponseheadershandler, can set p3p headers etc. added a ad added + a setresponseheadershandler, can set p3p headers etc. added a added a + setresponseheadershandler, can set p3p headers etc. Added a SetResponseHeadersHandler, can set P3P headers etc. - + added mbeans for servlets and filters Added MBeans for Servlets and Filters - + added option to resolve remote hostnames. defaults to off. Added option to + + added mbeans for servlets and filters added mbeans for servlets and fi added + mbeans for servlets and filters added mbeans for servlets and fi added + mbeans for servlets and filters Added MBeans for Servlets and Filters + + added option to resolve remote hostnames. defaults to off. added opti added + option to resolve remote hostnames. defaults to off. added opti added + option to resolve remote hostnames. defaults to off. Added option to resolve remote hostnames. Defaults to off. - + default servlet can have own resourcebase. Default servlet can have own + + default servlet can have own resourcebase. default servlet can have ow + default servlet can have own resourcebase. default servlet can have ow + default servlet can have own resourcebase. Default servlet can have own resourceBase. - + fixed adminservlet to handle changed getservletpath better. Fixed - AdminServlet to handle changed getServletPath better. - + fixed cgi servlet to handle multiple headers. Fixed CGI servlet to handle - multiple headers. - + moved proxyhandler to the src1.4 tree Moved ProxyHandler to the src1.4 tree - + patched first release of 4.2.8 with correct version number Patched first + + fixed adminservlet to handle changed getservletpath better. fixed fixe fixed + adminservlet to handle changed getservletpath better. fixed fixed + adminservlet to handle changed getservletpath better. Fixed AdminServlet to + handle changed getServletPath better. + + fixed cgi servlet to handle multiple headers. fixed cgi servlet to han fixed + cgi servlet to handle multiple headers. fixed cgi servlet to han fixed cgi + servlet to handle multiple headers. Fixed CGI servlet to handle multiple + headers. + + moved proxyhandler to the src1.4 tree moved proxyhandler to the src1.4 moved + proxyhandler to the src1.4 tree moved proxyhandler to the src1.4 moved + proxyhandler to the src1.4 tree Moved ProxyHandler to the src1.4 tree + + patched first release of 4.2.8 with correct version number patched fir + patched first release of 4.2.8 with correct version number patched fir + patched first release of 4.2.8 with correct version number Patched first release of 4.2.8 with correct version number - + proxyhandler can handle multiple cookies. ProxyHandler can handle multiple + + proxyhandler can handle multiple cookies. proxyhandler can handle mult + proxyhandler can handle multiple cookies. proxyhandler can handle mult + proxyhandler can handle multiple cookies. ProxyHandler can handle multiple cookies. - + rolled back socketchannellistener to 4.2.5 version Rolled back - SocketChannelListener to 4.2.5 version + + rolled back socketchannellistener to 4.2.5 version rolled back rolled + rolled back socketchannellistener to 4.2.5 version rolled back rolled back + socketchannellistener to 4.2.5 version Rolled back SocketChannelListener to + 4.2.5 version jetty-4.2.7 - 04 February 2003 - + changed pathmap to conform to / getservletpath handling. Changed PathMap to + + changed pathmap to conform to / getservletpath handling. changed pathm + changed pathmap to conform to / getservletpath handling. changed pathm + changed pathmap to conform to / getservletpath handling. Changed PathMap to conform to / getServletPath handling. - + fixed proxy tunnel for non persistent connections. Fixed proxy tunnel for - non persistent connections. - + relative sendredirect handles trailing / correctly. Relative sendRedirect + + fixed proxy tunnel for non persistent connections. fixed proxy tunnel fixed + proxy tunnel for non persistent connections. fixed proxy tunnel fixed proxy + tunnel for non persistent connections. Fixed proxy tunnel for non persistent + connections. + + relative sendredirect handles trailing / correctly. relative sendredir + relative sendredirect handles trailing / correctly. relative sendredir + relative sendredirect handles trailing / correctly. Relative sendRedirect handles trailing / correctly. - + upgraded to jsse 1.0.3_01 to fix security problem. Upgraded to JSSE 1.0.3_01 + + upgraded to jsse 1.0.3_01 to fix security problem. upgraded to jsse 1. + upgraded to jsse 1.0.3_01 to fix security problem. upgraded to jsse 1. + upgraded to jsse 1.0.3_01 to fix security problem. Upgraded to JSSE 1.0.3_01 to fix security problem. jetty-4.2.6 - 24 January 2003 - + added httpcontext.sethosts to restrict context by real interface. Added + + added httpcontext.sethosts to restrict context by real interface. adde added + httpcontext.sethosts to restrict context by real interface. adde added + httpcontext.sethosts to restrict context by real interface. Added HttpContext.setHosts to restrict context by real interface. - + added mbeans for session managers Added MBeans for session managers - + added version to httpservermbean. Added version to HttpServerMBean. - + allow ajp13 buffers to be resized. Allow AJP13 buffers to be resized. - + clientcertauthentication updates request. ClientCertAuthentication updates + + added mbeans for session managers added mbeans for session managers ad added + mbeans for session managers added mbeans for session managers added mbeans + for session managers Added MBeans for session managers + + added version to httpservermbean. added version to httpservermbean. ad added + version to httpservermbean. added version to httpservermbean. added version + to httpservermbean. Added version to HttpServerMBean. + + allow ajp13 buffers to be resized. allow ajp13 buffers to be resized. allow + ajp13 buffers to be resized. allow ajp13 buffers to be resized. allow ajp13 + buffers to be resized. Allow AJP13 buffers to be resized. + + clientcertauthentication updates request. clientcertauthentication upd + clientcertauthentication updates request. clientcertauthentication upd + clientcertauthentication updates request. ClientCertAuthentication updates request. - + fixed lineinput problem with expanded buffers. Fixed LineInput problem with + + fixed lineinput problem with expanded buffers. fixed lineinput problem fixed + lineinput problem with expanded buffers. fixed lineinput problem fixed + lineinput problem with expanded buffers. Fixed LineInput problem with expanded buffers. - + fixed rel sendredirects for root context. Fixed rel sendRedirects for root - context. - + improved socketchannellistener contributed. Improved SocketChannelListener + + fixed rel sendredirects for root context. fixed rel sendredirects for fixed + rel sendredirects for root context. fixed rel sendredirects for fixed rel + sendredirects for root context. Fixed rel sendRedirects for root context. + + improved socketchannellistener contributed. improved socketchannellist + improved socketchannellistener contributed. improved socketchannellist + improved socketchannellistener contributed. Improved SocketChannelListener contributed. - + improved synchronization on abstractsessionmanager. Improved synchronization + + improved synchronization on abstractsessionmanager. improved synchroni + improved synchronization on abstractsessionmanager. improved synchroni + improved synchronization on abstractsessionmanager. Improved synchronization on AbstractSessionManager. jetty-4.2.5 - 14 January 2003 - + added log4jsink in the contrib directory. Added Log4jSink in the contrib + + added log4jsink in the contrib directory. added log4jsink in the contr added + log4jsink in the contrib directory. added log4jsink in the contr added + log4jsink in the contrib directory. Added Log4jSink in the contrib directory. - + don't process conditional headers and ranges for includes Don't process + + don't process conditional headers and ranges for includes don't proces don't + process conditional headers and ranges for includes don't proces don't + process conditional headers and ranges for includes Don't process conditional headers and ranges for includes - + fixed pathparam bug for ;jsessionid Fixed pathParam bug for ;jsessionid - + fixed requestedsessionid null bug. Fixed requestedSessionId null bug. + + fixed pathparam bug for ;jsessionid fixed pathparam bug for ;jsessioni fixed + pathparam bug for ;jsessionid fixed pathparam bug for ;jsessioni fixed + pathparam bug for ;jsessionid Fixed pathParam bug for ;jsessionid + + fixed requestedsessionid null bug. fixed requestedsessionid null bug. fixed + requestedsessionid null bug. fixed requestedsessionid null bug. fixed + requestedsessionid null bug. Fixed requestedSessionId null bug. jetty-4.2.4 - 04 January 2003 - + added mbeans for handlers Added MBeans for handlers - + clear context attributes after stop. Clear context attributes after stop. - + clear context listeners after stop. Clear context listeners after stop. - + fixed stop/start handling of servlet context Fixed stop/start handling of - servlet context - + htaccesshandler checks realm as well as htpassword. HTAccessHandler checks + + added mbeans for handlers added mbeans for handlers added mbeans for added + mbeans for handlers added mbeans for handlers added mbeans for handlers + Added MBeans for handlers + + clear context attributes after stop. clear context attributes after st clear + context attributes after stop. clear context attributes after st clear + context attributes after stop. Clear context attributes after stop. + + clear context listeners after stop. clear context listeners after stop clear + context listeners after stop. clear context listeners after stop clear + context listeners after stop. Clear context listeners after stop. + + fixed stop/start handling of servlet context fixed stop/start handling fixed + stop/start handling of servlet context fixed stop/start handling fixed + stop/start handling of servlet context Fixed stop/start handling of servlet + context + + htaccesshandler checks realm as well as htpassword. htaccesshandler ch + htaccesshandler checks realm as well as htpassword. htaccesshandler ch + htaccesshandler checks realm as well as htpassword. HTAccessHandler checks realm as well as htpassword. - + reuse empty logsink slots. Reuse empty LogSink slots. - + upgraded jasper to 4.1.18 Upgraded jasper to 4.1.18 - + use requestedsessionid as default session id. Use requestedSessionId as - default session ID. + + reuse empty logsink slots. reuse empty logsink slots. reuse empty logs reuse + empty logsink slots. reuse empty logsink slots. reuse empty logsink slots. + Reuse empty LogSink slots. + + upgraded jasper to 4.1.18 upgraded jasper to 4.1.18 upgraded jasper to + upgraded jasper to 4.1.18 upgraded jasper to 4.1.18 upgraded jasper to + 4.1.18 Upgraded jasper to 4.1.18 + + use requestedsessionid as default session id. use requestedsessionid a use + requestedsessionid as default session id. use requestedsessionid a use + requestedsessionid as default session id. Use requestedSessionId as default + session ID. jetty-4.2.4rc0 - 12 December 2002 - + added gzip content encoding support to default and resourcehandler Added - gzip content encoding support to Default and ResourceHandler - + added httpcontext.flushcache Added HttpContext.flushCache - + allow empty host header. Allow empty host header. - + avoid optional 100 continues. Avoid optional 100 continues. - + better access to session manager. Better access to session manager. - + character encoding handling for get requests. Character encoding handling + + added gzip content encoding support to default and resourcehandler add added + gzip content encoding support to default and resourcehandler add added gzip + content encoding support to default and resourcehandler Added gzip content + encoding support to Default and ResourceHandler + + added httpcontext.flushcache added httpcontext.flushcache added added + httpcontext.flushcache added httpcontext.flushcache added + httpcontext.flushcache Added HttpContext.flushCache + + allow empty host header. allow empty host header. allow empty host hea allow + empty host header. allow empty host header. allow empty host header. Allow + empty host header. + + avoid optional 100 continues. avoid optional 100 continues. avoid opti avoid + optional 100 continues. avoid optional 100 continues. avoid optional 100 + continues. Avoid optional 100 continues. + + better access to session manager. better access to session manager. be + better access to session manager. better access to session manager. better + access to session manager. Better access to session manager. + + character encoding handling for get requests. character encoding handl + character encoding handling for get requests. character encoding handl + character encoding handling for get requests. Character encoding handling for GET requests. - + cheap clear for httpfields Cheap clear for HttpFields - + cleaned up some unused listener throws. Cleaned up some unused listener + + cheap clear for httpfields cheap clear for httpfields cheap clear for cheap + clear for httpfields cheap clear for httpfields cheap clear for httpfields + Cheap clear for HttpFields + + cleaned up some unused listener throws. cleaned up some unused listene + cleaned up some unused listener throws. cleaned up some unused listene + cleaned up some unused listener throws. Cleaned up some unused listener throws. - + code logs objects rather than strings. Code logs objects rather than - strings. - + configurable root context. Configurable root context. - + dir listings in utf8 Dir listings in UTF8 - + fixed dir listing from jars. Fixed dir listing from jars. - + fixed issecure and getscheme for ssl over ajp13 Fixed isSecure and getScheme - for SSL over AJP13 - + fixed setbuffersize npe. Fixed setBufferSize NPE. - + handle = in param values. Handle = in param values. - + handle chunked form data. Handle chunked form data. - + implemented rfc2817 connect in proxyhandler Implemented RFC2817 CONNECT in + + code logs objects rather than strings. code logs objects rather than c code + logs objects rather than strings. code logs objects rather than code logs + objects rather than strings. Code logs objects rather than strings. + + configurable root context. configurable root context. configurable roo + configurable root context. configurable root context. configurable root + context. Configurable root context. + + dir listings in utf8 dir listings in utf8 dir listings in utf8 dir lis dir + listings in utf8 dir listings in utf8 dir listings in utf8 Dir listings in + UTF8 + + fixed dir listing from jars. fixed dir listing from jars. fixed dir li fixed + dir listing from jars. fixed dir listing from jars. fixed dir listing from + jars. Fixed dir listing from jars. + + fixed issecure and getscheme for ssl over ajp13 fixed issecure and get fixed + issecure and getscheme for ssl over ajp13 fixed issecure and get fixed + issecure and getscheme for ssl over ajp13 Fixed isSecure and getScheme for + SSL over AJP13 + + fixed setbuffersize npe. fixed setbuffersize npe. fixed setbuffersize fixed + setbuffersize npe. fixed setbuffersize npe. fixed setbuffersize npe. Fixed + setBufferSize NPE. + + handle = in param values. handle = in param values. handle = in param handle + = in param values. handle = in param values. handle = in param values. + Handle = in param values. + + handle chunked form data. handle chunked form data. handle chunked for + handle chunked form data. handle chunked form data. handle chunked form + data. Handle chunked form data. + + implemented rfc2817 connect in proxyhandler implemented rfc2817 connec + implemented rfc2817 connect in proxyhandler implemented rfc2817 connec + implemented rfc2817 connect in proxyhandler Implemented RFC2817 CONNECT in ProxyHandler - + improved proxyhandler to the point is works well for non ssl. Improved + + improved proxyhandler to the point is works well for non ssl. improved + improved proxyhandler to the point is works well for non ssl. improved + improved proxyhandler to the point is works well for non ssl. Improved ProxyHandler to the point is works well for non SSL. - + improved setbuffersize handling Improved setBufferSize handling - + limit form content size. Limit form content size. - + removed container transfer encoding handling. Removed container transfer + + improved setbuffersize handling improved setbuffersize handling improv + improved setbuffersize handling improved setbuffersize handling improved + setbuffersize handling Improved setBufferSize handling + + limit form content size. limit form content size. limit form content s limit + form content size. limit form content size. limit form content size. Limit + form content size. + + removed container transfer encoding handling. removed container transf + removed container transfer encoding handling. removed container transf + removed container transfer encoding handling. Removed container transfer encoding handling. - + rootnotfoundhandler to help when no context found. RootNotFoundHandler to + + rootnotfoundhandler to help when no context found. rootnotfoundhandler + rootnotfoundhandler to help when no context found. rootnotfoundhandler + rootnotfoundhandler to help when no context found. RootNotFoundHandler to help when no context found. - + simplified threadedserver Simplified ThreadedServer - + update jasper to 4.1.16beta Update jasper to 4.1.16beta - + use threadlocals for bytearraypool to avoid synchronization. Use - ThreadLocals for ByteArrayPool to avoid synchronization. - + use version to reset httpfields Use Version to reset HttpFields + + simplified threadedserver simplified threadedserver simplified simplified + threadedserver simplified threadedserver simplified threadedserver + Simplified ThreadedServer + + update jasper to 4.1.16beta update jasper to 4.1.16beta update jasper + update jasper to 4.1.16beta update jasper to 4.1.16beta update jasper to + 4.1.16beta Update jasper to 4.1.16beta + + use threadlocals for bytearraypool to avoid synchronization. use use use + threadlocals for bytearraypool to avoid synchronization. use use + threadlocals for bytearraypool to avoid synchronization. Use ThreadLocals + for ByteArrayPool to avoid synchronization. + + use version to reset httpfields use version to reset httpfields use ve use + version to reset httpfields use version to reset httpfields use version to + reset httpfields Use Version to reset HttpFields jetty-4.2.3 - 02 December 2002 - + added links to jetty powered page Added links to Jetty Powered page - + added main() to org.mortbay.http.version added main() to - org.mortbay.http.Version - + added pkcs12import class to import pkcs12 key directly Added PKCS12Import - class to import PKCS12 key directly - + check form authentication config for leading / Check form authentication - config for leading / - + cleaner servlet stop to avoid extra synchronization on handle Cleaner + + added links to jetty powered page added links to jetty powered page ad added + links to jetty powered page added links to jetty powered page added links to + jetty powered page Added links to Jetty Powered page + + added main() to org.mortbay.http.version added main() to added main() added + main() to org.mortbay.http.version added main() to added main() to + org.mortbay.http.version added main() to org.mortbay.http.Version + + added pkcs12import class to import pkcs12 key directly added pkcs12imp added + pkcs12import class to import pkcs12 key directly added pkcs12imp added + pkcs12import class to import pkcs12 key directly Added PKCS12Import class to + import PKCS12 key directly + + check form authentication config for leading / check form authenticati check + form authentication config for leading / check form authenticati check form + authentication config for leading / Check form authentication config for + leading / + + cleaner servlet stop to avoid extra synchronization on handle cleaner + cleaner servlet stop to avoid extra synchronization on handle cleaner + cleaner servlet stop to avoid extra synchronization on handle Cleaner servlet stop to avoid extra synchronization on handle - + clean up of threadedserver.stop() Clean up of ThreadedServer.stop() - + fixed some typos Fixed some typos + + clean up of threadedserver.stop() clean up of threadedserver.stop() cl clean + up of threadedserver.stop() clean up of threadedserver.stop() clean up of + threadedserver.stop() Clean up of ThreadedServer.stop() + + fixed some typos fixed some typos fixed some typos fixed some typos fixed + some typos fixed some typos fixed some typos Fixed some typos + org.mortbay.http.httpcontext.fileclasspathattribute + org.mortbay.http.httpcontext.fileclasspathattribute + org.mortbay.http.httpcontext.fileclasspathattribute org.mortbay.http.HttpContext.FileClassPathAttribute + removed aggressive threadpool shrinkage to avoid deadlock on smp machi + removed aggressive threadpool shrinkage to avoid deadlock on smp machi + removed aggressive threadpool shrinkage to avoid deadlock on smp machi Removed aggressive threadpool shrinkage to avoid deadlock on SMP machines. - + removed old httpcontext.setdirallowed() removed old - HttpContext.setDirAllowed() - + updated bat scripts Updated bat scripts + + removed old httpcontext.setdirallowed() removed old removed old removed old + httpcontext.setdirallowed() removed old removed old + httpcontext.setdirallowed() removed old HttpContext.setDirAllowed() + + updated bat scripts updated bat scripts updated bat scripts updated ba + updated bat scripts updated bat scripts updated bat scripts Updated bat + scripts jetty-4.2.2 - 20 November 2002 - + added eofexception to reduce log verbosity on closed connections. Added + + added eofexception to reduce log verbosity on closed connections. adde added + eofexception to reduce log verbosity on closed connections. adde added + eofexception to reduce log verbosity on closed connections. Added EOFException to reduce log verbosity on closed connections. - + avoided bad buffer status after closed connection. Avoided bad buffer status + + avoided bad buffer status after closed connection. avoided bad buffer + avoided bad buffer status after closed connection. avoided bad buffer + avoided bad buffer status after closed connection. Avoided bad buffer status after closed connection. - + fixed handling of empty headers Fixed handling of empty headers - + fixed sendredirect for non http urls Fixed sendRedirect for non http URLS - + fixed uri query recycling for persistent connections Fixed URI query - recycling for persistent connections + + fixed handling of empty headers fixed handling of empty headers fixed fixed + handling of empty headers fixed handling of empty headers fixed handling of + empty headers Fixed handling of empty headers + + fixed sendredirect for non http urls fixed sendredirect for non http u fixed + sendredirect for non http urls fixed sendredirect for non http u fixed + sendredirect for non http urls Fixed sendRedirect for non http URLS + + fixed uri query recycling for persistent connections fixed uri query f fixed + uri query recycling for persistent connections fixed uri query fixed uri + query recycling for persistent connections Fixed URI query recycling for + persistent connections jetty-4.2.1 - 18 November 2002 - + fixed bad optimization in urlencoding Fixed bad optimization in UrlEncoding - + re-enabled urlencoding test harnesses Re-enabled UrlEncoding test harnesses + + fixed bad optimization in urlencoding fixed bad optimization in urlenc fixed + bad optimization in urlencoding fixed bad optimization in urlenc fixed bad + optimization in urlencoding Fixed bad optimization in UrlEncoding + + re-enabled urlencoding test harnesses re-enabled urlencoding test harn + re-enabled urlencoding test harnesses re-enabled urlencoding test harn + re-enabled urlencoding test harnesses Re-enabled UrlEncoding test harnesses jetty-4.2.0 - 16 November 2002 - + added definitions for rfc2518 webdav response codes. Added definitions for - RFC2518 WebDav response codes. - + added upload demo to dump servlet. Added upload demo to dump servlet. - + fixed ajp13 buffer size. Fixed AJP13 buffer size. - + fixed include of invoker servlet. Fixed include of Invoker servlet. - + fixed remove listener bug. Fixed remove listener bug. - + lowercase jsessionid for urls only. Lowercase jsessionid for URLs only. - + made ncsarequestlog easier to extend. Made NCSARequestLog easier to extend. - + many more optimizations. Many more optimizations. - + removed jasper source and just include jars from 4.1.12 Removed jasper + + added definitions for rfc2518 webdav response codes. added definitions added + definitions for rfc2518 webdav response codes. added definitions added + definitions for rfc2518 webdav response codes. Added definitions for RFC2518 + WebDav response codes. + + added upload demo to dump servlet. added upload demo to dump servlet. added + upload demo to dump servlet. added upload demo to dump servlet. added upload + demo to dump servlet. Added upload demo to dump servlet. + + fixed ajp13 buffer size. fixed ajp13 buffer size. fixed ajp13 buffer s fixed + ajp13 buffer size. fixed ajp13 buffer size. fixed ajp13 buffer size. Fixed + AJP13 buffer size. + + fixed include of invoker servlet. fixed include of invoker servlet. fi fixed + include of invoker servlet. fixed include of invoker servlet. fixed include + of invoker servlet. Fixed include of Invoker servlet. + + fixed remove listener bug. fixed remove listener bug. fixed remove lis fixed + remove listener bug. fixed remove listener bug. fixed remove listener bug. + Fixed remove listener bug. + + lowercase jsessionid for urls only. lowercase jsessionid for urls only + lowercase jsessionid for urls only. lowercase jsessionid for urls only + lowercase jsessionid for urls only. Lowercase jsessionid for URLs only. + + made ncsarequestlog easier to extend. made ncsarequestlog easier to ex made + ncsarequestlog easier to extend. made ncsarequestlog easier to ex made + ncsarequestlog easier to extend. Made NCSARequestLog easier to extend. + + many more optimizations. many more optimizations. many more optimizati many + more optimizations. many more optimizations. many more optimizations. Many + more optimizations. + + removed jasper source and just include jars from 4.1.12 removed jasper + removed jasper source and just include jars from 4.1.12 removed jasper + removed jasper source and just include jars from 4.1.12 Removed jasper source and just include jars from 4.1.12 - + removed remaining non portable getbytes() calls Removed remaining non + + removed remaining non portable getbytes() calls removed remaining non + removed remaining non portable getbytes() calls removed remaining non + removed remaining non portable getbytes() calls Removed remaining non portable getBytes() calls - + restrict 304 responses to seconds time resolution. Restrict 304 responses to + + restrict 304 responses to seconds time resolution. restrict 304 respon + restrict 304 responses to seconds time resolution. restrict 304 respon + restrict 304 responses to seconds time resolution. Restrict 304 responses to seconds time resolution. - + use ie date formatting for speed. Use IE date formatting for speed. - + worked around jvm1.3 bug for jsps Worked around JVM1.3 bug for JSPs + + use ie date formatting for speed. use ie date formatting for speed. us use + ie date formatting for speed. use ie date formatting for speed. use ie date + formatting for speed. Use IE date formatting for speed. + + worked around jvm1.3 bug for jsps worked around jvm1.3 bug for jsps wo + worked around jvm1.3 bug for jsps worked around jvm1.3 bug for jsps worked + around jvm1.3 bug for jsps Worked around JVM1.3 bug for JSPs jetty-4.1.4 - 16 November 2002 - + fixed contextloader parent delegation bug Fixed ContextLoader parent - delegation bug - + fixed invoker servlet for rd.include Fixed Invoker servlet for RD.include - + fixed remove socketlistener bug. Fixed remove SocketListener bug. - + last modified handling uses second resolution. Last modified handling uses - second resolution. - + made ncsarequestlog simpler to extend. Made NCSARequestLog simpler to - extend. - + use ie date formatting for last-modified efficiency Use IE date formatting - for last-modified efficiency + + fixed contextloader parent delegation bug fixed contextloader parent f fixed + contextloader parent delegation bug fixed contextloader parent fixed + contextloader parent delegation bug Fixed ContextLoader parent delegation + bug + + fixed invoker servlet for rd.include fixed invoker servlet for rd.incl fixed + invoker servlet for rd.include fixed invoker servlet for rd.incl fixed + invoker servlet for rd.include Fixed Invoker servlet for RD.include + + fixed remove socketlistener bug. fixed remove socketlistener bug. fixe fixed + remove socketlistener bug. fixed remove socketlistener bug. fixed remove + socketlistener bug. Fixed remove SocketListener bug. + + last modified handling uses second resolution. last modified handling last + modified handling uses second resolution. last modified handling last + modified handling uses second resolution. Last modified handling uses second + resolution. + + made ncsarequestlog simpler to extend. made ncsarequestlog simpler to made + ncsarequestlog simpler to extend. made ncsarequestlog simpler to made + ncsarequestlog simpler to extend. Made NCSARequestLog simpler to extend. + + use ie date formatting for last-modified efficiency use ie date format use + ie date formatting for last-modified efficiency use ie date format use ie + date formatting for last-modified efficiency Use IE date formatting for + last-modified efficiency jetty-4.2.0rc1 - 02 November 2002 - + fixed contextloader parent delegation bug. Fixed ContextLoader parent - delegation bug. - + fixed directory resource bug in jarfileresource. Fixed directory resource - bug in JarFileResource. - + fixed firstwrite after commit. Fixed firstWrite after commit. - + fixed problem setting the size of chunked buffers. Fixed problem setting the - size of chunked buffers. - + fixed servletpath on invoker for named servlets. Fixed servletpath on - invoker for named servlets. - + improved handling of 2 byte encoded characters within forms. Improved + + fixed contextloader parent delegation bug. fixed contextloader parent fixed + contextloader parent delegation bug. fixed contextloader parent fixed + contextloader parent delegation bug. Fixed ContextLoader parent delegation + bug. + + fixed directory resource bug in jarfileresource. fixed directory resou fixed + directory resource bug in jarfileresource. fixed directory resou fixed + directory resource bug in jarfileresource. Fixed directory resource bug in + JarFileResource. + + fixed firstwrite after commit. fixed firstwrite after commit. fixed fixed + firstwrite after commit. fixed firstwrite after commit. fixed firstwrite + after commit. Fixed firstWrite after commit. + + fixed problem setting the size of chunked buffers. fixed problem setti fixed + problem setting the size of chunked buffers. fixed problem setti fixed + problem setting the size of chunked buffers. Fixed problem setting the size + of chunked buffers. + + fixed servletpath on invoker for named servlets. fixed servletpath on fixed + servletpath on invoker for named servlets. fixed servletpath on fixed + servletpath on invoker for named servlets. Fixed servletpath on invoker for + named servlets. + + improved handling of 2 byte encoded characters within forms. improved + improved handling of 2 byte encoded characters within forms. improved + improved handling of 2 byte encoded characters within forms. Improved handling of 2 byte encoded characters within forms. - + recycling of httpfields class. Recycling of HttpFields class. - + removed unused servlet and servlet-engine headers. Removed unused Servlet + + recycling of httpfields class. recycling of httpfields class. recyclin + recycling of httpfields class. recycling of httpfields class. recycling of + httpfields class. Recycling of HttpFields class. + + removed unused servlet and servlet-engine headers. removed unused serv + removed unused servlet and servlet-engine headers. removed unused serv + removed unused servlet and servlet-engine headers. Removed unused Servlet and Servlet-Engine headers. - + renamed filter application methods. Renamed Filter application methods. - + support default mime mapping defined by * Support default mime mapping + + renamed filter application methods. renamed filter application methods + renamed filter application methods. renamed filter application methods + renamed filter application methods. Renamed Filter application methods. + + support default mime mapping defined by * support default mime mapping + support default mime mapping defined by * support default mime mapping + support default mime mapping defined by * Support default mime mapping defined by * jetty-4.2.0rc0 - 24 October 2002 - + added authenticator to admin.xml Added authenticator to admin.xml - + added embedded iso8859 writer to httpoutputstream. Added embedded iso8859 - writer to HttpOutputStream. - + fixed rolloverfileoutputstream without date. Fixed RolloverFileOutputStream + + added authenticator to admin.xml added authenticator to admin.xml adde added + authenticator to admin.xml added authenticator to admin.xml added + authenticator to admin.xml Added authenticator to admin.xml + + added embedded iso8859 writer to httpoutputstream. added embedded iso8 added + embedded iso8859 writer to httpoutputstream. added embedded iso8 added + embedded iso8859 writer to httpoutputstream. Added embedded iso8859 writer + to HttpOutputStream. + + fixed rolloverfileoutputstream without date. fixed rolloverfileoutputs fixed + rolloverfileoutputstream without date. fixed rolloverfileoutputs fixed + rolloverfileoutputstream without date. Fixed RolloverFileOutputStream without date. - + fixed sessionmanager initialization Fixed SessionManager initialization - + fixed session timeout npe. Fixed Session timeout NPE. - + greg's birthday release! Greg's birthday release! - + removed duplicate classes from jar Removed duplicate classes from jar + + fixed sessionmanager initialization fixed sessionmanager initializatio fixed + sessionmanager initialization fixed sessionmanager initializatio fixed + sessionmanager initialization Fixed SessionManager initialization + + fixed session timeout npe. fixed session timeout npe. fixed session ti fixed + session timeout npe. fixed session timeout npe. fixed session timeout npe. + Fixed Session timeout NPE. + + greg's birthday release! greg's birthday release! greg's birthday rele + greg's birthday release! greg's birthday release! greg's birthday release! + Greg's birthday release! + + removed duplicate classes from jar removed duplicate classes from jar + removed duplicate classes from jar removed duplicate classes from jar + removed duplicate classes from jar Removed duplicate classes from jar jetty-4.1.3 - 24 October 2002 - + added authenticator to admin.xml Added authenticator to admin.xml - + fixed rolloverfileoutputstream without date. Fixed RolloverFileOutputStream + + added authenticator to admin.xml added authenticator to admin.xml adde added + authenticator to admin.xml added authenticator to admin.xml added + authenticator to admin.xml Added authenticator to admin.xml + + fixed rolloverfileoutputstream without date. fixed rolloverfileoutputs fixed + rolloverfileoutputstream without date. fixed rolloverfileoutputs fixed + rolloverfileoutputstream without date. Fixed RolloverFileOutputStream without date. - + fixed sessionmanager initialization Fixed SessionManager initialization - + fixed session timeout npe. Fixed Session timeout NPE. + + fixed sessionmanager initialization fixed sessionmanager initializatio fixed + sessionmanager initialization fixed sessionmanager initializatio fixed + sessionmanager initialization Fixed SessionManager initialization + + fixed session timeout npe. fixed session timeout npe. fixed session ti fixed + session timeout npe. fixed session timeout npe. fixed session timeout npe. + Fixed Session timeout NPE. jetty-4.0.6 - 24 October 2002 - + clear interrupted status in threadpool Clear interrupted status in - ThreadPool - + fixed forward attribute handling for jsp-file servlets fixed forward - attribute handling for jsp-file servlets - + fixed forward query string handling Fixed forward query string handling - + fixed handling of relative sendredirect after forward. Fixed handling of - relative sendRedirect after forward. - + fixed setcharacterencoding to work with getreader Fixed setCharacterEncoding - to work with getReader - + fixed virtual hosts temp directories. Fixed virtual hosts temp directories. + + clear interrupted status in threadpool clear interrupted status in cle clear + interrupted status in threadpool clear interrupted status in clear + interrupted status in threadpool Clear interrupted status in ThreadPool + + fixed forward attribute handling for jsp-file servlets fixed forward f fixed + forward attribute handling for jsp-file servlets fixed forward fixed forward + attribute handling for jsp-file servlets fixed forward attribute handling + for jsp-file servlets + + fixed forward query string handling fixed forward query string handlin fixed + forward query string handling fixed forward query string handlin fixed + forward query string handling Fixed forward query string handling + + fixed handling of relative sendredirect after forward. fixed handling fixed + handling of relative sendredirect after forward. fixed handling fixed + handling of relative sendredirect after forward. Fixed handling of relative + sendRedirect after forward. + + fixed setcharacterencoding to work with getreader fixed setcharacteren fixed + setcharacterencoding to work with getreader fixed setcharacteren fixed + setcharacterencoding to work with getreader Fixed setCharacterEncoding to + work with getReader + + fixed virtual hosts temp directories. fixed virtual hosts temp directo fixed + virtual hosts temp directories. fixed virtual hosts temp directo fixed + virtual hosts temp directories. Fixed virtual hosts temp directories. jetty-4.2.0beta0 - 13 October 2002 + 404 instead of 403 for WEB-INF requests - + allow %3b encoded ; in urls Allow %3B encoded ; in URLs - + allow anonymous realm Allow anonymous realm - + build without jmx Build without jmx - + fixed bad log dir detection Fixed bad log dir detection - + fixed caching of directories to avoid shared buffers. Fixed caching of - directories to avoid shared buffers. - + fix session invalidation bug Fix Session invalidation bug - + form authentication sets 403 error page FORM authentication sets 403 error - page + + allow %3b encoded ; in urls allow %3b encoded ; in urls allow %3b enco allow + %3b encoded ; in urls allow %3b encoded ; in urls allow %3b encoded ; in + urls Allow %3B encoded ; in URLs + + allow anonymous realm allow anonymous realm allow anonymous realm allo allow + anonymous realm allow anonymous realm allow anonymous realm Allow anonymous + realm + + build without jmx build without jmx build without jmx build without jm build + without jmx build without jmx build without jmx Build without jmx + + fixed bad log dir detection fixed bad log dir detection fixed bad log fixed + bad log dir detection fixed bad log dir detection fixed bad log dir + detection Fixed bad log dir detection + + fixed caching of directories to avoid shared buffers. fixed caching of fixed + caching of directories to avoid shared buffers. fixed caching of fixed + caching of directories to avoid shared buffers. Fixed caching of directories + to avoid shared buffers. + + fix session invalidation bug fix session invalidation bug fix session fix + session invalidation bug fix session invalidation bug fix session + invalidation bug Fix Session invalidation bug + + form authentication sets 403 error page form authentication sets 403 e form + authentication sets 403 error page form authentication sets 403 e form + authentication sets 403 error page FORM authentication sets 403 error page + getnameddispatcher(null) returns containers default servlet. + getnameddispatcher(null) returns containers default servlet. + getnameddispatcher(null) returns containers default servlet. getNamedDispatcher(null) returns containers default servlet. - + new ajp13 implementation. New AJP13 implementation. - + new buffering implementation. New Buffering implementation. - + new threadpool implementation. New ThreadPool implementation. - + removed dispatcher dependancy on servlethttpcontext Removed Dispatcher + + new ajp13 implementation. new ajp13 implementation. new ajp13 new ajp13 + implementation. new ajp13 implementation. new ajp13 implementation. New + AJP13 implementation. + + new buffering implementation. new buffering implementation. new buffer new + buffering implementation. new buffering implementation. new buffering + implementation. New Buffering implementation. + + new threadpool implementation. new threadpool implementation. new thre new + threadpool implementation. new threadpool implementation. new threadpool + implementation. New ThreadPool implementation. + + removed dispatcher dependancy on servlethttpcontext removed dispatcher + removed dispatcher dependancy on servlethttpcontext removed dispatcher + removed dispatcher dependancy on servlethttpcontext Removed Dispatcher dependancy on ServletHttpContext - + stop/start filters in declaration order. Stop/Start filters in declaration + + stop/start filters in declaration order. stop/start filters in declara + stop/start filters in declaration order. stop/start filters in declara + stop/start filters in declaration order. Stop/Start filters in declaration order. - + unquote charset in content type unquote charset in content type - + update jasper to 4.1.12 tag Update jasper to 4.1.12 tag - + use "standard" names for default,jsp & invoker servlets. Use "standard" - names for default,jsp & invoker servlets. + + unquote charset in content type unquote charset in content type unquot + unquote charset in content type unquote charset in content type unquote + charset in content type unquote charset in content type + + update jasper to 4.1.12 tag update jasper to 4.1.12 tag update jasper + update jasper to 4.1.12 tag update jasper to 4.1.12 tag update jasper to + 4.1.12 tag Update jasper to 4.1.12 tag + + use "standard" names for default,jsp & invoker servlets. use "standard use + "standard" names for default,jsp & invoker servlets. use "standard use + "standard" names for default,jsp & invoker servlets. Use "standard" names + for default,jsp & invoker servlets. jetty-4.1.2 - 13 October 2002 + 404 instead of 403 for WEB-INF requests - + allow %3b encoded ; in urls Allow %3B encoded ; in URLs - + allow anonymous realm Allow anonymous realm - + build without jmx Build without jmx - + fixed bad log dir detection Fixed bad log dir detection - + fixed caching of directories to avoid shared buffers. Fixed caching of - directories to avoid shared buffers. - + fix session invalidation bug Fix Session invalidation bug - + form authentication sets 403 error page FORM authentication sets 403 error - page + + allow %3b encoded ; in urls allow %3b encoded ; in urls allow %3b enco allow + %3b encoded ; in urls allow %3b encoded ; in urls allow %3b encoded ; in + urls Allow %3B encoded ; in URLs + + allow anonymous realm allow anonymous realm allow anonymous realm allo allow + anonymous realm allow anonymous realm allow anonymous realm Allow anonymous + realm + + build without jmx build without jmx build without jmx build without jm build + without jmx build without jmx build without jmx Build without jmx + + fixed bad log dir detection fixed bad log dir detection fixed bad log fixed + bad log dir detection fixed bad log dir detection fixed bad log dir + detection Fixed bad log dir detection + + fixed caching of directories to avoid shared buffers. fixed caching of fixed + caching of directories to avoid shared buffers. fixed caching of fixed + caching of directories to avoid shared buffers. Fixed caching of directories + to avoid shared buffers. + + fix session invalidation bug fix session invalidation bug fix session fix + session invalidation bug fix session invalidation bug fix session + invalidation bug Fix Session invalidation bug + + form authentication sets 403 error page form authentication sets 403 e form + authentication sets 403 error page form authentication sets 403 e form + authentication sets 403 error page FORM authentication sets 403 error page + getnameddispatcher(null) returns containers default servlet. + getnameddispatcher(null) returns containers default servlet. + getnameddispatcher(null) returns containers default servlet. getNamedDispatcher(null) returns containers default servlet. - + some ajp13 optimizations. Some AJP13 optimizations. - + stop/start filters in declaration order. Stop/Start filters in declaration + + some ajp13 optimizations. some ajp13 optimizations. some ajp13 some ajp13 + optimizations. some ajp13 optimizations. some ajp13 optimizations. Some + AJP13 optimizations. + + stop/start filters in declaration order. stop/start filters in declara + stop/start filters in declaration order. stop/start filters in declara + stop/start filters in declaration order. Stop/Start filters in declaration order. - + unquote charset in content type unquote charset in content type - + update jasper to 4.1.12 tag Update jasper to 4.1.12 tag - + use "standard" names for default,jsp & invoker servlets. Use "standard" - names for default,jsp & invoker servlets. + + unquote charset in content type unquote charset in content type unquot + unquote charset in content type unquote charset in content type unquote + charset in content type unquote charset in content type + + update jasper to 4.1.12 tag update jasper to 4.1.12 tag update jasper + update jasper to 4.1.12 tag update jasper to 4.1.12 tag update jasper to + 4.1.12 tag Update jasper to 4.1.12 tag + + use "standard" names for default,jsp & invoker servlets. use "standard use + "standard" names for default,jsp & invoker servlets. use "standard use + "standard" names for default,jsp & invoker servlets. Use "standard" names + for default,jsp & invoker servlets. jetty-4.1.1 - 30 September 2002 - + avoid setting sotimeout for optimization. Avoid setting sotimeout for + + avoid setting sotimeout for optimization. avoid setting sotimeout for avoid + setting sotimeout for optimization. avoid setting sotimeout for avoid + setting sotimeout for optimization. Avoid setting sotimeout for optimization. - + cache directory listings. Cache directory listings. - + deprecated maxreadtime. Deprecated maxReadTime. - + fixed client scripting vulnerability with jasper2. Fixed client scripting + + cache directory listings. cache directory listings. cache directory cache + directory listings. cache directory listings. cache directory listings. + Cache directory listings. + + deprecated maxreadtime. deprecated maxreadtime. deprecated maxreadtime + deprecated maxreadtime. deprecated maxreadtime. deprecated maxreadtime. + Deprecated maxReadTime. + + fixed client scripting vulnerability with jasper2. fixed client script fixed + client scripting vulnerability with jasper2. fixed client script fixed + client scripting vulnerability with jasper2. Fixed client scripting vulnerability with jasper2. - + fixed infinite recursion in jdbcuserrealm Fixed infinite recursion in + + fixed infinite recursion in jdbcuserrealm fixed infinite recursion in fixed + infinite recursion in jdbcuserrealm fixed infinite recursion in fixed + infinite recursion in jdbcuserrealm Fixed infinite recursion in JDBCUserRealm - + fixed space in resource name handling for jdk1.4 Fixed space in resource - name handling for jdk1.4 - + merged limitedncsarequestlog into ncsarequestlog Merged - LimitedNCSARequestLog into NCSARequestLog - + moved launcher/src to src/org/mortbay/start Moved launcher/src to + + fixed space in resource name handling for jdk1.4 fixed space in resour fixed + space in resource name handling for jdk1.4 fixed space in resour fixed space + in resource name handling for jdk1.4 Fixed space in resource name handling + for jdk1.4 + + merged limitedncsarequestlog into ncsarequestlog merged merged merged + limitedncsarequestlog into ncsarequestlog merged merged + limitedncsarequestlog into ncsarequestlog Merged LimitedNCSARequestLog into + NCSARequestLog + + moved launcher/src to src/org/mortbay/start moved launcher/src to move moved + launcher/src to src/org/mortbay/start moved launcher/src to moved + launcher/src to src/org/mortbay/start Moved launcher/src to src/org/mortbay/start - + string comparison of if-modified-since headers. String comparison of + + string comparison of if-modified-since headers. string comparison of s + string comparison of if-modified-since headers. string comparison of string + comparison of if-modified-since headers. String comparison of If-Modified-Since headers. - + touch files when expanding jars Touch files when expanding jars + + touch files when expanding jars touch files when expanding jars touch touch + files when expanding jars touch files when expanding jars touch files when + expanding jars Touch files when expanding jars jetty-4.1.0 - 22 September 2002 - + added limitedncsarequestlog Added LimitedNCSARequestLog + + added limitedncsarequestlog added limitedncsarequestlog added added + limitedncsarequestlog added limitedncsarequestlog added + limitedncsarequestlog Added LimitedNCSARequestLog + clientcertauthenticator protected from null subjectdn + clientcertauthenticator protected from null subjectdn + clientcertauthenticator protected from null subjectdn ClientCertAuthenticator protected from null subjectDN - + context initparams to control session cookie domain, path and age. Context + + context initparams to control session cookie domain, path and age. con + context initparams to control session cookie domain, path and age. con + context initparams to control session cookie domain, path and age. Context Initparams to control session cookie domain, path and age. - + fixed ajp13 handling of mod_jk loadbalancing. Fixed AJP13 handling of mod_jk + + fixed ajp13 handling of mod_jk loadbalancing. fixed ajp13 handling of fixed + ajp13 handling of mod_jk loadbalancing. fixed ajp13 handling of fixed ajp13 + handling of mod_jk loadbalancing. Fixed AJP13 handling of mod_jk loadbalancing. - + fixed cgi+windows security hole. Fixed CGI+windows security hole. - + handle unremovable tempdir. Handle unremovable tempdir. - + ncsarequest log buffered default NCSARequest log buffered default - + sorted directory listings. Sorted directory listings. - + stop servlets in opposite order to start. Stop servlets in opposite order to + + fixed cgi+windows security hole. fixed cgi+windows security hole. fixe fixed + cgi+windows security hole. fixed cgi+windows security hole. fixed + cgi+windows security hole. Fixed CGI+windows security hole. + + handle unremovable tempdir. handle unremovable tempdir. handle unremov + handle unremovable tempdir. handle unremovable tempdir. handle unremovable + tempdir. Handle unremovable tempdir. + + ncsarequest log buffered default ncsarequest log buffered default + ncsarequest log buffered default ncsarequest log buffered default + ncsarequest log buffered default NCSARequest log buffered default + + sorted directory listings. sorted directory listings. sorted directory + sorted directory listings. sorted directory listings. sorted directory + listings. Sorted directory listings. + + stop servlets in opposite order to start. stop servlets in opposite or stop + servlets in opposite order to start. stop servlets in opposite or stop + servlets in opposite order to start. Stop servlets in opposite order to start. - + use javac -target 1.2 for normal classes Use javac -target 1.2 for normal - classes - + web-inf/classes before web-inf/lib WEB-INF/classes before WEB-INF/lib + + use javac -target 1.2 for normal classes use javac -target 1.2 for nor use + javac -target 1.2 for normal classes use javac -target 1.2 for nor use javac + -target 1.2 for normal classes Use javac -target 1.2 for normal classes + + web-inf/classes before web-inf/lib web-inf/classes before web-inf/lib + web-inf/classes before web-inf/lib web-inf/classes before web-inf/lib + web-inf/classes before web-inf/lib WEB-INF/classes before WEB-INF/lib jetty-4.1.0RC6 - 14 September 2002 - + added logon.jsp for no cookie form authentication. Added logon.jsp for no - cookie form authentication. - + added redirect to welcome file option. Added redirect to welcome file - option. - + cleaned up old debug. Cleaned up old debug. - + don't url encode fileurls. Don't URL encode FileURLS. - + encode urls of authentication redirections. Encode URLs of Authentication + + added logon.jsp for no cookie form authentication. added logon.jsp for added + logon.jsp for no cookie form authentication. added logon.jsp for added + logon.jsp for no cookie form authentication. Added logon.jsp for no cookie + form authentication. + + added redirect to welcome file option. added redirect to welcome file added + redirect to welcome file option. added redirect to welcome file added + redirect to welcome file option. Added redirect to welcome file option. + + cleaned up old debug. cleaned up old debug. cleaned up old debug. clea + cleaned up old debug. cleaned up old debug. cleaned up old debug. Cleaned up + old debug. + + don't url encode fileurls. don't url encode fileurls. don't url encode don't + url encode fileurls. don't url encode fileurls. don't url encode fileurls. + Don't URL encode FileURLS. + + encode urls of authentication redirections. encode urls of authenticat + encode urls of authentication redirections. encode urls of authenticat + encode urls of authentication redirections. Encode URLs of Authentication redirections. - + extended session api to pass request for jvmroute handling Extended Session + + extended session api to pass request for jvmroute handling extended se + extended session api to pass request for jvmroute handling extended se + extended session api to pass request for jvmroute handling Extended Session API to pass request for jvmRoute handling - + fixed problem with ajp 304 responses. Fixed problem with AJP 304 responses. - + formauthenticator uses normal redirections now. FormAuthenticator uses + + fixed problem with ajp 304 responses. fixed problem with ajp 304 respo fixed + problem with ajp 304 responses. fixed problem with ajp 304 respo fixed + problem with ajp 304 responses. Fixed problem with AJP 304 responses. + + formauthenticator uses normal redirections now. formauthenticator uses + formauthenticator uses normal redirections now. formauthenticator uses + formauthenticator uses normal redirections now. FormAuthenticator uses normal redirections now. - + improved hashuserrealm doco Improved HashUserRealm doco - + improved look and feel of demo Improved look and feel of demo + + improved hashuserrealm doco improved hashuserrealm doco improved improved + hashuserrealm doco improved hashuserrealm doco improved hashuserrealm doco + Improved HashUserRealm doco + + improved look and feel of demo improved look and feel of demo improved + improved look and feel of demo improved look and feel of demo improved look + and feel of demo Improved look and feel of demo jetty-4.1.0RC5 - 08 September 2002 - + added commandprefix init param to cgi Added commandPrefix init param to CGI - + ajp13listener caught up with httpconnection changes. AJP13Listener caught up + + added commandprefix init param to cgi added commandprefix init param t added + commandprefix init param to cgi added commandprefix init param t added + commandprefix init param to cgi Added commandPrefix init param to CGI + + ajp13listener caught up with httpconnection changes. ajp13listener cau + ajp13listener caught up with httpconnection changes. ajp13listener cau + ajp13listener caught up with httpconnection changes. AJP13Listener caught up with HttpConnection changes. - + implemented security-role-ref for isuserinrole. Implemented - security-role-ref for isUserInRole. - + improved errors for misconfigured realms. Improved errors for misconfigured + + implemented security-role-ref for isuserinrole. implemented implemente + implemented security-role-ref for isuserinrole. implemented implemented + security-role-ref for isuserinrole. Implemented security-role-ref for + isUserInRole. + + improved errors for misconfigured realms. improved errors for misconfi + improved errors for misconfigured realms. improved errors for misconfi + improved errors for misconfigured realms. Improved errors for misconfigured realms. - + more cleanup in threadpool for idle death. More cleanup in ThreadPool for - idle death. + + more cleanup in threadpool for idle death. more cleanup in threadpool more + cleanup in threadpool for idle death. more cleanup in threadpool more + cleanup in threadpool for idle death. More cleanup in ThreadPool for idle + death. jetty-4.1.0RC4 - 30 August 2002 - + created statslock sync objects to avoid deadlock when stopping. Created + + created statslock sync objects to avoid deadlock when stopping. create + created statslock sync objects to avoid deadlock when stopping. create + created statslock sync objects to avoid deadlock when stopping. Created statsLock sync objects to avoid deadlock when stopping. - + included ibmjsselistener in the contrib directory. Included IbmJsseListener + + included ibmjsselistener in the contrib directory. included ibmjsselis + included ibmjsselistener in the contrib directory. included ibmjsselis + included ibmjsselistener in the contrib directory. Included IbmJsseListener in the contrib directory. - + reverted to 302 for all redirections as all clients do not understand + + reverted to 302 for all redirections as all clients do not understand + reverted to 302 for all redirections as all clients do not understand + reverted to 302 for all redirections as all clients do not understand Reverted to 302 for all redirections as all clients do not understand 303 - + updated jasper2 to 4.1.10 tag. Updated jasper2 to 4.1.10 tag. + + updated jasper2 to 4.1.10 tag. updated jasper2 to 4.1.10 tag. updated + updated jasper2 to 4.1.10 tag. updated jasper2 to 4.1.10 tag. updated + jasper2 to 4.1.10 tag. Updated jasper2 to 4.1.10 tag. jetty-4.1.0RC3 - 28 August 2002 - + added buffering to request log Added buffering to request log - + added defaults descriptor to addwebapplications. Added defaults descriptor - to addWebApplications. + + added buffering to request log added buffering to request log added added + buffering to request log added buffering to request log added buffering to + request log Added buffering to request log + + added defaults descriptor to addwebapplications. added defaults descri added + defaults descriptor to addwebapplications. added defaults descri added + defaults descriptor to addwebapplications. Added defaults descriptor to + addWebApplications. + addwebapplications encodes paths to allow for spaces in file names. + addwebapplications encodes paths to allow for spaces in file names. + addwebapplications encodes paths to allow for spaces in file names. addWebApplications encodes paths to allow for spaces in file names. - + allow form auth pages to be within security constraint. Allow FORM auth - pages to be within security constraint. - + allow webapplicationhandler to be used with other handlers. Allow + + allow form auth pages to be within security constraint. allow form aut allow + form auth pages to be within security constraint. allow form aut allow form + auth pages to be within security constraint. Allow FORM auth pages to be + within security constraint. + + allow webapplicationhandler to be used with other handlers. allow allo allow + webapplicationhandler to be used with other handlers. allow allow + webapplicationhandler to be used with other handlers. Allow WebApplicationHandler to be used with other handlers. - + created and integrated the jetty launcher Created and integrated the Jetty + + created and integrated the jetty launcher created and integrated the j + created and integrated the jetty launcher created and integrated the j + created and integrated the jetty launcher Created and integrated the Jetty Launcher - + fixed security problem for suffix matching with trailing "/" Fixed security + + fixed security problem for suffix matching with trailing "/" fixed sec fixed + security problem for suffix matching with trailing "/" fixed sec fixed + security problem for suffix matching with trailing "/" Fixed security problem for suffix matching with trailing "/" - + improved handling of path encoding in resources for bad jvms Improved + + improved handling of path encoding in resources for bad jvms improved + improved handling of path encoding in resources for bad jvms improved + improved handling of path encoding in resources for bad jvms Improved handling of path encoding in Resources for bad JVMs - + improved handling of put,delete & move. Improved handling of PUT,DELETE & + + improved handling of put,delete & move. improved handling of put,delet + improved handling of put,delete & move. improved handling of put,delet + improved handling of put,delete & move. Improved handling of PUT,DELETE & MOVE. - + made resource canonicalize it's base path for directories Made Resource + + made resource canonicalize it's base path for directories made resourc made + resource canonicalize it's base path for directories made resourc made + resource canonicalize it's base path for directories Made Resource canonicalize it's base path for directories jetty-4.1.0RC2 - 20 August 2002 - + added httplistener.bufferreserve Added HttpListener.bufferReserve - + build ant, src and zip versions with the release Build ant, src and zip - versions with the release - + clear interrupted status in threadpool Clear interrupted status in - ThreadPool - + conveninace setclassloaderjava2compliant method. Conveninace + + added httplistener.bufferreserve added httplistener.bufferreserve adde added + httplistener.bufferreserve added httplistener.bufferreserve added + httplistener.bufferreserve Added HttpListener.bufferReserve + + build ant, src and zip versions with the release build ant, src and zi build + ant, src and zip versions with the release build ant, src and zi build ant, + src and zip versions with the release Build ant, src and zip versions with + the release + + clear interrupted status in threadpool clear interrupted status in cle clear + interrupted status in threadpool clear interrupted status in clear + interrupted status in threadpool Clear interrupted status in ThreadPool + + conveninace setclassloaderjava2compliant method. conveninace convenina + conveninace setclassloaderjava2compliant method. conveninace conveninace + setclassloaderjava2compliant method. Conveninace setClassLoaderJava2Compliant method. - + fixed httpfields cache overflow Fixed HttpFields cache overflow - + improved bytearraypool to handle multiple sizes. Improved ByteArrayPool to + + fixed httpfields cache overflow fixed httpfields cache overflow fixed fixed + httpfields cache overflow fixed httpfields cache overflow fixed httpfields + cache overflow Fixed HttpFields cache overflow + + improved bytearraypool to handle multiple sizes. improved bytearraypoo + improved bytearraypool to handle multiple sizes. improved bytearraypoo + improved bytearraypool to handle multiple sizes. Improved ByteArrayPool to handle multiple sizes. - + updated to jasper2 (4_1_9 tag) Updated to Jasper2 (4_1_9 tag) - + use system line separator for log files. Use system line separator for log + + updated to jasper2 (4_1_9 tag) updated to jasper2 (4_1_9 tag) updated + updated to jasper2 (4_1_9 tag) updated to jasper2 (4_1_9 tag) updated to + jasper2 (4_1_9 tag) Updated to Jasper2 (4_1_9 tag) + + use system line separator for log files. use system line separator for use + system line separator for log files. use system line separator for use + system line separator for log files. Use system line separator for log files. jetty-4.1.0RC1 - 11 August 2002 - + fixed forward query string handling Fixed forward query string handling - + fixed forward to jsp-file servlet Fixed forward to jsp-file servlet - + fixed getcontext to use canonical contextpathspec Fixed getContext to use + + fixed forward query string handling fixed forward query string handlin fixed + forward query string handling fixed forward query string handlin fixed + forward query string handling Fixed forward query string handling + + fixed forward to jsp-file servlet fixed forward to jsp-file servlet fi fixed + forward to jsp-file servlet fixed forward to jsp-file servlet fixed forward + to jsp-file servlet Fixed forward to jsp-file servlet + + fixed getcontext to use canonical contextpathspec fixed getcontext to fixed + getcontext to use canonical contextpathspec fixed getcontext to fixed + getcontext to use canonical contextpathspec Fixed getContext to use canonical contextPathSpec - + fixed handling of relative sendredirect after forward. Fixed handling of - relative sendRedirect after forward. - + fixed setcharacterencoding to work with getreader Fixed setCharacterEncoding - to work with getReader - + improved the return codes for put Improved the return codes for PUT - + made httpserver serializable Made HttpServer serializable - + updated international uri doco Updated international URI doco - + updated jasper to cvs snapshot 200208011920 Updated jasper to CVS snapshot + + fixed handling of relative sendredirect after forward. fixed handling fixed + handling of relative sendredirect after forward. fixed handling fixed + handling of relative sendredirect after forward. Fixed handling of relative + sendRedirect after forward. + + fixed setcharacterencoding to work with getreader fixed setcharacteren fixed + setcharacterencoding to work with getreader fixed setcharacteren fixed + setcharacterencoding to work with getreader Fixed setCharacterEncoding to + work with getReader + + improved the return codes for put improved the return codes for put im + improved the return codes for put improved the return codes for put improved + the return codes for put Improved the return codes for PUT + + made httpserver serializable made httpserver serializable made httpser made + httpserver serializable made httpserver serializable made httpserver + serializable Made HttpServer serializable + + updated international uri doco updated international uri doco updated + updated international uri doco updated international uri doco updated + international uri doco Updated international URI doco + + updated jasper to cvs snapshot 200208011920 updated jasper to cvs snap + updated jasper to cvs snapshot 200208011920 updated jasper to cvs snap + updated jasper to cvs snapshot 200208011920 Updated jasper to CVS snapshot 200208011920 jetty-4.1.0RC0 - 31 July 2002 - + added digestauthenticator Added DigestAuthenticator - + added expiryhandler which can set a default expires header. Added - ExpiryHandler which can set a default Expires header. - + added link to a jetty page in korean. Added link to a Jetty page in Korean. - + changed uri default charset back to iso_8859_1 Changed URI default charset + + added digestauthenticator added digestauthenticator added added + digestauthenticator added digestauthenticator added digestauthenticator + Added DigestAuthenticator + + added expiryhandler which can set a default expires header. added adde added + expiryhandler which can set a default expires header. added added + expiryhandler which can set a default expires header. Added ExpiryHandler + which can set a default Expires header. + + added link to a jetty page in korean. added link to a jetty page in ko added + link to a jetty page in korean. added link to a jetty page in ko added link + to a jetty page in korean. Added link to a Jetty page in Korean. + + changed uri default charset back to iso_8859_1 changed uri default cha + changed uri default charset back to iso_8859_1 changed uri default cha + changed uri default charset back to iso_8859_1 Changed URI default charset back to ISO_8859_1 - + fixed getrealpath for packed war files. Fixed getRealPath for packed war - files. - + restructured password into password and credentials Restructured Password + + fixed getrealpath for packed war files. fixed getrealpath for packed w fixed + getrealpath for packed war files. fixed getrealpath for packed w fixed + getrealpath for packed war files. Fixed getRealPath for packed war files. + + restructured password into password and credentials restructured passw + restructured password into password and credentials restructured passw + restructured password into password and credentials Restructured Password into Password and Credentials jetty-4.0.5 - 31 July 2002 - + fixed getrealpath for packed war files. Fixed getRealPath for packed war - files. - + fixed getrequesturi for rd.forward to return new uri. Fixed getRequestURI - for RD.forward to return new URI. - + reversed order of servletcontextlistener.contextdestroyed calls Reversed + + fixed getrealpath for packed war files. fixed getrealpath for packed w fixed + getrealpath for packed war files. fixed getrealpath for packed w fixed + getrealpath for packed war files. Fixed getRealPath for packed war files. + + fixed getrequesturi for rd.forward to return new uri. fixed getrequest fixed + getrequesturi for rd.forward to return new uri. fixed getrequest fixed + getrequesturi for rd.forward to return new uri. Fixed getRequestURI for + RD.forward to return new URI. + + reversed order of servletcontextlistener.contextdestroyed calls revers + reversed order of servletcontextlistener.contextdestroyed calls revers + reversed order of servletcontextlistener.contextdestroyed calls Reversed order of ServletContextListener.contextDestroyed calls jetty-4.1.B1 - 19 July 2002 - + added 2.4 filter dispatching support. Added 2.4 Filter dispatching support. - + added put,delete,move support to webapps. Added PUT,DELETE,MOVE support to + + added 2.4 filter dispatching support. added 2.4 filter dispatching sup added + 2.4 filter dispatching support. added 2.4 filter dispatching sup added 2.4 + filter dispatching support. Added 2.4 Filter dispatching support. + + added put,delete,move support to webapps. added put,delete,move suppor added + put,delete,move support to webapps. added put,delete,move suppor added + put,delete,move support to webapps. Added PUT,DELETE,MOVE support to webapps. - + cgi servlet, catch and report program invocation failure status. CGI - Servlet, catch and report program invocation failure status. - + cgi servlet, fixed suffix mapping problem. CGI Servlet, fixed suffix mapping + + cgi servlet, catch and report program invocation failure status. cgi c cgi + servlet, catch and report program invocation failure status. cgi cgi + servlet, catch and report program invocation failure status. CGI Servlet, + catch and report program invocation failure status. + + cgi servlet, fixed suffix mapping problem. cgi servlet, fixed suffix m cgi + servlet, fixed suffix mapping problem. cgi servlet, fixed suffix m cgi + servlet, fixed suffix mapping problem. CGI Servlet, fixed suffix mapping problem. - + cgi servlet, pass all http headers through. CGI Servlet, pass all HTTP - headers through. - + cgi servlet, set working directory for exec CGI Servlet, set working - directory for exec - + moved dynamic servlet handling to invoker servlet. Moved dynamic servlet - handling to Invoker servlet. - + moved webapp resource handling to default servlet. Moved webapp resource - handling to Default servlet. - + reversed order of servletcontextlistener.contextdestroyed calls Reversed + + cgi servlet, pass all http headers through. cgi servlet, pass all http cgi + servlet, pass all http headers through. cgi servlet, pass all http cgi + servlet, pass all http headers through. CGI Servlet, pass all HTTP headers + through. + + cgi servlet, set working directory for exec cgi servlet, set working c cgi + servlet, set working directory for exec cgi servlet, set working cgi + servlet, set working directory for exec CGI Servlet, set working directory + for exec + + moved dynamic servlet handling to invoker servlet. moved dynamic servl moved + dynamic servlet handling to invoker servlet. moved dynamic servl moved + dynamic servlet handling to invoker servlet. Moved dynamic servlet handling + to Invoker servlet. + + moved webapp resource handling to default servlet. moved webapp resour moved + webapp resource handling to default servlet. moved webapp resour moved + webapp resource handling to default servlet. Moved webapp resource handling + to Default servlet. + + reversed order of servletcontextlistener.contextdestroyed calls revers + reversed order of servletcontextlistener.contextdestroyed calls revers + reversed order of servletcontextlistener.contextdestroyed calls Reversed order of ServletContextListener.contextDestroyed calls - + sessions create attribute map lazily. Sessions create attribute map lazily. - + support http/0.9 requests again Support HTTP/0.9 requests again - + updated mini.http.jar target Updated mini.http.jar target + + sessions create attribute map lazily. sessions create attribute map la + sessions create attribute map lazily. sessions create attribute map la + sessions create attribute map lazily. Sessions create attribute map lazily. + + support http/0.9 requests again support http/0.9 requests again suppor + support http/0.9 requests again support http/0.9 requests again support + http/0.9 requests again Support HTTP/0.9 requests again + + updated mini.http.jar target updated mini.http.jar target updated updated + mini.http.jar target updated mini.http.jar target updated mini.http.jar + target Updated mini.http.jar target jetty-3.1.9 - 15 July 2002 - + allow dohead requests to be forwarded. Allow doHead requests to be - forwarded. - + fixed race in threadpool for minthreads <= cpus Fixed race in ThreadPool for - minThreads <= CPUs + + allow dohead requests to be forwarded. allow dohead requests to be all allow + dohead requests to be forwarded. allow dohead requests to be allow dohead + requests to be forwarded. Allow doHead requests to be forwarded. + + fixed race in threadpool for minthreads <= cpus fixed race in threadpo fixed + race in threadpool for minthreads <= cpus fixed race in threadpo fixed race + in threadpool for minthreads <= cpus Fixed race in ThreadPool for minThreads + <= CPUs jetty-4.1.B0 - 13 July 2002 - + added work around of jdk1.4 bug with nio listener Added work around of - JDK1.4 bug with NIO listener - + allow filter init to access servlet context methods. Allow filter init to - access servlet context methods. - + close rather than disable stream after forward close rather than disable - stream after forward - + fixed close problem with load balancer. Fixed close problem with load - balancer. - + fixed threadpool bug when minthreads <= cpus Fixed ThreadPool bug when - minThreads <= CPUs - + keep notfoundcontext out of context mapping lists. Keep notFoundContext out - of context mapping lists. - + mod_jk faq mod_jk FAQ - + moved 3rd party jars to $jetty_home/ext Moved 3rd party jars to - $JETTY_HOME/ext - + ncsarequestlog can log to stderr NCSARequestLog can log to stderr - + rd.forward changes getrequesturi. RD.forward changes getRequestURI. - + stopped rd.includes closing response. Stopped RD.includes closing response. + + added work around of jdk1.4 bug with nio listener added work around of added + work around of jdk1.4 bug with nio listener added work around of added work + around of jdk1.4 bug with nio listener Added work around of JDK1.4 bug with + NIO listener + + allow filter init to access servlet context methods. allow filter init allow + filter init to access servlet context methods. allow filter init allow + filter init to access servlet context methods. Allow filter init to access + servlet context methods. + + close rather than disable stream after forward close rather than disab close + rather than disable stream after forward close rather than disab close + rather than disable stream after forward close rather than disable stream + after forward + + fixed close problem with load balancer. fixed close problem with load fixed + close problem with load balancer. fixed close problem with load fixed close + problem with load balancer. Fixed close problem with load balancer. + + fixed threadpool bug when minthreads <= cpus fixed threadpool bug when fixed + threadpool bug when minthreads <= cpus fixed threadpool bug when fixed + threadpool bug when minthreads <= cpus Fixed ThreadPool bug when minThreads + <= CPUs + + keep notfoundcontext out of context mapping lists. keep notfoundcontex keep + notfoundcontext out of context mapping lists. keep notfoundcontex keep + notfoundcontext out of context mapping lists. Keep notFoundContext out of + context mapping lists. + + mod_jk faq mod_jk faq mod_jk faq mod_jk faq mod_jk faq mod_jk faq mod_jk faq + mod_jk FAQ + + moved 3rd party jars to $jetty_home/ext moved 3rd party jars to moved moved + 3rd party jars to $jetty_home/ext moved 3rd party jars to moved 3rd party + jars to $jetty_home/ext Moved 3rd party jars to $JETTY_HOME/ext + + ncsarequestlog can log to stderr ncsarequestlog can log to stderr + ncsarequestlog can log to stderr ncsarequestlog can log to stderr + ncsarequestlog can log to stderr NCSARequestLog can log to stderr + + rd.forward changes getrequesturi. rd.forward changes getrequesturi. + rd.forward changes getrequesturi. rd.forward changes getrequesturi. + rd.forward changes getrequesturi. RD.forward changes getRequestURI. + + stopped rd.includes closing response. stopped rd.includes closing resp + stopped rd.includes closing response. stopped rd.includes closing resp + stopped rd.includes closing response. Stopped RD.includes closing response. jetty-4.1.D2 - 24 June 2002 - + added ajp13 listener for apache integration. Added AJP13 listener for apache + + added ajp13 listener for apache integration. added ajp13 listener for added + ajp13 listener for apache integration. added ajp13 listener for added ajp13 + listener for apache integration. Added AJP13 listener for apache integration. - + allow comma separated cookies and headers Allow comma separated cookies and - headers - + back out don't chunk 30x empty responses. Back out Don't chunk 30x empty - responses. - + better recycling of httprequests. Better recycling of HttpRequests. - + conditional header tested against welcome file not directory. Conditional + + allow comma separated cookies and headers allow comma separated cookie allow + comma separated cookies and headers allow comma separated cookie allow comma + separated cookies and headers Allow comma separated cookies and headers + + back out don't chunk 30x empty responses. back out don't chunk 30x emp back + out don't chunk 30x empty responses. back out don't chunk 30x emp back out + don't chunk 30x empty responses. Back out Don't chunk 30x empty responses. + + better recycling of httprequests. better recycling of httprequests. be + better recycling of httprequests. better recycling of httprequests. better + recycling of httprequests. Better recycling of HttpRequests. + + conditional header tested against welcome file not directory. conditio + conditional header tested against welcome file not directory. conditio + conditional header tested against welcome file not directory. Conditional header tested against welcome file not directory. - + fixed chunkableoutputstream close propagation Fixed ChunkableOutputStream - close propagation - + improved threadedserver stopping on bad networks Improved ThreadedServer + + fixed chunkableoutputstream close propagation fixed chunkableoutputstr fixed + chunkableoutputstream close propagation fixed chunkableoutputstr fixed + chunkableoutputstream close propagation Fixed ChunkableOutputStream close + propagation + + improved threadedserver stopping on bad networks improved threadedserv + improved threadedserver stopping on bad networks improved threadedserv + improved threadedserver stopping on bad networks Improved ThreadedServer stopping on bad networks - + moved jmx classes from jettyextra to here. Moved jmx classes from JettyExtra - to here. - + protect session.getattributenames from concurrent modifications. Protect + + moved jmx classes from jettyextra to here. moved jmx classes from jett moved + jmx classes from jettyextra to here. moved jmx classes from jett moved jmx + classes from jettyextra to here. Moved jmx classes from JettyExtra to here. + + protect session.getattributenames from concurrent modifications. prote + protect session.getattributenames from concurrent modifications. prote + protect session.getattributenames from concurrent modifications. Protect session.getAttributeNames from concurrent modifications. - + set contextloader during webapplicationcontext.start Set contextloader - during webapplicationcontext.start - + support trusted external authenticators. Support trusted external - authenticators. - + use threadlocals to avoid unwrapping in dispatcher. Use ThreadLocals to - avoid unwrapping in Dispatcher. + + set contextloader during webapplicationcontext.start set contextloader set + contextloader during webapplicationcontext.start set contextloader set + contextloader during webapplicationcontext.start Set contextloader during + webapplicationcontext.start + + support trusted external authenticators. support trusted external supp + support trusted external authenticators. support trusted external support + trusted external authenticators. Support trusted external authenticators. + + use threadlocals to avoid unwrapping in dispatcher. use threadlocals t use + threadlocals to avoid unwrapping in dispatcher. use threadlocals t use + threadlocals to avoid unwrapping in dispatcher. Use ThreadLocals to avoid + unwrapping in Dispatcher. jetty-4.0.4 - 23 June 2002 - + back out change: don't chunk 30x empty responses. Back out change: Don't - chunk 30x empty responses. - + conditional header tested against welcome file not directory. Conditional + + back out change: don't chunk 30x empty responses. back out change: don back + out change: don't chunk 30x empty responses. back out change: don back out + change: don't chunk 30x empty responses. Back out change: Don't chunk 30x + empty responses. + + conditional header tested against welcome file not directory. conditio + conditional header tested against welcome file not directory. conditio + conditional header tested against welcome file not directory. Conditional header tested against welcome file not directory. - + improved threadedserver stopping on bad networks Improved ThreadedServer + + improved threadedserver stopping on bad networks improved threadedserv + improved threadedserver stopping on bad networks improved threadedserv + improved threadedserver stopping on bad networks Improved ThreadedServer stopping on bad networks jetty-4.0.3 - 20 June 2002 - + allow comma separated cookies and headers Allow comma separated cookies and - headers - + allow session manager to be initialized when set. Allow session manager to - be initialized when set. - + better recycling of httprequests. Better recycling of HttpRequests. - + fixed close propagation of on-chunked output streams Fixed close propagation - of on-chunked output streams - + fixed japanese locale Fixed japanese locale - + force security disassociation. Force security disassociation. - + protect session.getattributenames from concurrent modifications. Protect + + allow comma separated cookies and headers allow comma separated cookie allow + comma separated cookies and headers allow comma separated cookie allow comma + separated cookies and headers Allow comma separated cookies and headers + + allow session manager to be initialized when set. allow session manage allow + session manager to be initialized when set. allow session manage allow + session manager to be initialized when set. Allow session manager to be + initialized when set. + + better recycling of httprequests. better recycling of httprequests. be + better recycling of httprequests. better recycling of httprequests. better + recycling of httprequests. Better recycling of HttpRequests. + + fixed close propagation of on-chunked output streams fixed close propa fixed + close propagation of on-chunked output streams fixed close propa fixed close + propagation of on-chunked output streams Fixed close propagation of + on-chunked output streams + + fixed japanese locale fixed japanese locale fixed japanese locale fixe fixed + japanese locale fixed japanese locale fixed japanese locale Fixed japanese + locale + + force security disassociation. force security disassociation. force se force + security disassociation. force security disassociation. force security + disassociation. Force security disassociation. + + protect session.getattributenames from concurrent modifications. prote + protect session.getattributenames from concurrent modifications. prote + protect session.getattributenames from concurrent modifications. Protect session.getAttributeNames from concurrent modifications. - + webapplicationcontext.start sets context loader WebapplicationContext.start + + webapplicationcontext.start sets context loader webapplicationcontext. + webapplicationcontext.start sets context loader webapplicationcontext. + webapplicationcontext.start sets context loader WebapplicationContext.start sets context loader jetty-4.1.D1 - 08 June 2002 - + added simple buffer pool. Added simple buffer pool. - + don't chunk 30x empty responses. Don't chunk 30x empty responses. - + fixed /foo/../bar// bug in canonical path. Fixed /foo/../bar// bug in - canonical path. - + fixed "" contextpaths in dispatcher. Fixed "" contextPaths in Dispatcher. - + merged resourcebase and securitybase into httpcontext Merged ResourceBase + + added simple buffer pool. added simple buffer pool. added simple buffe added + simple buffer pool. added simple buffer pool. added simple buffer pool. + Added simple buffer pool. + + don't chunk 30x empty responses. don't chunk 30x empty responses. don' don't + chunk 30x empty responses. don't chunk 30x empty responses. don't chunk 30x + empty responses. Don't chunk 30x empty responses. + + fixed /foo/../bar// bug in canonical path. fixed /foo/../bar// bug in fixed + /foo/../bar// bug in canonical path. fixed /foo/../bar// bug in fixed + /foo/../bar// bug in canonical path. Fixed /foo/../bar// bug in canonical + path. + + fixed "" contextpaths in dispatcher. fixed "" contextpaths in dispatch fixed + "" contextpaths in dispatcher. fixed "" contextpaths in dispatch fixed "" + contextpaths in dispatcher. Fixed "" contextPaths in Dispatcher. + + merged resourcebase and securitybase into httpcontext merged resourceb + merged resourcebase and securitybase into httpcontext merged resourceb + merged resourcebase and securitybase into httpcontext Merged ResourceBase and SecurityBase into HttpContext - + recycle servlet requests and responses Recycle servlet requests and - responses - + removed race for the starting of session scavaging Removed race for the + + recycle servlet requests and responses recycle servlet requests and re + recycle servlet requests and responses recycle servlet requests and recycle + servlet requests and responses Recycle servlet requests and responses + + removed race for the starting of session scavaging removed race for th + removed race for the starting of session scavaging removed race for th + removed race for the starting of session scavaging Removed race for the starting of session scavaging - + reworked output buffering to keep constant sized buffers. Reworked output + + reworked output buffering to keep constant sized buffers. reworked out + reworked output buffering to keep constant sized buffers. reworked out + reworked output buffering to keep constant sized buffers. Reworked output buffering to keep constant sized buffers. jetty-4.0.2 - 06 June 2002 - + added optimizeit plug Added OptimizeIt plug - + don't chunk 30x empty responses. Don't chunk 30x empty responses. - + fixed /foo/../bar// bug in canonical path. Fixed /foo/../bar// bug in - canonical path. - + fixed "" contextpaths in dispatcher. Fixed "" contextPaths in Dispatcher. - + fixed handler/context start order. Fixed handler/context start order. - + fixed web.dtd references. Fixed web.dtd references. - + removed race for the starting of session scavaging Removed race for the + + added optimizeit plug added optimizeit plug added optimizeit plug adde added + optimizeit plug added optimizeit plug added optimizeit plug Added OptimizeIt + plug + + don't chunk 30x empty responses. don't chunk 30x empty responses. don' don't + chunk 30x empty responses. don't chunk 30x empty responses. don't chunk 30x + empty responses. Don't chunk 30x empty responses. + + fixed /foo/../bar// bug in canonical path. fixed /foo/../bar// bug in fixed + /foo/../bar// bug in canonical path. fixed /foo/../bar// bug in fixed + /foo/../bar// bug in canonical path. Fixed /foo/../bar// bug in canonical + path. + + fixed "" contextpaths in dispatcher. fixed "" contextpaths in dispatch fixed + "" contextpaths in dispatcher. fixed "" contextpaths in dispatch fixed "" + contextpaths in dispatcher. Fixed "" contextPaths in Dispatcher. + + fixed handler/context start order. fixed handler/context start order. fixed + handler/context start order. fixed handler/context start order. fixed + handler/context start order. Fixed handler/context start order. + + fixed web.dtd references. fixed web.dtd references. fixed web.dtd fixed + web.dtd references. fixed web.dtd references. fixed web.dtd references. + Fixed web.dtd references. + + removed race for the starting of session scavaging removed race for th + removed race for the starting of session scavaging removed race for th + removed race for the starting of session scavaging Removed race for the starting of session scavaging jetty-3.1.8 - 06 June 2002 - + fixed /foo/../bar// bug in canonical path. Fixed /foo/../bar// bug in - canonical path. - + fixed no slash context redirection. Fixed no slash context redirection. - + fixed singled threaded dynamic servlets Fixed singled threaded dynamic - servlets - + made securityconstraint.addrole() require authentication. Made + + fixed /foo/../bar// bug in canonical path. fixed /foo/../bar// bug in fixed + /foo/../bar// bug in canonical path. fixed /foo/../bar// bug in fixed + /foo/../bar// bug in canonical path. Fixed /foo/../bar// bug in canonical + path. + + fixed no slash context redirection. fixed no slash context redirection fixed + no slash context redirection. fixed no slash context redirection fixed no + slash context redirection. Fixed no slash context redirection. + + fixed singled threaded dynamic servlets fixed singled threaded dynamic fixed + singled threaded dynamic servlets fixed singled threaded dynamic fixed + singled threaded dynamic servlets Fixed singled threaded dynamic servlets + + made securityconstraint.addrole() require authentication. made made made + securityconstraint.addrole() require authentication. made made + securityconstraint.addrole() require authentication. Made SecurityConstraint.addRole() require authentication. jetty-4.1.D0 - 05 June 2002 - + added optimizeit plug. Added OptimizeIt plug. - + added typeutil to reduce integer creation. Added TypeUtil to reduce Integer + + added optimizeit plug. added optimizeit plug. added optimizeit plug. a added + optimizeit plug. added optimizeit plug. added optimizeit plug. Added + OptimizeIt plug. + + added typeutil to reduce integer creation. added typeutil to reduce in added + typeutil to reduce integer creation. added typeutil to reduce in added + typeutil to reduce integer creation. Added TypeUtil to reduce Integer creation. - + brand new webapplicationhandler & webapplicationcontext BRAND NEW + + brand new webapplicationhandler & webapplicationcontext brand new bran brand + new webapplicationhandler & webapplicationcontext brand new brand new + webapplicationhandler & webapplicationcontext BRAND NEW WebApplicationHandler & WebApplicationContext - + experimental client-cert authenticator Experimental CLIENT-CERT - Authenticator - + fixed handler/context start order. Fixed handler/context start order. - + fixed web.dtd references. Fixed web.dtd references. - + general clean up of the api for for mbean getters/setters. General clean up + + experimental client-cert authenticator experimental client-cert experi + experimental client-cert authenticator experimental client-cert experimental + client-cert authenticator Experimental CLIENT-CERT Authenticator + + fixed handler/context start order. fixed handler/context start order. fixed + handler/context start order. fixed handler/context start order. fixed + handler/context start order. Fixed handler/context start order. + + fixed web.dtd references. fixed web.dtd references. fixed web.dtd fixed + web.dtd references. fixed web.dtd references. fixed web.dtd references. + Fixed web.dtd references. + + general clean up of the api for for mbean getters/setters. general cle + general clean up of the api for for mbean getters/setters. general cle + general clean up of the api for for mbean getters/setters. General clean up of the API for for MBean getters/setters. - + removed the httpmessage facade mechanism Removed the HttpMessage facade + + removed the httpmessage facade mechanism removed the httpmessage facad + removed the httpmessage facade mechanism removed the httpmessage facad + removed the httpmessage facade mechanism Removed the HttpMessage facade mechanism - + restructured resourcehandler into resourcebase Restructured ResourceHandler + + restructured resourcehandler into resourcebase restructured resourceha + restructured resourcehandler into resourcebase restructured resourceha + restructured resourcehandler into resourcebase Restructured ResourceHandler into ResourceBase - + the 4.1 series started looking for even more performance within the 2. The - 4.1 Series started looking for even more performance within the 2.3 + + the 4.1 series started looking for even more performance within the 2. the + 4.1 series started looking for even more performance within the 2. the 4.1 + series started looking for even more performance within the 2. The 4.1 + Series started looking for even more performance within the 2.3 specification. jetty-4.0.1 - 22 May 2002 - + fixed "null" return from getrealpath Fixed "null" return from getRealPath - + fixed contextclassloader on servletcontextevents. Fixed contextclassloader - on ServletContextEvents. - + outputstreamlogsink config improvements OutputStreamLogSink config + + fixed "null" return from getrealpath fixed "null" return from getrealp fixed + "null" return from getrealpath fixed "null" return from getrealp fixed + "null" return from getrealpath Fixed "null" return from getRealPath + + fixed contextclassloader on servletcontextevents. fixed contextclasslo fixed + contextclassloader on servletcontextevents. fixed contextclasslo fixed + contextclassloader on servletcontextevents. Fixed contextclassloader on + ServletContextEvents. + + outputstreamlogsink config improvements outputstreamlogsink config + outputstreamlogsink config improvements outputstreamlogsink config + outputstreamlogsink config improvements OutputStreamLogSink config improvements - + support graceful stopping of context and server. Support graceful stopping + + support graceful stopping of context and server. support graceful stop + support graceful stopping of context and server. support graceful stop + support graceful stopping of context and server. Support graceful stopping of context and server. - + updated jasper to 16 may snapshot Updated jasper to 16 May snapshot + + updated jasper to 16 may snapshot updated jasper to 16 may snapshot up + updated jasper to 16 may snapshot updated jasper to 16 may snapshot updated + jasper to 16 may snapshot Updated jasper to 16 May snapshot jetty-4.0.1RC2 - 14 May 2002 - + 3des keylength was being reported as 0. now reports 168 bits. 3DES Keylength - was being reported as 0. Now reports 168 bits. - + added confidential and integral redirections to httplistener Added - confidential and integral redirections to HttpListener - + better error for jre1.3 with 1.4 classes Better error for jre1.3 with 1.4 - classes - + cleaned up rd query string regeneration. Cleaned up RD query string - regeneration. - + fixed servletresponse.reset() to resetbuffer. Fixed ServletResponse.reset() - to resetBuffer. - + implemented the run-as servlet tag. Implemented the run-as servlet tag. + + 3des keylength was being reported as 0. now reports 168 bits. 3des key 3des + keylength was being reported as 0. now reports 168 bits. 3des key 3des + keylength was being reported as 0. now reports 168 bits. 3DES Keylength was + being reported as 0. Now reports 168 bits. + + added confidential and integral redirections to httplistener added add added + confidential and integral redirections to httplistener added added + confidential and integral redirections to httplistener Added confidential + and integral redirections to HttpListener + + better error for jre1.3 with 1.4 classes better error for jre1.3 with better + error for jre1.3 with 1.4 classes better error for jre1.3 with better error + for jre1.3 with 1.4 classes Better error for jre1.3 with 1.4 classes + + cleaned up rd query string regeneration. cleaned up rd query string cl + cleaned up rd query string regeneration. cleaned up rd query string cleaned + up rd query string regeneration. Cleaned up RD query string regeneration. + + fixed servletresponse.reset() to resetbuffer. fixed servletresponse.re fixed + servletresponse.reset() to resetbuffer. fixed servletresponse.re fixed + servletresponse.reset() to resetbuffer. Fixed ServletResponse.reset() to + resetBuffer. + + implemented the run-as servlet tag. implemented the run-as servlet tag + implemented the run-as servlet tag. implemented the run-as servlet tag + implemented the run-as servlet tag. Implemented the run-as servlet tag. jetty-4.0.1RC1 - 29 April 2002 - + avoid flushes during requestdispatcher.includes Avoid flushes during + + avoid flushes during requestdispatcher.includes avoid flushes during a avoid + flushes during requestdispatcher.includes avoid flushes during avoid flushes + during requestdispatcher.includes Avoid flushes during RequestDispatcher.includes - + better handling if no realm configured. Better handling if no realm - configured. - + expand bytebuffer full limit with capacity. Expand ByteBuffer full limit + + better handling if no realm configured. better handling if no realm be + better handling if no realm configured. better handling if no realm better + handling if no realm configured. Better handling if no realm configured. + + expand bytebuffer full limit with capacity. expand bytebuffer full lim + expand bytebuffer full limit with capacity. expand bytebuffer full lim + expand bytebuffer full limit with capacity. Expand ByteBuffer full limit with capacity. - + fixed double filtering of welcome files. Fixed double filtering of welcome - files. - + fixed form authentication auth of login page bug. Fixed FORM authentication - auth of login page bug. - + fixed settempdirectory creation bug Fixed setTempDirectory creation bug - + improved flushing of chunked responses Improved flushing of chunked - responses + + fixed double filtering of welcome files. fixed double filtering of wel fixed + double filtering of welcome files. fixed double filtering of wel fixed + double filtering of welcome files. Fixed double filtering of welcome files. + + fixed form authentication auth of login page bug. fixed form authentic fixed + form authentication auth of login page bug. fixed form authentic fixed form + authentication auth of login page bug. Fixed FORM authentication auth of + login page bug. + + fixed settempdirectory creation bug fixed settempdirectory creation bu fixed + settempdirectory creation bug fixed settempdirectory creation bu fixed + settempdirectory creation bug Fixed setTempDirectory creation bug + + improved flushing of chunked responses improved flushing of chunked im + improved flushing of chunked responses improved flushing of chunked improved + flushing of chunked responses Improved flushing of chunked responses jetty-4.0.1RC0 - 18 April 2002 + abstractsessionmanager sets contextclassloader for scavanging + abstractsessionmanager sets contextclassloader for scavanging + abstractsessionmanager sets contextclassloader for scavanging AbstractSessionManager sets contextClassLoader for scavanging - + added extract arg to addwebapplications Added extract arg to - addWebApplications - + dtd allows static "get" and "set" methods to be invoked. DTD allows static - "Get" and "Set" methods to be invoked. - + extended facade interfaces to httpresponse.senderror Extended facade + + added extract arg to addwebapplications added extract arg to added ext added + extract arg to addwebapplications added extract arg to added extract arg to + addwebapplications Added extract arg to addWebApplications + + dtd allows static "get" and "set" methods to be invoked. dtd allows st dtd + allows static "get" and "set" methods to be invoked. dtd allows st dtd + allows static "get" and "set" methods to be invoked. DTD allows static "Get" + and "Set" methods to be invoked. + + extended facade interfaces to httpresponse.senderror extended facade + extended facade interfaces to httpresponse.senderror extended facade + extended facade interfaces to httpresponse.senderror Extended facade interfaces to HttpResponse.sendError - + fixed delayed response bug: stopped httpconnection consuming input fro Fixed + + fixed delayed response bug: stopped httpconnection consuming input fro fixed + delayed response bug: stopped httpconnection consuming input fro fixed + delayed response bug: stopped httpconnection consuming input fro Fixed delayed response bug: Stopped HttpConnection consuming input from timedout connection. - + moved basic auth handling to httprequest Moved basic auth handling to - HttpRequest - + pass pathparams via welcome file forward for jsessionid Pass pathParams via + + moved basic auth handling to httprequest moved basic auth handling to moved + basic auth handling to httprequest moved basic auth handling to moved basic + auth handling to httprequest Moved basic auth handling to HttpRequest + + pass pathparams via welcome file forward for jsessionid pass pathparam pass + pathparams via welcome file forward for jsessionid pass pathparam pass + pathparams via welcome file forward for jsessionid Pass pathParams via welcome file forward for jsessionid - + set thread context classloader for webapp load-on-startup inits Set thread + + set thread context classloader for webapp load-on-startup inits set th set + thread context classloader for webapp load-on-startup inits set th set + thread context classloader for webapp load-on-startup inits Set thread context classloader for webapp load-on-startup inits - + updated jasper to cvs snapshot from apr 18 18:50:59 bst 2002 Updated Jasper + + updated jasper to cvs snapshot from apr 18 18:50:59 bst 2002 updated j + updated jasper to cvs snapshot from apr 18 18:50:59 bst 2002 updated j + updated jasper to cvs snapshot from apr 18 18:50:59 bst 2002 Updated Jasper to CVS snapshot from Apr 18 18:50:59 BST 2002 jetty-4.0.0 - 22 March 2002 - + added ipaddresshandler for ip restrictions Added IPAddressHandler for IP + + added ipaddresshandler for ip restrictions added ipaddresshandler for added + ipaddresshandler for ip restrictions added ipaddresshandler for added + ipaddresshandler for ip restrictions Added IPAddressHandler for IP restrictions - + jetty.sh cygwin support Jetty.sh cygwin support - + minor documentation updates. Minor documentation updates. - + updated contributors. Updated contributors. - + updated tutorial configure version Updated tutorial configure version + + jetty.sh cygwin support jetty.sh cygwin support jetty.sh cygwin suppor + jetty.sh cygwin support jetty.sh cygwin support jetty.sh cygwin support + Jetty.sh cygwin support + + minor documentation updates. minor documentation updates. minor minor + documentation updates. minor documentation updates. minor documentation + updates. Minor documentation updates. + + updated contributors. updated contributors. updated contributors. upda + updated contributors. updated contributors. updated contributors. Updated + contributors. + + updated tutorial configure version updated tutorial configure version + updated tutorial configure version updated tutorial configure version + updated tutorial configure version Updated tutorial configure version jetty-4.0.RC3 - 20 March 2002 - + changed html attribute order for mozilla quirk. Changed html attribute order + + changed html attribute order for mozilla quirk. changed html attribute + changed html attribute order for mozilla quirk. changed html attribute + changed html attribute order for mozilla quirk. Changed html attribute order for mozilla quirk. + contextinitialized notified before load-on-startup servlets. + contextinitialized notified before load-on-startup servlets. + contextinitialized notified before load-on-startup servlets. ContextInitialized notified before load-on-startup servlets. - + fixed zzz offset format to +/-hhmm Fixed ZZZ offset format to +/-HHMM - + jdbcuserrealm instantiates jdbc driver JDBCUserRealm instantiates JDBC + + fixed zzz offset format to +/-hhmm fixed zzz offset format to +/-hhmm fixed + zzz offset format to +/-hhmm fixed zzz offset format to +/-hhmm fixed zzz + offset format to +/-hhmm Fixed ZZZ offset format to +/-HHMM + + jdbcuserrealm instantiates jdbc driver jdbcuserrealm instantiates jdbc + jdbcuserrealm instantiates jdbc driver jdbcuserrealm instantiates jdbc + jdbcuserrealm instantiates jdbc driver JDBCUserRealm instantiates JDBC driver - + suppress writeroutputstream warning. Suppress WriterOutputStream warning. - + updated history Updated history + + suppress writeroutputstream warning. suppress writeroutputstream warni + suppress writeroutputstream warning. suppress writeroutputstream warni + suppress writeroutputstream warning. Suppress WriterOutputStream warning. + + updated history updated history updated history updated history updated + history updated history updated history Updated history jetty-4.0.RC2 - 12 March 2002 - + added experimental nio socketchannellistener Added experimental nio + + added experimental nio socketchannellistener added experimental nio ad added + experimental nio socketchannellistener added experimental nio added + experimental nio socketchannellistener Added experimental nio SocketChannelListener - + added skeleton load balancer Added skeleton load balancer - + disabled the password exec mechanism by default Disabled the Password EXEC + + added skeleton load balancer added skeleton load balancer added skelet added + skeleton load balancer added skeleton load balancer added skeleton load + balancer Added skeleton load balancer + + disabled the password exec mechanism by default disabled the password + disabled the password exec mechanism by default disabled the password + disabled the password exec mechanism by default Disabled the Password EXEC mechanism by default - + dont try to extract directories Dont try to extract directories - + fixed column name in jdbcuserrealm Fixed column name in JDBCUserRealm - + fixed empty referrer in ncsa log. Fixed empty referrer in NCSA log. - + fixed security constraint problem with // Fixed security constraint problem - with // - + fixed version for string xmlconfigurations Fixed version for String - XmlConfigurations - + removed redundant sessionid check. Removed redundant sessionID check. - + remove last of the class.forname calls. Remove last of the Class.forName + + dont try to extract directories dont try to extract directories dont t dont + try to extract directories dont try to extract directories dont try to + extract directories Dont try to extract directories + + fixed column name in jdbcuserrealm fixed column name in jdbcuserrealm fixed + column name in jdbcuserrealm fixed column name in jdbcuserrealm fixed column + name in jdbcuserrealm Fixed column name in JDBCUserRealm + + fixed empty referrer in ncsa log. fixed empty referrer in ncsa log. fi fixed + empty referrer in ncsa log. fixed empty referrer in ncsa log. fixed empty + referrer in ncsa log. Fixed empty referrer in NCSA log. + + fixed security constraint problem with // fixed security constraint pr fixed + security constraint problem with // fixed security constraint pr fixed + security constraint problem with // Fixed security constraint problem with + // + + fixed version for string xmlconfigurations fixed version for string fi fixed + version for string xmlconfigurations fixed version for string fixed version + for string xmlconfigurations Fixed version for String XmlConfigurations + + removed redundant sessionid check. removed redundant sessionid check. + removed redundant sessionid check. removed redundant sessionid check. + removed redundant sessionid check. Removed redundant sessionID check. + + remove last of the class.forname calls. remove last of the class.forna + remove last of the class.forname calls. remove last of the class.forna + remove last of the class.forname calls. Remove last of the Class.forName calls. - + security faq Security FAQ + + security faq security faq security faq security faq security faq security + faq security faq Security FAQ jetty-3.1.7 - 12 March 2002 - + fixed security problem with constraints being bypassed with // in urls Fixed + + fixed security problem with constraints being bypassed with // in urls fixed + security problem with constraints being bypassed with // in urls fixed + security problem with constraints being bypassed with // in urls Fixed security problem with constraints being bypassed with // in URLs jetty-4.0.RC1 - 06 March 2002 - + added contentencodinghandler for compression. Added ContentEncodingHandler - for compression. - + call response.flushbuffer after service to flush wrappers. Call + + added contentencodinghandler for compression. added contentencodinghan added + contentencodinghandler for compression. added contentencodinghan added + contentencodinghandler for compression. Added ContentEncodingHandler for + compression. + + call response.flushbuffer after service to flush wrappers. call call call + response.flushbuffer after service to flush wrappers. call call + response.flushbuffer after service to flush wrappers. Call response.flushBuffer after service to flush wrappers. - + contextdestroyed event sent before destruction. contextDestroyed event sent + + contextdestroyed event sent before destruction. contextdestroyed event + contextdestroyed event sent before destruction. contextdestroyed event + contextdestroyed event sent before destruction. contextDestroyed event sent before destruction. - + contributors list as an image to prevent spam! Contributors list as an image + + contributors list as an image to prevent spam! contributors list as an + contributors list as an image to prevent spam! contributors list as an + contributors list as an image to prevent spam! Contributors list as an image to prevent SPAM! - + empty suffix for temp directory. Empty suffix for temp directory. - + fileresource depends less on filepermissions. FileResource depends less on + + empty suffix for temp directory. empty suffix for temp directory. empt empty + suffix for temp directory. empty suffix for temp directory. empty suffix for + temp directory. Empty suffix for temp directory. + + fileresource depends less on filepermissions. fileresource depends les + fileresource depends less on filepermissions. fileresource depends les + fileresource depends less on filepermissions. FileResource depends less on FilePermissions. - + fixed filter vs forward bug. Fixed filter vs forward bug. - + fixed recursive debug loop in logging. Fixed recursive DEBUG loop in - Logging. - + improved efficiency of quality list handling Improved efficiency of quality + + fixed filter vs forward bug. fixed filter vs forward bug. fixed filter fixed + filter vs forward bug. fixed filter vs forward bug. fixed filter vs forward + bug. Fixed filter vs forward bug. + + fixed recursive debug loop in logging. fixed recursive debug loop in f fixed + recursive debug loop in logging. fixed recursive debug loop in fixed + recursive debug loop in logging. Fixed recursive DEBUG loop in Logging. + + improved efficiency of quality list handling improved efficiency of qu + improved efficiency of quality list handling improved efficiency of qu + improved efficiency of quality list handling Improved efficiency of quality list handling - + minor changes to make httpserver work on j2me cvm Minor changes to make - HttpServer work on J2ME CVM - + simplified filter api to chunkable streams Simplified filter API to + + minor changes to make httpserver work on j2me cvm minor changes to mak minor + changes to make httpserver work on j2me cvm minor changes to mak minor + changes to make httpserver work on j2me cvm Minor changes to make HttpServer + work on J2ME CVM + + simplified filter api to chunkable streams simplified filter api to + simplified filter api to chunkable streams simplified filter api to + simplified filter api to chunkable streams Simplified filter API to chunkable streams - + updated jetty.sh to always respect arguments. Updated jetty.sh to always + + updated jetty.sh to always respect arguments. updated jetty.sh to alwa + updated jetty.sh to always respect arguments. updated jetty.sh to alwa + updated jetty.sh to always respect arguments. Updated jetty.sh to always respect arguments. - + warn if jdk 1.4 classes used on jvm <1.4 Warn if jdk 1.4 classes used on JVM - <1.4 + + warn if jdk 1.4 classes used on jvm <1.4 warn if jdk 1.4 classes used warn + if jdk 1.4 classes used on jvm <1.4 warn if jdk 1.4 classes used warn if + jdk 1.4 classes used on jvm <1.4 Warn if jdk 1.4 classes used on JVM <1.4 + webapplication will use contextloader even without web-inf directory. + webapplication will use contextloader even without web-inf directory. + webapplication will use contextloader even without web-inf directory. WebApplication will use ContextLoader even without WEB-INF directory. + xmlparser is validating by default. use o.m.x.xmlparser.notvalidating + xmlparser is validating by default. use o.m.x.xmlparser.notvalidating + xmlparser is validating by default. use o.m.x.xmlparser.notvalidating XmlParser is validating by default. use o.m.x.XmlParser.NotValidating property to change. jetty-3.1.6 - 28 February 2002 + dispatcher.forward dispatches directly to servletholder to avoid prema + dispatcher.forward dispatches directly to servletholder to avoid prema + dispatcher.forward dispatches directly to servletholder to avoid prema Dispatcher.forward dispatches directly to ServletHolder to avoid premature exception handling. - + empty suffix for temp directory. Empty suffix for temp directory. - + fixed httpfields remove bug Fixed HttpFields remove bug + + empty suffix for temp directory. empty suffix for temp directory. empt empty + suffix for temp directory. empty suffix for temp directory. empty suffix for + temp directory. Empty suffix for temp directory. + + fixed httpfields remove bug fixed httpfields remove bug fixed httpfiel fixed + httpfields remove bug fixed httpfields remove bug fixed httpfields remove + bug Fixed HttpFields remove bug + httpresponse.senderror makes a better attempt at finding an error page + httpresponse.senderror makes a better attempt at finding an error page + httpresponse.senderror makes a better attempt at finding an error page HttpResponse.sendError makes a better attempt at finding an error page. + implemented 2.3 clarifications to security constraint semantics please + implemented 2.3 clarifications to security constraint semantics please + implemented 2.3 clarifications to security constraint semantics please Implemented 2.3 clarifications to security constraint semantics PLEASE REVIEW YOUR SECURITY CONSTRAINTS (see README). - + lineinput can handle any sized marks LineInput can handle any sized marks - + set listeners default scheme Set Listeners default scheme + + lineinput can handle any sized marks lineinput can handle any sized ma + lineinput can handle any sized marks lineinput can handle any sized ma + lineinput can handle any sized marks LineInput can handle any sized marks + + set listeners default scheme set listeners default scheme set listener set + listeners default scheme set listeners default scheme set listeners default + scheme Set Listeners default scheme jetty-4.0.B2 - 25 February 2002 - + accept jetty-web.xml or web-jetty.xml in web-inf Accept jetty-web.xml or + + accept jetty-web.xml or web-jetty.xml in web-inf accept jetty-web.xml accept + jetty-web.xml or web-jetty.xml in web-inf accept jetty-web.xml accept + jetty-web.xml or web-jetty.xml in web-inf Accept jetty-web.xml or web-jetty.xml in WEB-INF - + added loggerlogsink to direct jetty logs to jdk1.4 log. Added LoggerLogSink - to direct Jetty Logs to JDK1.4 Log. - + added optional jdk 1.4 src tree Added optional JDK 1.4 src tree - + added org.mortbay.http.jdbcuserrealm Added org.mortbay.http.JDBCUserRealm - + added string constructor to xmlconfiguration. Added String constructor to + + added loggerlogsink to direct jetty logs to jdk1.4 log. added loggerlo added + loggerlogsink to direct jetty logs to jdk1.4 log. added loggerlo added + loggerlogsink to direct jetty logs to jdk1.4 log. Added LoggerLogSink to + direct Jetty Logs to JDK1.4 Log. + + added optional jdk 1.4 src tree added optional jdk 1.4 src tree added added + optional jdk 1.4 src tree added optional jdk 1.4 src tree added optional jdk + 1.4 src tree Added optional JDK 1.4 src tree + + added org.mortbay.http.jdbcuserrealm added org.mortbay.http.jdbcuserre added + org.mortbay.http.jdbcuserrealm added org.mortbay.http.jdbcuserre added + org.mortbay.http.jdbcuserrealm Added org.mortbay.http.JDBCUserRealm + + added string constructor to xmlconfiguration. added string constructor added + string constructor to xmlconfiguration. added string constructor added + string constructor to xmlconfiguration. Added String constructor to XmlConfiguration. - + adjust servlet facades for welcome redirection Adjust servlet facades for - welcome redirection - + improved default jetty.xml Improved default jetty.xml - + improve handling of unknown url protocols. Improve handling of unknown URL + + adjust servlet facades for welcome redirection adjust servlet facades adjust + servlet facades for welcome redirection adjust servlet facades adjust + servlet facades for welcome redirection Adjust servlet facades for welcome + redirection + + improved default jetty.xml improved default jetty.xml improved default + improved default jetty.xml improved default jetty.xml improved default + jetty.xml Improved default jetty.xml + + improve handling of unknown url protocols. improve handling of unknown + improve handling of unknown url protocols. improve handling of unknown + improve handling of unknown url protocols. Improve handling of unknown URL protocols. - + init classloader for jspservlet Init classloader for JspServlet - + minor jasper updates Minor Jasper updates - + o.m.u.frame uses jdk1.4 stack frame handling o.m.u.Frame uses JDK1.4 stack + + init classloader for jspservlet init classloader for jspservlet init init + classloader for jspservlet init classloader for jspservlet init classloader + for jspservlet Init classloader for JspServlet + + minor jasper updates minor jasper updates minor jasper updates minor j minor + jasper updates minor jasper updates minor jasper updates Minor Jasper + updates + + o.m.u.frame uses jdk1.4 stack frame handling o.m.u.frame uses jdk1.4 s + o.m.u.frame uses jdk1.4 stack frame handling o.m.u.frame uses jdk1.4 s + o.m.u.frame uses jdk1.4 stack frame handling o.m.u.Frame uses JDK1.4 stack frame handling - + simplified addwebapplication Simplified addWebApplication + + simplified addwebapplication simplified addwebapplication simplified + simplified addwebapplication simplified addwebapplication simplified + addwebapplication Simplified addWebApplication + slightly more agressive eating unused input from non persistent connec + slightly more agressive eating unused input from non persistent connec + slightly more agressive eating unused input from non persistent connec Slightly more agressive eating unused input from non persistent connection. - + start servlethandler as part of the filterhandler start. Start - ServletHandler as part of the FilterHandler start. - + user / mapping rather than /* for servlet requests to static content User / - mapping rather than /* for servlet requests to static content + + start servlethandler as part of the filterhandler start. start start start + servlethandler as part of the filterhandler start. start start + servlethandler as part of the filterhandler start. Start ServletHandler as + part of the FilterHandler start. + + user / mapping rather than /* for servlet requests to static content u user + / mapping rather than /* for servlet requests to static content u user / + mapping rather than /* for servlet requests to static content User / mapping + rather than /* for servlet requests to static content jetty-4.0.B1 - 13 February 2002 - + added setclassloader and moved getfileclasspath to httpcontext Added + + added setclassloader and moved getfileclasspath to httpcontext added a added + setclassloader and moved getfileclasspath to httpcontext added added + setclassloader and moved getfileclasspath to httpcontext Added setClassLoader and moved getFileClassPath to HttpContext - + getrequesturi returns encoded path getRequestURI returns encoded path - + httpconnection always eats unused bodies HttpConnection always eats unused + + getrequesturi returns encoded path getrequesturi returns encoded path + getrequesturi returns encoded path getrequesturi returns encoded path + getrequesturi returns encoded path getRequestURI returns encoded path + + httpconnection always eats unused bodies httpconnection always eats un + httpconnection always eats unused bodies httpconnection always eats un + httpconnection always eats unused bodies HttpConnection always eats unused bodies - + lineinput waits for lf after cf if seen crlf before. LineInput waits for LF + + lineinput waits for lf after cf if seen crlf before. lineinput waits f + lineinput waits for lf after cf if seen crlf before. lineinput waits f + lineinput waits for lf after cf if seen crlf before. LineInput waits for LF after CF if seen CRLF before. - + merged httpmessage and message Merged HttpMessage and Message + + merged httpmessage and message merged httpmessage and message merged merged + httpmessage and message merged httpmessage and message merged httpmessage + and message Merged HttpMessage and Message + servlet request destined for static content returns paths as default s + servlet request destined for static content returns paths as default s + servlet request destined for static content returns paths as default s Servlet request destined for static content returns paths as default servlet - + suppress error only for ioexceptions not derivitives. Suppress error only + + suppress error only for ioexceptions not derivitives. suppress error o + suppress error only for ioexceptions not derivitives. suppress error o + suppress error only for ioexceptions not derivitives. Suppress error only for IOExceptions not derivitives. - + updated examples webapp from tomcat Updated examples webapp from tomcat - + writeroutputstream so jsps can include static resources. WriterOutputStream + + updated examples webapp from tomcat updated examples webapp from tomca + updated examples webapp from tomcat updated examples webapp from tomca + updated examples webapp from tomcat Updated examples webapp from tomcat + + writeroutputstream so jsps can include static resources. writeroutputs + writeroutputstream so jsps can include static resources. writeroutputs + writeroutputstream so jsps can include static resources. WriterOutputStream so JSPs can include static resources. jetty-4.0.B0 - 04 February 2002 - + added abstractsessionmanager Added AbstractSessionManager - + added array element to xmlconfiguration Added Array element to - XMLConfiguration - + added hack for compat tests in watchdog for old tomcat stuff Added hack for - compat tests in watchdog for old tomcat stuff - + added index links to tutorial Added index links to tutorial - + allow listener schemes to be set. Allow listener schemes to be set. - + common handling of trace Common handling of TRACE - + factor out rolloverfileoutputstream from outputstreamlogsink Factor out + + added abstractsessionmanager added abstractsessionmanager added added + abstractsessionmanager added abstractsessionmanager added + abstractsessionmanager Added AbstractSessionManager + + added array element to xmlconfiguration added array element to added a added + array element to xmlconfiguration added array element to added array element + to xmlconfiguration Added Array element to XMLConfiguration + + added hack for compat tests in watchdog for old tomcat stuff added hac added + hack for compat tests in watchdog for old tomcat stuff added hac added hack + for compat tests in watchdog for old tomcat stuff Added hack for compat + tests in watchdog for old tomcat stuff + + added index links to tutorial added index links to tutorial added inde added + index links to tutorial added index links to tutorial added index links to + tutorial Added index links to tutorial + + allow listener schemes to be set. allow listener schemes to be set. al allow + listener schemes to be set. allow listener schemes to be set. allow listener + schemes to be set. Allow listener schemes to be set. + + common handling of trace common handling of trace common handling of t + common handling of trace common handling of trace common handling of trace + Common handling of TRACE + + factor out rolloverfileoutputstream from outputstreamlogsink factor ou + factor out rolloverfileoutputstream from outputstreamlogsink factor ou + factor out rolloverfileoutputstream from outputstreamlogsink Factor out RolloverFileOutputStream from OutputStreamLogSink - + fixed httpfields remove bug Fixed HttpFields remove bug - + handle special characters in resource file names better. Handle special + + fixed httpfields remove bug fixed httpfields remove bug fixed httpfiel fixed + httpfields remove bug fixed httpfields remove bug fixed httpfields remove + bug Fixed HttpFields remove bug + + handle special characters in resource file names better. handle specia + handle special characters in resource file names better. handle specia + handle special characters in resource file names better. Handle special characters in resource file names better. - + httpcontext destroy HttpContext destroy + + httpcontext destroy httpcontext destroy httpcontext destroy httpcontex + httpcontext destroy httpcontext destroy httpcontext destroy HttpContext + destroy + implemented 2.3 security constraint semantics please review your secur + implemented 2.3 security constraint semantics please review your secur + implemented 2.3 security constraint semantics please review your secur Implemented 2.3 security constraint semantics PLEASE REVIEW YOUR SECURITY CONSTRAINTS (see README). - + reduce object count and add hash width to stringmap Reduce object count and + + reduce object count and add hash width to stringmap reduce object coun + reduce object count and add hash width to stringmap reduce object coun + reduce object count and add hash width to stringmap Reduce object count and add hash width to StringMap - + release process builds jettyextra Release process builds JettyExtra - + removed triggers from code. Removed triggers from Code. - + remove request logsink and replace with requestlog using Remove request + + release process builds jettyextra release process builds jettyextra re + release process builds jettyextra release process builds jettyextra release + process builds jettyextra Release process builds JettyExtra + + removed triggers from code. removed triggers from code. removed trigge + removed triggers from code. removed triggers from code. removed triggers + from code. Removed triggers from Code. + + remove request logsink and replace with requestlog using remove reques + remove request logsink and replace with requestlog using remove reques + remove request logsink and replace with requestlog using Remove request logSink and replace with RequestLog using RolloverFileOutputStream - + renamed gethttpservers and added setanonymous Renamed getHttpServers and + + renamed gethttpservers and added setanonymous renamed gethttpservers a + renamed gethttpservers and added setanonymous renamed gethttpservers a + renamed gethttpservers and added setanonymous Renamed getHttpServers and added setAnonymous - + stop and remove notfound context for httpserver Stop and remove NotFound - context for HttpServer - + support random session ids in hashsessionmanager. Support Random Session IDs + + stop and remove notfound context for httpserver stop and remove notfou stop + and remove notfound context for httpserver stop and remove notfou stop and + remove notfound context for httpserver Stop and remove NotFound context for + HttpServer + + support random session ids in hashsessionmanager. support random sessi + support random session ids in hashsessionmanager. support random sessi + support random session ids in hashsessionmanager. Support Random Session IDs in HashSessionManager. - + updated crimson to 1.1.3 Updated crimson to 1.1.3 - + updated tutorial and faq Updated tutorial and FAQ - + welcome file dispatch sets requesturi. Welcome file dispatch sets - requestURI. - + welcome files may be relative Welcome files may be relative + + updated crimson to 1.1.3 updated crimson to 1.1.3 updated crimson to 1 + updated crimson to 1.1.3 updated crimson to 1.1.3 updated crimson to 1.1.3 + Updated crimson to 1.1.3 + + updated tutorial and faq updated tutorial and faq updated tutorial and + updated tutorial and faq updated tutorial and faq updated tutorial and faq + Updated tutorial and FAQ + + welcome file dispatch sets requesturi. welcome file dispatch sets welc + welcome file dispatch sets requesturi. welcome file dispatch sets welcome + file dispatch sets requesturi. Welcome file dispatch sets requestURI. + + welcome files may be relative welcome files may be relative welcome fi + welcome files may be relative welcome files may be relative welcome files + may be relative Welcome files may be relative jetty-4.0.D4 - 14 January 2002 - + added blueribbon campaign. Added BlueRibbon campaign. - + added isauthenticated to userprincipal Added isAuthenticated to - UserPrincipal - + extract war files to standard temp directory Extract WAR files to standard + + added blueribbon campaign. added blueribbon campaign. added blueribbon added + blueribbon campaign. added blueribbon campaign. added blueribbon campaign. + Added BlueRibbon campaign. + + added isauthenticated to userprincipal added isauthenticated to added added + isauthenticated to userprincipal added isauthenticated to added + isauthenticated to userprincipal Added isAuthenticated to UserPrincipal + + extract war files to standard temp directory extract war files to stan + extract war files to standard temp directory extract war files to stan + extract war files to standard temp directory Extract WAR files to standard temp directory - + fixed noaccess auth demo. Fixed noaccess auth demo. - + form auth caches userprincipal FORM auth caches UserPrincipal - + handle servletrequestwrappers for generic servlets Handle - ServletRequestWrappers for Generic Servlets - + improved handling of unavailableexception Improved handling of - UnavailableException - + improved httpresponsse.senderror error page matching. Improved + + fixed noaccess auth demo. fixed noaccess auth demo. fixed noaccess aut fixed + noaccess auth demo. fixed noaccess auth demo. fixed noaccess auth demo. + Fixed noaccess auth demo. + + form auth caches userprincipal form auth caches userprincipal form aut form + auth caches userprincipal form auth caches userprincipal form auth caches + userprincipal FORM auth caches UserPrincipal + + handle servletrequestwrappers for generic servlets handle handle handle + servletrequestwrappers for generic servlets handle handle + servletrequestwrappers for generic servlets Handle ServletRequestWrappers + for Generic Servlets + + improved handling of unavailableexception improved handling of improve + improved handling of unavailableexception improved handling of improved + handling of unavailableexception Improved handling of UnavailableException + + improved httpresponsse.senderror error page matching. improved improve + improved httpresponsse.senderror error page matching. improved improved + httpresponsse.senderror error page matching. Improved HttpResponsse.sendError error page matching. - + prevent output after forward Prevent output after forward - + requestdispatcher uses cached resources for include RequestDispatcher uses + + prevent output after forward prevent output after forward prevent outp + prevent output after forward prevent output after forward prevent output + after forward Prevent output after forward + + requestdispatcher uses cached resources for include requestdispatcher + requestdispatcher uses cached resources for include requestdispatcher + requestdispatcher uses cached resources for include RequestDispatcher uses cached resources for include - + uri uses utf8 for % encodings. URI uses UTF8 for % encodings. + + uri uses utf8 for % encodings. uri uses utf8 for % encodings. uri uses uri + uses utf8 for % encodings. uri uses utf8 for % encodings. uri uses utf8 for + % encodings. URI uses UTF8 for % encodings. jetty-4.0.D3 - 31 December 2001 - + cookies with maxage==0 expire on 1 jan 1970 cookies with maxAge==0 expire on + + cookies with maxage==0 expire on 1 jan 1970 cookies with maxage==0 exp + cookies with maxage==0 expire on 1 jan 1970 cookies with maxage==0 exp + cookies with maxage==0 expire on 1 jan 1970 cookies with maxAge==0 expire on 1 jan 1970 - + corrected name to http_referer in cgi servlet. Corrected name to - HTTP_REFERER in CGI Servlet. - + datecache handles misses better. DateCache handles misses better. - + fixed cached filter wrapping. Fixed cached filter wrapping. - + fixed contextloader lib handling. Fixed ContextLoader lib handling. - + fixed getlocale again Fixed getLocale again - + fixed urlencoding for % + combination. Fixed UrlEncoding for % + - combination. - + generalized temp file handling Generalized temp file handling - + httpfields uses datecache more. HttpFields uses DateCache more. - + made frame members private and fixed test harness Made Frame members private - and fixed test harness - + moved admin port to 8081 to avoid jbuilder Moved admin port to 8081 to avoid - JBuilder - + patch jasper to 20011229101000 Patch jasper to 20011229101000 - + removed limits on mark in lineinput. Removed limits on mark in LineInput. - + setcookie always has equals setCookie always has equals + + corrected name to http_referer in cgi servlet. corrected name to corre + corrected name to http_referer in cgi servlet. corrected name to corrected + name to http_referer in cgi servlet. Corrected name to HTTP_REFERER in CGI + Servlet. + + datecache handles misses better. datecache handles misses better. date + datecache handles misses better. datecache handles misses better. datecache + handles misses better. DateCache handles misses better. + + fixed cached filter wrapping. fixed cached filter wrapping. fixed cach fixed + cached filter wrapping. fixed cached filter wrapping. fixed cached filter + wrapping. Fixed cached filter wrapping. + + fixed contextloader lib handling. fixed contextloader lib handling. fi fixed + contextloader lib handling. fixed contextloader lib handling. fixed + contextloader lib handling. Fixed ContextLoader lib handling. + + fixed getlocale again fixed getlocale again fixed getlocale again fixe fixed + getlocale again fixed getlocale again fixed getlocale again Fixed getLocale + again + + fixed urlencoding for % + combination. fixed urlencoding for % + fixed fixed + urlencoding for % + combination. fixed urlencoding for % + fixed urlencoding + for % + combination. Fixed UrlEncoding for % + combination. + + generalized temp file handling generalized temp file handling generali + generalized temp file handling generalized temp file handling generalized + temp file handling Generalized temp file handling + + httpfields uses datecache more. httpfields uses datecache more. httpfi + httpfields uses datecache more. httpfields uses datecache more. httpfields + uses datecache more. HttpFields uses DateCache more. + + made frame members private and fixed test harness made frame members p made + frame members private and fixed test harness made frame members p made frame + members private and fixed test harness Made Frame members private and fixed + test harness + + moved admin port to 8081 to avoid jbuilder moved admin port to 8081 to moved + admin port to 8081 to avoid jbuilder moved admin port to 8081 to moved admin + port to 8081 to avoid jbuilder Moved admin port to 8081 to avoid JBuilder + + patch jasper to 20011229101000 patch jasper to 20011229101000 patch ja patch + jasper to 20011229101000 patch jasper to 20011229101000 patch jasper to + 20011229101000 Patch jasper to 20011229101000 + + removed limits on mark in lineinput. removed limits on mark in lineinp + removed limits on mark in lineinput. removed limits on mark in lineinp + removed limits on mark in lineinput. Removed limits on mark in LineInput. + + setcookie always has equals setcookie always has equals setcookie alwa + setcookie always has equals setcookie always has equals setcookie always has + equals setCookie always has equals jetty-3.1.5 - 11 December 2001 - + allow posts to static resources. Allow POSTs to static resources. - + branched at jetty_3_1 Branched at Jetty_3_1 - + cookies with maxage==0 expired 1 jan 1970 cookies with maxage==0 expired 1 + + allow posts to static resources. allow posts to static resources. allo allow + posts to static resources. allow posts to static resources. allow posts to + static resources. Allow POSTs to static resources. + + branched at jetty_3_1 branched at jetty_3_1 branched at jetty_3_1 bran + branched at jetty_3_1 branched at jetty_3_1 branched at jetty_3_1 Branched + at Jetty_3_1 + + cookies with maxage==0 expired 1 jan 1970 cookies with maxage==0 expir + cookies with maxage==0 expired 1 jan 1970 cookies with maxage==0 expir + cookies with maxage==0 expired 1 jan 1970 cookies with maxage==0 expired 1 jan 1970 - + fixed chunableinputstream.resetstream bug. Fixed - ChunableInputStream.resetStream bug. - + fixed formatting of redirecturls for ns4.08 Fixed formatting of redirectURLs - for NS4.08 - + ignore io errors when trying to persist connections. Ignore IO errors when - trying to persist connections. - + setcookie always has equals for cookie value setCookie always has equals for + + fixed chunableinputstream.resetstream bug. fixed fixed fixed + chunableinputstream.resetstream bug. fixed fixed + chunableinputstream.resetstream bug. Fixed ChunableInputStream.resetStream + bug. + + fixed formatting of redirecturls for ns4.08 fixed formatting of redire fixed + formatting of redirecturls for ns4.08 fixed formatting of redire fixed + formatting of redirecturls for ns4.08 Fixed formatting of redirectURLs for + NS4.08 + + ignore io errors when trying to persist connections. ignore io errors ignore + io errors when trying to persist connections. ignore io errors ignore io + errors when trying to persist connections. Ignore IO errors when trying to + persist connections. + + setcookie always has equals for cookie value setcookie always has equa + setcookie always has equals for cookie value setcookie always has equa + setcookie always has equals for cookie value setCookie always has equals for cookie value + stopjob/killstop in threadpool to improve stopping threadedserver on s + stopjob/killstop in threadpool to improve stopping threadedserver on s + stopjob/killstop in threadpool to improve stopping threadedserver on s stopJob/killStop in ThreadPool to improve stopping ThreadedServer on some platforms. jetty-4.0.D2 - 02 December 2001 - + added addwebapplications auto discovery added addWebApplications auto - discovery - + allow posts to static resources. Allow POSTs to static resources. - + better handling of charset in form encoding. Better handling of charset in + + added addwebapplications auto discovery added addwebapplications auto added + addwebapplications auto discovery added addwebapplications auto added + addwebapplications auto discovery added addWebApplications auto discovery + + allow posts to static resources. allow posts to static resources. allo allow + posts to static resources. allow posts to static resources. allow posts to + static resources. Allow POSTs to static resources. + + better handling of charset in form encoding. better handling of charse + better handling of charset in form encoding. better handling of charse + better handling of charset in form encoding. Better handling of charset in form encoding. - + disabled last forwarding by setpath() Disabled last forwarding by setPath() - + fixed chunableinputstream.resetstream bug. Fixed - ChunableInputStream.resetStream bug. - + fixed formatting of redirect urls. Fixed formatting of redirect URLs. - + ignore io errors when trying to persist connections. Ignore IO errors when - trying to persist connections. - + made the root context a webapplication. Made the root context a - webapplication. - + moved demo docroot/servlets to demo directory Moved demo docroot/servlets to - demo directory - + new event model to decouple from beans container. New event model to - decouple from beans container. - + removed demo.java (until updated). Removed Demo.java (until updated). - + removed forwardhandler. Removed ForwardHandler. + + disabled last forwarding by setpath() disabled last forwarding by setp + disabled last forwarding by setpath() disabled last forwarding by setp + disabled last forwarding by setpath() Disabled last forwarding by setPath() + + fixed chunableinputstream.resetstream bug. fixed fixed fixed + chunableinputstream.resetstream bug. fixed fixed + chunableinputstream.resetstream bug. Fixed ChunableInputStream.resetStream + bug. + + fixed formatting of redirect urls. fixed formatting of redirect urls. fixed + formatting of redirect urls. fixed formatting of redirect urls. fixed + formatting of redirect urls. Fixed formatting of redirect URLs. + + ignore io errors when trying to persist connections. ignore io errors ignore + io errors when trying to persist connections. ignore io errors ignore io + errors when trying to persist connections. Ignore IO errors when trying to + persist connections. + + made the root context a webapplication. made the root context a made t made + the root context a webapplication. made the root context a made the root + context a webapplication. Made the root context a webapplication. + + moved demo docroot/servlets to demo directory moved demo docroot/servl moved + demo docroot/servlets to demo directory moved demo docroot/servl moved demo + docroot/servlets to demo directory Moved demo docroot/servlets to demo + directory + + new event model to decouple from beans container. new event model to n new + event model to decouple from beans container. new event model to new event + model to decouple from beans container. New event model to decouple from + beans container. + + removed demo.java (until updated). removed demo.java (until updated). + removed demo.java (until updated). removed demo.java (until updated). + removed demo.java (until updated). Removed Demo.java (until updated). + + removed forwardhandler. removed forwardhandler. removed forwardhandler + removed forwardhandler. removed forwardhandler. removed forwardhandler. + Removed ForwardHandler. + removed most of the old doco, which needs to be rewritten and added ag + removed most of the old doco, which needs to be rewritten and added ag + removed most of the old doco, which needs to be rewritten and added ag Removed most of the old doco, which needs to be rewritten and added again. - + removed request set methods (will be replaced) Removed Request set methods + + removed request set methods (will be replaced) removed request set met + removed request set methods (will be replaced) removed request set met + removed request set methods (will be replaced) Removed Request set methods (will be replaced) - + restructured for demo and test hierarchies Restructured for demo and test + + restructured for demo and test hierarchies restructured for demo and t + restructured for demo and test hierarchies restructured for demo and t + restructured for demo and test hierarchies Restructured for demo and test hierarchies + stopjob/killstop in threadpool to improve stopping threadedserver on s + stopjob/killstop in threadpool to improve stopping threadedserver on s + stopjob/killstop in threadpool to improve stopping threadedserver on s stopJob/killStop in ThreadPool to improve stopping ThreadedServer on some platforms. jetty-4.0.D1 - 14 November 2001 - + added context and session event handling Added Context and Session Event - Handling - + added filterhandler Added FilterHandler - + added filterholder Added FilterHolder - + changed handlercontext to httpcontext Changed HandlerContext to HttpContext - + fixed bug with request dispatcher parameters Fixed bug with request - dispatcher parameters - + fixed servlethandler with no servlets Fixed ServletHandler with no servlets - + new contextloader implementation. New ContextLoader implementation. - + new dispatcher implementation New Dispatcher implementation - + removed destroy methods Removed destroy methods - + simplified multimap Simplified MultiMap - + simplified servlethandler Simplified ServletHandler + + added context and session event handling added context and session eve added + context and session event handling added context and session eve added + context and session event handling Added Context and Session Event Handling + + added filterhandler added filterhandler added filterhandler added added + filterhandler added filterhandler added filterhandler Added FilterHandler + + added filterholder added filterholder added filterholder added filterh added + filterholder added filterholder added filterholder Added FilterHolder + + changed handlercontext to httpcontext changed handlercontext to httpco + changed handlercontext to httpcontext changed handlercontext to httpco + changed handlercontext to httpcontext Changed HandlerContext to HttpContext + + fixed bug with request dispatcher parameters fixed bug with request fi fixed + bug with request dispatcher parameters fixed bug with request fixed bug with + request dispatcher parameters Fixed bug with request dispatcher parameters + + fixed servlethandler with no servlets fixed servlethandler with no ser fixed + servlethandler with no servlets fixed servlethandler with no ser fixed + servlethandler with no servlets Fixed ServletHandler with no servlets + + new contextloader implementation. new contextloader implementation. ne new + contextloader implementation. new contextloader implementation. new + contextloader implementation. New ContextLoader implementation. + + new dispatcher implementation new dispatcher implementation new dispat new + dispatcher implementation new dispatcher implementation new dispatcher + implementation New Dispatcher implementation + + removed destroy methods removed destroy methods removed destroy method + removed destroy methods removed destroy methods removed destroy methods + Removed destroy methods + + simplified multimap simplified multimap simplified multimap simplified + simplified multimap simplified multimap simplified multimap Simplified + MultiMap + + simplified servlethandler simplified servlethandler simplified simplified + servlethandler simplified servlethandler simplified servlethandler + Simplified ServletHandler jetty-4.0.D0 - 06 November 2001 - + 1.2 jsp api 1.2 JSP API - + 2.3 servlet api 2.3 Servlet API - + added examples webapp from tomcat4 Added examples webapp from tomcat4 - + branched at jetty_3_1 Branched at Jetty_3_1 - + branched from jetty_3_1 == jetty_3_1_4 Branched from Jetty_3_1 == - Jetty_3_1_4 - + jasper from tomcat4 Jasper from tomcat4 - + start sessionmanager abstraction. Start SessionManager abstraction. + + 1.2 jsp api 1.2 jsp api 1.2 jsp api 1.2 jsp api 1.2 jsp api 1.2 jsp api 1.2 + jsp api 1.2 JSP API + + 2.3 servlet api 2.3 servlet api 2.3 servlet api 2.3 servlet api 2.3 servlet + api 2.3 servlet api 2.3 servlet api 2.3 Servlet API + + added examples webapp from tomcat4 added examples webapp from tomcat4 added + examples webapp from tomcat4 added examples webapp from tomcat4 added + examples webapp from tomcat4 Added examples webapp from tomcat4 + + branched at jetty_3_1 branched at jetty_3_1 branched at jetty_3_1 bran + branched at jetty_3_1 branched at jetty_3_1 branched at jetty_3_1 Branched + at Jetty_3_1 + + branched from jetty_3_1 == jetty_3_1_4 branched from jetty_3_1 == bran + branched from jetty_3_1 == jetty_3_1_4 branched from jetty_3_1 == branched + from jetty_3_1 == jetty_3_1_4 Branched from Jetty_3_1 == Jetty_3_1_4 + + jasper from tomcat4 jasper from tomcat4 jasper from tomcat4 jasper fro + jasper from tomcat4 jasper from tomcat4 jasper from tomcat4 Jasper from + tomcat4 + + start sessionmanager abstraction. start sessionmanager abstraction. st start + sessionmanager abstraction. start sessionmanager abstraction. start + sessionmanager abstraction. Start SessionManager abstraction. jetty-3.1.4 - 06 November 2001 - + added requestlogformat to allow extensible request logs. Added - RequestLogFormat to allow extensible request logs. - + default pathmap separator changed to ":," Default PathMap separator changed + + added requestlogformat to allow extensible request logs. added added added + requestlogformat to allow extensible request logs. added added + requestlogformat to allow extensible request logs. Added RequestLogFormat to + allow extensible request logs. + + default pathmap separator changed to ":," default pathmap separator ch + default pathmap separator changed to ":," default pathmap separator ch + default pathmap separator changed to ":," Default PathMap separator changed to ":," - + generate session unbind events on a context.stop() Generate session unbind + + generate session unbind events on a context.stop() generate session un + generate session unbind events on a context.stop() generate session un + generate session unbind events on a context.stop() Generate session unbind events on a context.stop() + getrealpath accepts \ uri separator on platforms using \ file separato + getrealpath accepts \ uri separator on platforms using \ file separato + getrealpath accepts \ uri separator on platforms using \ file separato getRealPath accepts \ URI separator on platforms using \ file separator. - + htaccesshandler made stricter on misconfiguration HTAccessHandler made + + htaccesshandler made stricter on misconfiguration htaccesshandler made + htaccesshandler made stricter on misconfiguration htaccesshandler made + htaccesshandler made stricter on misconfiguration HTAccessHandler made stricter on misconfiguration - + pathmap now ignores paths after ; or ? characters. PathMap now ignores paths + + pathmap now ignores paths after ; or ? characters. pathmap now ignores + pathmap now ignores paths after ; or ? characters. pathmap now ignores + pathmap now ignores paths after ; or ? characters. PathMap now ignores paths after ; or ? characters. - + remove old stuff from contrib that had been moved to extra Remove old stuff - from contrib that had been moved to extra - + support the zzz timezone offset format in datecache Support the ZZZ timezone + + remove old stuff from contrib that had been moved to extra remove old remove + old stuff from contrib that had been moved to extra remove old remove old + stuff from contrib that had been moved to extra Remove old stuff from + contrib that had been moved to extra + + support the zzz timezone offset format in datecache support the zzz ti + support the zzz timezone offset format in datecache support the zzz ti + support the zzz timezone offset format in datecache Support the ZZZ timezone offset format in DateCache jetty-3.1.3 - 26 October 2001 - + allow a per context userrealm instance. Allow a per context UserRealm - instance. - + correct dispatch to error pages with javax attributes set. Correct dispatch + + allow a per context userrealm instance. allow a per context userrealm allow + a per context userrealm instance. allow a per context userrealm allow a per + context userrealm instance. Allow a per context UserRealm instance. + + correct dispatch to error pages with javax attributes set. correct dis + correct dispatch to error pages with javax attributes set. correct dis + correct dispatch to error pages with javax attributes set. Correct dispatch to error pages with javax attributes set. - + fixed binary files in cvs Fixed binary files in CVS - + fixed several problems with external role authentication. role Fixed several + + fixed binary files in cvs fixed binary files in cvs fixed binary files fixed + binary files in cvs fixed binary files in cvs fixed binary files in cvs + Fixed binary files in CVS + + fixed several problems with external role authentication. role fixed s fixed + several problems with external role authentication. role fixed s fixed + several problems with external role authentication. role Fixed several problems with external role authentication. Role authentication in JBoss was not working correctly and there were possible object leaks. The fix required an API change to UserPrinciple and UserRealm. - + fixed virtual hosts to case insensitive. Fixed Virtual hosts to case - insensitive. - + fix security problem with trailing special characters. trailing %00 en Fix + + fixed virtual hosts to case insensitive. fixed virtual hosts to case f fixed + virtual hosts to case insensitive. fixed virtual hosts to case fixed virtual + hosts to case insensitive. Fixed Virtual hosts to case insensitive. + + fix security problem with trailing special characters. trailing %00 en fix + security problem with trailing special characters. trailing %00 en fix + security problem with trailing special characters. trailing %00 en Fix security problem with trailing special characters. Trailing %00 enabled JSP source to be viewed or other servlets to be bypassed. - + improved form auth handling of role failure. Improved FORM auth handling of + + improved form auth handling of role failure. improved form auth handli + improved form auth handling of role failure. improved form auth handli + improved form auth handling of role failure. Improved FORM auth handling of role failure. - + improved jasper debug output. Improved Jasper debug output. - + improved threadedserver timeout defaults Improved ThreadedServer timeout + + improved jasper debug output. improved jasper debug output. improved j + improved jasper debug output. improved jasper debug output. improved jasper + debug output. Improved Jasper debug output. + + improved threadedserver timeout defaults improved threadedserver timeo + improved threadedserver timeout defaults improved threadedserver timeo + improved threadedserver timeout defaults Improved ThreadedServer timeout defaults - + pathmap spec separator changed from ',' to ':'. may be set with PathMap spec + + pathmap spec separator changed from ',' to ':'. may be set with pathma + pathmap spec separator changed from ',' to ':'. may be set with pathma + pathmap spec separator changed from ',' to ':'. may be set with PathMap spec separator changed from ',' to ':'. May be set with org.mortbay.http.PathMap.separators system property. - + upgraded jsse to 1.0.2 Upgraded JSSE to 1.0.2 + + upgraded jsse to 1.0.2 upgraded jsse to 1.0.2 upgraded jsse to 1.0.2 + upgraded jsse to 1.0.2 upgraded jsse to 1.0.2 upgraded jsse to 1.0.2 + Upgraded JSSE to 1.0.2 jetty-3.1.2 - 13 October 2001 - + added run target to ant Added run target to ant - + added servlethandler.sessioncount() Added ServletHandler.sessionCount() - + added short delay to shutdown hook for jvm bug. Added short delay to - shutdown hook for JVM bug. - + changed 304 responses for opera browser. Changed 304 responses for Opera + + added run target to ant added run target to ant added run target to an added + run target to ant added run target to ant added run target to ant Added run + target to ant + + added servlethandler.sessioncount() added servlethandler.sessioncount( added + servlethandler.sessioncount() added servlethandler.sessioncount( added + servlethandler.sessioncount() Added ServletHandler.sessionCount() + + added short delay to shutdown hook for jvm bug. added short delay to a added + short delay to shutdown hook for jvm bug. added short delay to added short + delay to shutdown hook for jvm bug. Added short delay to shutdown hook for + JVM bug. + + changed 304 responses for opera browser. changed 304 responses for ope + changed 304 responses for opera browser. changed 304 responses for ope + changed 304 responses for opera browser. Changed 304 responses for Opera browser. - + changed jsessionid to jsessionid Changed JSESSIONID to jsessionid - + changed unsatisfiable range warnings to debug. Changed unsatisfiable range + + changed jsessionid to jsessionid changed jsessionid to jsessionid chan + changed jsessionid to jsessionid changed jsessionid to jsessionid changed + jsessionid to jsessionid Changed JSESSIONID to jsessionid + + changed unsatisfiable range warnings to debug. changed unsatisfiable r + changed unsatisfiable range warnings to debug. changed unsatisfiable r + changed unsatisfiable range warnings to debug. Changed unsatisfiable range warnings to debug. - + fixed attr handling in xmlparser.tostring Fixed attr handling in - XmlParser.toString - + fixed authentication role handling in form auth. Fixed authentication role + + fixed attr handling in xmlparser.tostring fixed attr handling in fixed fixed + attr handling in xmlparser.tostring fixed attr handling in fixed attr + handling in xmlparser.tostring Fixed attr handling in XmlParser.toString + + fixed authentication role handling in form auth. fixed authentication fixed + authentication role handling in form auth. fixed authentication fixed + authentication role handling in form auth. Fixed authentication role handling in FORM auth. - + fixed double entry on pathmap.getmatches Fixed double entry on - PathMap.getMatches - + fixed form authentication username. Fixed FORM Authentication username. - + fixed notfoundhandler handling of unknown methods Fixed NotFoundHandler - handling of unknown methods - + fixed request log date formatting Fixed request log date formatting - + fixed servlet handling of non session url params. Fixed servlet handling of - non session url params. - + form authentication passes query params. FORM authentication passes query - params. - + further improvements in handling of shutdown. Further improvements in + + fixed double entry on pathmap.getmatches fixed double entry on fixed d fixed + double entry on pathmap.getmatches fixed double entry on fixed double entry + on pathmap.getmatches Fixed double entry on PathMap.getMatches + + fixed form authentication username. fixed form authentication username fixed + form authentication username. fixed form authentication username fixed form + authentication username. Fixed FORM Authentication username. + + fixed notfoundhandler handling of unknown methods fixed notfoundhandle fixed + notfoundhandler handling of unknown methods fixed notfoundhandle fixed + notfoundhandler handling of unknown methods Fixed NotFoundHandler handling + of unknown methods + + fixed request log date formatting fixed request log date formatting fi fixed + request log date formatting fixed request log date formatting fixed request + log date formatting Fixed request log date formatting + + fixed servlet handling of non session url params. fixed servlet handli fixed + servlet handling of non session url params. fixed servlet handli fixed + servlet handling of non session url params. Fixed servlet handling of non + session url params. + + form authentication passes query params. form authentication passes qu form + authentication passes query params. form authentication passes qu form + authentication passes query params. FORM authentication passes query params. + + further improvements in handling of shutdown. further improvements in + further improvements in handling of shutdown. further improvements in + further improvements in handling of shutdown. Further improvements in handling of shutdown. - + log ok state after thread low warnings. Log OK state after thread low - warnings. + + log ok state after thread low warnings. log ok state after thread low log + ok state after thread low warnings. log ok state after thread low log ok + state after thread low warnings. Log OK state after thread low warnings. jetty-3.1.1 - 27 September 2001 - + correctly ignore auth-constraint descriptions. Correctly ignore - auth-constraint descriptions. - + fixed jar manifest format - patched 28 sep 2001 Fixed jar manifest format - - patched 28 Sep 2001 - + fixed servletrequest.getlocale(). Fixed ServletRequest.getLocale(). - + handle requestdispatcher during init. Handle requestdispatcher during init. - + reduced verbosity of bad url errors from iis virus attacks Reduced verbosity + + correctly ignore auth-constraint descriptions. correctly ignore correc + correctly ignore auth-constraint descriptions. correctly ignore correctly + ignore auth-constraint descriptions. Correctly ignore auth-constraint + descriptions. + + fixed jar manifest format - patched 28 sep 2001 fixed jar manifest for fixed + jar manifest format - patched 28 sep 2001 fixed jar manifest for fixed jar + manifest format - patched 28 sep 2001 Fixed jar manifest format - patched 28 + Sep 2001 + + fixed servletrequest.getlocale(). fixed servletrequest.getlocale(). fi fixed + servletrequest.getlocale(). fixed servletrequest.getlocale(). fixed + servletrequest.getlocale(). Fixed ServletRequest.getLocale(). + + handle requestdispatcher during init. handle requestdispatcher during handle + requestdispatcher during init. handle requestdispatcher during handle + requestdispatcher during init. Handle requestdispatcher during init. + + reduced verbosity of bad url errors from iis virus attacks reduced ver + reduced verbosity of bad url errors from iis virus attacks reduced ver + reduced verbosity of bad url errors from iis virus attacks Reduced verbosity of bad URL errors from IIS virus attacks - + removed incorrect warning for web-inf/lib jar files. Removed incorrect + + removed incorrect warning for web-inf/lib jar files. removed incorrect + removed incorrect warning for web-inf/lib jar files. removed incorrect + removed incorrect warning for web-inf/lib jar files. Removed incorrect warning for WEB-INF/lib jar files. - + removed jdk 1.3 dependancy Removed JDK 1.3 dependancy - + use lowercase tags in html package to be xhtml-like. Use lowercase tags in - html package to be XHTML-like. + + removed jdk 1.3 dependancy removed jdk 1.3 dependancy removed jdk 1.3 + removed jdk 1.3 dependancy removed jdk 1.3 dependancy removed jdk 1.3 + dependancy Removed JDK 1.3 dependancy + + use lowercase tags in html package to be xhtml-like. use lowercase tag use + lowercase tags in html package to be xhtml-like. use lowercase tag use + lowercase tags in html package to be xhtml-like. Use lowercase tags in html + package to be XHTML-like. jetty-3.1.0 - 21 September 2001 - + added handlercontext.registerhost Added HandlerContext.registerHost - + added long overdue tutorial documentation. Added long overdue Tutorial - documentation. - + fix .. handling in uri Fix .. handling in URI - + fix flush on stop bug in logs. Fix flush on stop bug in logs. - + fix form authentication on exact patterns Fix FORM authentication on exact - patterns - + fix jetty.bat for spaces. Fix Jetty.bat for spaces. - + fix param reading on cgi servlet Fix param reading on CGI servlet - + fix refferer in cgi Fix REFFERER in CGI - + fix resourcehandler cache invalidate. Fix ResourceHandler cache invalidate. - + fix reuse of resource Fix reuse of Resource - + fix servletresponse.setlocale() Fix ServletResponse.setLocale() - + improved closing of listeners. Improved closing of listeners. - + improved some other documentation. Improved some other documentation. - + new simplified jetty.bat New simplified jetty.bat - + optimized list creation Optimized List creation - + removed win32 service.exe Removed win32 service.exe + + added handlercontext.registerhost added handlercontext.registerhost ad added + handlercontext.registerhost added handlercontext.registerhost added + handlercontext.registerhost Added HandlerContext.registerHost + + added long overdue tutorial documentation. added long overdue tutorial added + long overdue tutorial documentation. added long overdue tutorial added long + overdue tutorial documentation. Added long overdue Tutorial documentation. + + fix .. handling in uri fix .. handling in uri fix .. handling in uri f fix + .. handling in uri fix .. handling in uri fix .. handling in uri Fix .. + handling in URI + + fix flush on stop bug in logs. fix flush on stop bug in logs. fix flus fix + flush on stop bug in logs. fix flush on stop bug in logs. fix flush on stop + bug in logs. Fix flush on stop bug in logs. + + fix form authentication on exact patterns fix form authentication on e fix + form authentication on exact patterns fix form authentication on e fix form + authentication on exact patterns Fix FORM authentication on exact patterns + + fix jetty.bat for spaces. fix jetty.bat for spaces. fix jetty.bat for fix + jetty.bat for spaces. fix jetty.bat for spaces. fix jetty.bat for spaces. + Fix Jetty.bat for spaces. + + fix param reading on cgi servlet fix param reading on cgi servlet fix fix + param reading on cgi servlet fix param reading on cgi servlet fix param + reading on cgi servlet Fix param reading on CGI servlet + + fix refferer in cgi fix refferer in cgi fix refferer in cgi fix reffer fix + refferer in cgi fix refferer in cgi fix refferer in cgi Fix REFFERER in CGI + + fix resourcehandler cache invalidate. fix resourcehandler cache invali fix + resourcehandler cache invalidate. fix resourcehandler cache invali fix + resourcehandler cache invalidate. Fix ResourceHandler cache invalidate. + + fix reuse of resource fix reuse of resource fix reuse of resource fix fix + reuse of resource fix reuse of resource fix reuse of resource Fix reuse of + Resource + + fix servletresponse.setlocale() fix servletresponse.setlocale() fix fix + servletresponse.setlocale() fix servletresponse.setlocale() fix + servletresponse.setlocale() Fix ServletResponse.setLocale() + + improved closing of listeners. improved closing of listeners. improved + improved closing of listeners. improved closing of listeners. improved + closing of listeners. Improved closing of listeners. + + improved some other documentation. improved some other documentation. + improved some other documentation. improved some other documentation. + improved some other documentation. Improved some other documentation. + + new simplified jetty.bat new simplified jetty.bat new simplified jetty new + simplified jetty.bat new simplified jetty.bat new simplified jetty.bat New + simplified jetty.bat + + optimized list creation optimized list creation optimized list creatio + optimized list creation optimized list creation optimized list creation + Optimized List creation + + removed win32 service.exe removed win32 service.exe removed win32 removed + win32 service.exe removed win32 service.exe removed win32 service.exe + Removed win32 service.exe jetty-3.1.rc9 - 02 September 2001 - + added bin/orgpackage.sh script to change package names. Added - bin/orgPackage.sh script to change package names. - + added handlercontext.setclasspaths Added handlerContext.setClassPaths - + added lowresourcepersisttimems for more graceful degradation when we r Added + + added bin/orgpackage.sh script to change package names. added added added + bin/orgpackage.sh script to change package names. added added + bin/orgpackage.sh script to change package names. Added bin/orgPackage.sh + script to change package names. + + added handlercontext.setclasspaths added handlercontext.setclasspaths added + handlercontext.setclasspaths added handlercontext.setclasspaths added + handlercontext.setclasspaths Added handlerContext.setClassPaths + + added lowresourcepersisttimems for more graceful degradation when we r added + lowresourcepersisttimems for more graceful degradation when we r added + lowresourcepersisttimems for more graceful degradation when we r Added lowResourcePersistTimeMs for more graceful degradation when we run out of threads. - + added support for nonblocking listener. Added support for Nonblocking - listener. - + changed to org.mortbay domain names. Changed to org.mortbay domain names. - + fixed bug with non cookie sessions. Fixed bug with non cookie sessions. - + fixed handling of rel form authentication urls Fixed handling of rel form + + added support for nonblocking listener. added support for nonblocking added + support for nonblocking listener. added support for nonblocking added + support for nonblocking listener. Added support for Nonblocking listener. + + changed to org.mortbay domain names. changed to org.mortbay domain nam + changed to org.mortbay domain names. changed to org.mortbay domain nam + changed to org.mortbay domain names. Changed to org.mortbay domain names. + + fixed bug with non cookie sessions. fixed bug with non cookie sessions fixed + bug with non cookie sessions. fixed bug with non cookie sessions fixed bug + with non cookie sessions. Fixed bug with non cookie sessions. + + fixed handling of rel form authentication urls fixed handling of rel f fixed + handling of rel form authentication urls fixed handling of rel f fixed + handling of rel form authentication urls Fixed handling of rel form authentication URLs - + format cookies in httpfields. Format cookies in HttpFields. - + form auth login and error pages relative to context path. Form auth login - and error pages relative to context path. - + patched jasper to 3.2.3. Patched Jasper to 3.2.3. + + format cookies in httpfields. format cookies in httpfields. format coo + format cookies in httpfields. format cookies in httpfields. format cookies + in httpfields. Format cookies in HttpFields. + + form auth login and error pages relative to context path. form auth lo form + auth login and error pages relative to context path. form auth lo form auth + login and error pages relative to context path. Form auth login and error + pages relative to context path. + + patched jasper to 3.2.3. patched jasper to 3.2.3. patched jasper to 3. + patched jasper to 3.2.3. patched jasper to 3.2.3. patched jasper to 3.2.3. + Patched Jasper to 3.2.3. jetty-3.1.rc8 - 22 August 2001 - + added httpserver statistics Added HttpServer statistics - + allow contextpaths without leading / Allow contextpaths without leading / - + allow per context log files. Allow per context log files. - + buffer allocation Buffer allocation - + don't add notfound context. Don't add notfound context. - + fixed handling of default mime types Fixed handling of default mime types - + iso8859 conversion ISO8859 conversion - + many major and minor optimizations: Many major and minor optimizations: - + outputstreamlogsink replaces writerlogsink OutputStreamLogSink replaces + + added httpserver statistics added httpserver statistics added httpserv added + httpserver statistics added httpserver statistics added httpserver + statistics Added HttpServer statistics + + allow contextpaths without leading / allow contextpaths without leadin allow + contextpaths without leading / allow contextpaths without leadin allow + contextpaths without leading / Allow contextpaths without leading / + + allow per context log files. allow per context log files. allow per co allow + per context log files. allow per context log files. allow per context log + files. Allow per context log files. + + buffer allocation buffer allocation buffer allocation buffer allocatio + buffer allocation buffer allocation buffer allocation Buffer allocation + + don't add notfound context. don't add notfound context. don't add notf don't + add notfound context. don't add notfound context. don't add notfound + context. Don't add notfound context. + + fixed handling of default mime types fixed handling of default mime ty fixed + handling of default mime types fixed handling of default mime ty fixed + handling of default mime types Fixed handling of default mime types + + iso8859 conversion iso8859 conversion iso8859 conversion iso8859 conve + iso8859 conversion iso8859 conversion iso8859 conversion ISO8859 conversion + + many major and minor optimizations: many major and minor optimizations many + major and minor optimizations: many major and minor optimizations many major + and minor optimizations: Many major and minor optimizations: + + outputstreamlogsink replaces writerlogsink outputstreamlogsink replace + outputstreamlogsink replaces writerlogsink outputstreamlogsink replace + outputstreamlogsink replaces writerlogsink OutputStreamLogSink replaces WriterLogSink - + removed race from dynamic servlet initialization. Removed race from dynamic + + removed race from dynamic servlet initialization. removed race from dy + removed race from dynamic servlet initialization. removed race from dy + removed race from dynamic servlet initialization. Removed race from dynamic servlet initialization. - + separation of url params in httphandler api. Separation of URL params in + + separation of url params in httphandler api. separation of url params + separation of url params in httphandler api. separation of url params + separation of url params in httphandler api. Separation of URL params in HttpHandler API. - + stringmap StringMap - + support web-inf/web-jetty.xml configuration extension for webapps Support + + stringmap stringmap stringmap stringmap stringmap stringmap stringmap + StringMap + + support web-inf/web-jetty.xml configuration extension for webapps supp + support web-inf/web-jetty.xml configuration extension for webapps supp + support web-inf/web-jetty.xml configuration extension for webapps Support WEB-INF/web-jetty.xml configuration extension for webapps - + updated sponsors page Updated sponsors page - + uri canonicalpath URI canonicalPath - + uri pathadd URI pathAdd + + updated sponsors page updated sponsors page updated sponsors page upda + updated sponsors page updated sponsors page updated sponsors page Updated + sponsors page + + uri canonicalpath uri canonicalpath uri canonicalpath uri canonicalpat uri + canonicalpath uri canonicalpath uri canonicalpath URI canonicalPath + + uri pathadd uri pathadd uri pathadd uri pathadd uri pathadd uri pathadd uri + pathadd URI pathAdd jetty-3.1.rc7 - 09 August 2001 - + added doco for linux port redirection. Added doco for Linux port - redirection. - + added form authentication. Added FORM authentication. - + added method handling to htaccesshandler. Added method handling to - HTAccessHandler. - + added shutdown hooks to jetty.server to trap ctl-c Added shutdown hooks to + + added doco for linux port redirection. added doco for linux port added added + doco for linux port redirection. added doco for linux port added doco for + linux port redirection. Added doco for Linux port redirection. + + added form authentication. added form authentication. added form added form + authentication. added form authentication. added form authentication. Added + FORM authentication. + + added method handling to htaccesshandler. added method handling to add added + method handling to htaccesshandler. added method handling to added method + handling to htaccesshandler. Added method handling to HTAccessHandler. + + added shutdown hooks to jetty.server to trap ctl-c added shutdown hook added + shutdown hooks to jetty.server to trap ctl-c added shutdown hook added + shutdown hooks to jetty.server to trap ctl-c Added shutdown hooks to Jetty.Server to trap Ctl-C - + added uml diagrams to jetty architecture documentation. Added UML diagrams - to Jetty architecture documentation. - + added utility methods to servlethandler for wrapping req/res pairs. Added - utility methods to ServletHandler for wrapping req/res pairs. - + don't persist connections if low on threads. Don't persist connections if - low on threads. - + dump servlet displays cert chains Dump Servlet displays cert chains - + fix bug in sendredirect for http/1.1 Fix bug in sendRedirect for HTTP/1.1 - + fixed bug with session id generation. Fixed bug with session ID generation. - + fixed redirect handling by the cgi servlet. Fixed redirect handling by the - CGI Servlet. - + fixed request.getport for redirections from 80 Fixed request.getPort for + + added uml diagrams to jetty architecture documentation. added uml diag added + uml diagrams to jetty architecture documentation. added uml diag added uml + diagrams to jetty architecture documentation. Added UML diagrams to Jetty + architecture documentation. + + added utility methods to servlethandler for wrapping req/res pairs. ad added + utility methods to servlethandler for wrapping req/res pairs. ad added + utility methods to servlethandler for wrapping req/res pairs. Added utility + methods to ServletHandler for wrapping req/res pairs. + + don't persist connections if low on threads. don't persist connections don't + persist connections if low on threads. don't persist connections don't + persist connections if low on threads. Don't persist connections if low on + threads. + + dump servlet displays cert chains dump servlet displays cert chains du dump + servlet displays cert chains dump servlet displays cert chains dump servlet + displays cert chains Dump Servlet displays cert chains + + fix bug in sendredirect for http/1.1 fix bug in sendredirect for http/ fix + bug in sendredirect for http/1.1 fix bug in sendredirect for http/ fix bug + in sendredirect for http/1.1 Fix bug in sendRedirect for HTTP/1.1 + + fixed bug with session id generation. fixed bug with session id genera fixed + bug with session id generation. fixed bug with session id genera fixed bug + with session id generation. Fixed bug with session ID generation. + + fixed redirect handling by the cgi servlet. fixed redirect handling by fixed + redirect handling by the cgi servlet. fixed redirect handling by fixed + redirect handling by the cgi servlet. Fixed redirect handling by the CGI + Servlet. + + fixed request.getport for redirections from 80 fixed request.getport f fixed + request.getport for redirections from 80 fixed request.getport f fixed + request.getport for redirections from 80 Fixed request.getPort for redirections from 80 - + optimized httpfield handling to reduce object creatiyon. Optimized HttpField + + optimized httpfield handling to reduce object creatiyon. optimized htt + optimized httpfield handling to reduce object creatiyon. optimized htt + optimized httpfield handling to reduce object creatiyon. Optimized HttpField handling to reduce object creatiyon. - + remove old context path specs Remove old context path specs - + servletrequest ssl attributes in line with 2.2 and 2.3 specs. ServletRequest + + remove old context path specs remove old context path specs remove old + remove old context path specs remove old context path specs remove old + context path specs Remove old context path specs + + servletrequest ssl attributes in line with 2.2 and 2.3 specs. servletr + servletrequest ssl attributes in line with 2.2 and 2.3 specs. servletr + servletrequest ssl attributes in line with 2.2 and 2.3 specs. ServletRequest SSL attributes in line with 2.2 and 2.3 specs. + servletresponse.sendredirect puts urls into absolute format. + servletresponse.sendredirect puts urls into absolute format. + servletresponse.sendredirect puts urls into absolute format. ServletResponse.sendRedirect puts URLs into absolute format. - + use enumerations to reduce conversions for servlet api. Use Enumerations to + + use enumerations to reduce conversions for servlet api. use enumeratio use + enumerations to reduce conversions for servlet api. use enumeratio use + enumerations to reduce conversions for servlet api. Use Enumerations to reduce conversions for servlet API. jetty-3.1.rc6 - 10 July 2001 - + added client authentication to the jsselistener Added Client authentication - to the JsseListener - + added debug and logging config example to demo.xml Added debug and logging - config example to demo.xml - + added get element to the xmlconfiguration class. Added Get element to the + + added client authentication to the jsselistener added client authentic added + client authentication to the jsselistener added client authentic added + client authentication to the jsselistener Added Client authentication to the + JsseListener + + added debug and logging config example to demo.xml added debug and log added + debug and logging config example to demo.xml added debug and log added debug + and logging config example to demo.xml Added debug and logging config + example to demo.xml + + added get element to the xmlconfiguration class. added get element to added + get element to the xmlconfiguration class. added get element to added get + element to the xmlconfiguration class. Added Get element to the XmlConfiguration class. - + added getresource to handlecontext. Added getResource to HandleContext. - + added static calls to the xmlconfiguration class. Added Static calls to the + + added getresource to handlecontext. added getresource to handlecontext added + getresource to handlecontext. added getresource to handlecontext added + getresource to handlecontext. Added getResource to HandleContext. + + added static calls to the xmlconfiguration class. added static calls t added + static calls to the xmlconfiguration class. added static calls t added + static calls to the xmlconfiguration class. Added Static calls to the XmlConfiguration class. - + avoid script vulnerability in error pages. Avoid script vulnerability in - error pages. - + cleaned up destroy handling of listeners and contexts. Cleaned up destroy + + avoid script vulnerability in error pages. avoid script vulnerability avoid + script vulnerability in error pages. avoid script vulnerability avoid + script vulnerability in error pages. Avoid script vulnerability in error + pages. + + cleaned up destroy handling of listeners and contexts. cleaned up dest + cleaned up destroy handling of listeners and contexts. cleaned up dest + cleaned up destroy handling of listeners and contexts. Cleaned up destroy handling of listeners and contexts. - + cleaned up win32 service server creation. Cleaned up Win32 Service server + + cleaned up win32 service server creation. cleaned up win32 service ser + cleaned up win32 service server creation. cleaned up win32 service ser + cleaned up win32 service server creation. Cleaned up Win32 Service server creation. - + close persistent http/1.0 connections on missing content-length Close - persistent HTTP/1.0 connections on missing Content-Length - + fixed a problem with netscape and the acrobat plugin. Fixed a problem with - Netscape and the acrobat plugin. - + fixed bug in b64code. optimised b64code. Fixed bug in B64Code. Optimised - B64Code. - + fixed xmlparser to handle xerces1.3 ok Fixed XmlParser to handle xerces1.3 - OK - + improved debug output for ioexceptions. Improved debug output for - IOExceptions. - + improved ssl debugging information. Improved SSL debugging information. - + keypairtool can now load cert chains. KeyPairTool can now load cert chains. - + keypairtool is more robust to provider setup. KeyPairTool is more robust to + + close persistent http/1.0 connections on missing content-length close close + persistent http/1.0 connections on missing content-length close close + persistent http/1.0 connections on missing content-length Close persistent + HTTP/1.0 connections on missing Content-Length + + fixed a problem with netscape and the acrobat plugin. fixed a problem fixed + a problem with netscape and the acrobat plugin. fixed a problem fixed a + problem with netscape and the acrobat plugin. Fixed a problem with Netscape + and the acrobat plugin. + + fixed bug in b64code. optimised b64code. fixed bug in b64code. optimis fixed + bug in b64code. optimised b64code. fixed bug in b64code. optimis fixed bug + in b64code. optimised b64code. Fixed bug in B64Code. Optimised B64Code. + + fixed xmlparser to handle xerces1.3 ok fixed xmlparser to handle xerce fixed + xmlparser to handle xerces1.3 ok fixed xmlparser to handle xerce fixed + xmlparser to handle xerces1.3 ok Fixed XmlParser to handle xerces1.3 OK + + improved debug output for ioexceptions. improved debug output for impr + improved debug output for ioexceptions. improved debug output for improved + debug output for ioexceptions. Improved debug output for IOExceptions. + + improved ssl debugging information. improved ssl debugging information + improved ssl debugging information. improved ssl debugging information + improved ssl debugging information. Improved SSL debugging information. + + keypairtool can now load cert chains. keypairtool can now load cert ch + keypairtool can now load cert chains. keypairtool can now load cert ch + keypairtool can now load cert chains. KeyPairTool can now load cert chains. + + keypairtool is more robust to provider setup. keypairtool is more robu + keypairtool is more robust to provider setup. keypairtool is more robu + keypairtool is more robust to provider setup. KeyPairTool is more robust to provider setup. - + moved gimp image files to jetty3extra Moved gimp image files to Jetty3Extra - + moved mime types and encodings to property bundles. Moved mime types and - encodings to property bundles. - + removed getconfiguration from lifecyclethread to avoid jmx clash. Removed + + moved gimp image files to jetty3extra moved gimp image files to jetty3 moved + gimp image files to jetty3extra moved gimp image files to jetty3 moved gimp + image files to jetty3extra Moved gimp image files to Jetty3Extra + + moved mime types and encodings to property bundles. moved mime types a moved + mime types and encodings to property bundles. moved mime types a moved mime + types and encodings to property bundles. Moved mime types and encodings to + property bundles. + + removed getconfiguration from lifecyclethread to avoid jmx clash. remo + removed getconfiguration from lifecyclethread to avoid jmx clash. remo + removed getconfiguration from lifecyclethread to avoid jmx clash. Removed getConfiguration from LifeCycleThread to avoid JMX clash. + requestdispatch.forward() uses normal handlercontext.handle() path if + requestdispatch.forward() uses normal handlercontext.handle() path if + requestdispatch.forward() uses normal handlercontext.handle() path if RequestDispatch.forward() uses normal HandlerContext.handle() path if possible. - + updated to jsse-1.0.2, giving full strength crypto. Updated to JSSE-1.0.2, + + updated to jsse-1.0.2, giving full strength crypto. updated to jsse-1. + updated to jsse-1.0.2, giving full strength crypto. updated to jsse-1. + updated to jsse-1.0.2, giving full strength crypto. Updated to JSSE-1.0.2, giving full strength crypto. - + use exec for jetty.sh run Use exec for jetty.sh run - + webapps initialize resourcebase before start. WebApps initialize - resourceBase before start. - + win32 service uses jetty.server instead of httpserver. Win32 Service uses + + use exec for jetty.sh run use exec for jetty.sh run use exec for jetty use + exec for jetty.sh run use exec for jetty.sh run use exec for jetty.sh run + Use exec for jetty.sh run + + webapps initialize resourcebase before start. webapps initialize webap + webapps initialize resourcebase before start. webapps initialize webapps + initialize resourcebase before start. WebApps initialize resourceBase before + start. + + win32 service uses jetty.server instead of httpserver. win32 service u win32 + service uses jetty.server instead of httpserver. win32 service u win32 + service uses jetty.server instead of httpserver. Win32 Service uses Jetty.Server instead of HttpServer. jetty-3.1.rc5 - 01 May 2001 - + added build target for mini.jetty.jar - see readme. Added build target for + + added build target for mini.jetty.jar - see readme. added build target added + build target for mini.jetty.jar - see readme. added build target added build + target for mini.jetty.jar - see readme. Added build target for mini.jetty.jar - see README. - + added htaccesshandler to authenitcate against apache .htaccess files. Added + + added htaccesshandler to authenitcate against apache .htaccess files. added + htaccesshandler to authenitcate against apache .htaccess files. added + htaccesshandler to authenitcate against apache .htaccess files. Added HTaccessHandler to authenitcate against apache .htaccess files. - + added query param handling to forwardhandler Added query param handling to + + added query param handling to forwardhandler added query param handlin added + query param handling to forwardhandler added query param handlin added query + param handling to forwardhandler Added query param handling to ForwardHandler - + added servlethandler().setusingcookies(). Added + + added servlethandler().setusingcookies(). added added added + servlethandler().setusingcookies(). added added + servlethandler().setusingcookies(). Added ServletHandler().setUsingCookies(). - + added unixcrypt support to c.m.u.password Added UnixCrypt support to + + added unixcrypt support to c.m.u.password added unixcrypt support to a added + unixcrypt support to c.m.u.password added unixcrypt support to added + unixcrypt support to c.m.u.password Added UnixCrypt support to c.m.U.Password - + fixed eof handling in multipartrequest. Fixed EOF handling in - MultiPartRequest. - + fixed forwarding to null pathinfo requests. Fixed forwarding to null - pathInfo requests. - + fixed handling of empty responses at header commit. Fixed handling of empty + + fixed eof handling in multipartrequest. fixed eof handling in fixed eo fixed + eof handling in multipartrequest. fixed eof handling in fixed eof handling + in multipartrequest. Fixed EOF handling in MultiPartRequest. + + fixed forwarding to null pathinfo requests. fixed forwarding to null f fixed + forwarding to null pathinfo requests. fixed forwarding to null fixed + forwarding to null pathinfo requests. Fixed forwarding to null pathInfo + requests. + + fixed handling of empty responses at header commit. fixed handling of fixed + handling of empty responses at header commit. fixed handling of fixed + handling of empty responses at header commit. Fixed handling of empty responses at header commit. - + fixed handling of multiple cookies. Fixed handling of multiple cookies. - + fixed jetty.bat classpath problems. Fixed jetty.bat classpath problems. - + fixed resourcehandler handling of ;jsessionid Fixed ResourceHandler handling - of ;JSESSIONID - + fixed sync of threadpool idleset. Fixed sync of ThreadPool idleSet. - + major restructing of packages to separate servlet dependancies. c.m.xm Major + + fixed handling of multiple cookies. fixed handling of multiple cookies fixed + handling of multiple cookies. fixed handling of multiple cookies fixed + handling of multiple cookies. Fixed handling of multiple cookies. + + fixed jetty.bat classpath problems. fixed jetty.bat classpath problems fixed + jetty.bat classpath problems. fixed jetty.bat classpath problems fixed + jetty.bat classpath problems. Fixed jetty.bat classpath problems. + + fixed resourcehandler handling of ;jsessionid fixed resourcehandler ha fixed + resourcehandler handling of ;jsessionid fixed resourcehandler ha fixed + resourcehandler handling of ;jsessionid Fixed ResourceHandler handling of + ;JSESSIONID + + fixed sync of threadpool idleset. fixed sync of threadpool idleset. fi fixed + sync of threadpool idleset. fixed sync of threadpool idleset. fixed sync of + threadpool idleset. Fixed sync of ThreadPool idleSet. + + major restructing of packages to separate servlet dependancies. c.m.xm major + restructing of packages to separate servlet dependancies. c.m.xm major + restructing of packages to separate servlet dependancies. c.m.xm Major restructing of packages to separate servlet dependancies. c.m.XML - moved XML dependant classes from c.m.Util c.m.HTTP - No servlet or XML dependant classes: c.m.Jetty.Servlet - moved from c.m.HTTP.Handler.Servlet c.m.Servlet - received some servlet dependant classes from HTTP. - + optimized canonical path calculations. Optimized canonical path - calculations. - + request log contains bytes actually returned. Request log contains bytes + + optimized canonical path calculations. optimized canonical path optimi + optimized canonical path calculations. optimized canonical path optimized + canonical path calculations. Optimized canonical path calculations. + + request log contains bytes actually returned. request log contains byt + request log contains bytes actually returned. request log contains byt + request log contains bytes actually returned. Request log contains bytes actually returned. - + warn and close connections if content-length is incorrectly set. Warn and - close connections if content-length is incorrectly set. + + warn and close connections if content-length is incorrectly set. warn warn + and close connections if content-length is incorrectly set. warn warn and + close connections if content-length is incorrectly set. Warn and close + connections if content-length is incorrectly set. jetty-3.0.6 - 26 April 2001 - + fixed eof handlding in multipartrequest. Fixed EOF handlding in - MultiPartRequest. - + fixed forwarding to null pathinfo requests. Fixed forwarding to null - pathInfo requests. - + fixed handling of empty responses at header commit. Fixed handling of empty + + fixed eof handlding in multipartrequest. fixed eof handlding in fixed fixed + eof handlding in multipartrequest. fixed eof handlding in fixed eof + handlding in multipartrequest. Fixed EOF handlding in MultiPartRequest. + + fixed forwarding to null pathinfo requests. fixed forwarding to null f fixed + forwarding to null pathinfo requests. fixed forwarding to null fixed + forwarding to null pathinfo requests. Fixed forwarding to null pathInfo + requests. + + fixed handling of empty responses at header commit. fixed handling of fixed + handling of empty responses at header commit. fixed handling of fixed + handling of empty responses at header commit. Fixed handling of empty responses at header commit. - + fixed resourcehandler handling of ;jsessionid Fixed ResourceHandler handling - of ;JSESSIONID - + fixed sync of threadpool idleset. Fixed sync of ThreadPool idleSet. + + fixed resourcehandler handling of ;jsessionid fixed resourcehandler ha fixed + resourcehandler handling of ;jsessionid fixed resourcehandler ha fixed + resourcehandler handling of ;jsessionid Fixed ResourceHandler handling of + ;JSESSIONID + + fixed sync of threadpool idleset. fixed sync of threadpool idleset. fi fixed + sync of threadpool idleset. fixed sync of threadpool idleset. fixed sync of + threadpool idleset. Fixed sync of ThreadPool idleSet. + load-on-startup the jspservlet so that precompiled servlets work. + load-on-startup the jspservlet so that precompiled servlets work. + load-on-startup the jspservlet so that precompiled servlets work. Load-on-startup the JspServlet so that precompiled servlets work. jetty-3.1.rc4 - 14 April 2001 - + added idle thread getter to threadpool. Added idle thread getter to - ThreadPool. - + include full versions of jaxp and crimson Include full versions of JAXP and + + added idle thread getter to threadpool. added idle thread getter to ad added + idle thread getter to threadpool. added idle thread getter to added idle + thread getter to threadpool. Added idle thread getter to ThreadPool. + + include full versions of jaxp and crimson include full versions of jax + include full versions of jaxp and crimson include full versions of jax + include full versions of jaxp and crimson Include full versions of JAXP and Crimson + load-on-startup the jspservlet so that precompiled servlets work. + load-on-startup the jspservlet so that precompiled servlets work. + load-on-startup the jspservlet so that precompiled servlets work. Load-on-startup the JspServlet so that precompiled servlets work. - + removed stray debug println from the frame class. Removed stray debug + + removed stray debug println from the frame class. removed stray debug + removed stray debug println from the frame class. removed stray debug + removed stray debug println from the frame class. Removed stray debug println from the Frame class. jetty-3.0.5 - 14 April 2001 - + branched from 3.1 trunk to fix major errors Branched from 3.1 trunk to fix + + branched from 3.1 trunk to fix major errors branched from 3.1 trunk to + branched from 3.1 trunk to fix major errors branched from 3.1 trunk to + branched from 3.1 trunk to fix major errors Branched from 3.1 trunk to fix major errors - + created better random session id Created better random session ID - + don't chunk if content length is known. Don't chunk if content length is - known. - + fixed getlocales handling of quality params fixed getLocales handling of - quality params - + fixed lineinput bug eof Fixed LineInput bug EOF - + fixed session invalidation unbind notification to conform with spec Fixed - session invalidation unbind notification to conform with spec - + improved flush ordering for forwarded requests. Improved flush ordering for + + created better random session id created better random session id crea + created better random session id created better random session id created + better random session id Created better random session ID + + don't chunk if content length is known. don't chunk if content length don't + chunk if content length is known. don't chunk if content length don't chunk + if content length is known. Don't chunk if content length is known. + + fixed getlocales handling of quality params fixed getlocales handling fixed + getlocales handling of quality params fixed getlocales handling fixed + getlocales handling of quality params fixed getLocales handling of quality + params + + fixed lineinput bug eof fixed lineinput bug eof fixed lineinput bug eo fixed + lineinput bug eof fixed lineinput bug eof fixed lineinput bug eof Fixed + LineInput bug EOF + + fixed session invalidation unbind notification to conform with spec fi fixed + session invalidation unbind notification to conform with spec fi fixed + session invalidation unbind notification to conform with spec Fixed session + invalidation unbind notification to conform with spec + + improved flush ordering for forwarded requests. improved flush orderin + improved flush ordering for forwarded requests. improved flush orderin + improved flush ordering for forwarded requests. Improved flush ordering for forwarded requests. + load-on-startup the jspservlet so that precompiled servlets work. + load-on-startup the jspservlet so that precompiled servlets work. + load-on-startup the jspservlet so that precompiled servlets work. Load-on-startup the JspServlet so that precompiled servlets work. - + resource handler strips url params like jsession. Resource handler strips + + resource handler strips url params like jsession. resource handler str + resource handler strips url params like jsession. resource handler str + resource handler strips url params like jsession. Resource handler strips URL params like JSESSION. - + turned off range handling by default until bugs resolved Turned off range + + turned off range handling by default until bugs resolved turned off ra + turned off range handling by default until bugs resolved turned off ra + turned off range handling by default until bugs resolved Turned off range handling by default until bugs resolved jetty-3.1.rc3 - 09 April 2001 - + added contenthandler observer to xmlparser. Added ContentHandler Observer to + + added contenthandler observer to xmlparser. added contenthandler obser added + contenthandler observer to xmlparser. added contenthandler obser added + contenthandler observer to xmlparser. Added ContentHandler Observer to XmlParser. - + allow webapp xmlparser to be observed for ejb-ref tags etc. Allow webapp - XmlParser to be observed for ejb-ref tags etc. - + cleaned up handling of exceptions thrown by servlets. Cleaned up handling of + + allow webapp xmlparser to be observed for ejb-ref tags etc. allow weba allow + webapp xmlparser to be observed for ejb-ref tags etc. allow weba allow + webapp xmlparser to be observed for ejb-ref tags etc. Allow webapp XmlParser + to be observed for ejb-ref tags etc. + + cleaned up handling of exceptions thrown by servlets. cleaned up handl + cleaned up handling of exceptions thrown by servlets. cleaned up handl + cleaned up handling of exceptions thrown by servlets. Cleaned up handling of exceptions thrown by servlets. - + created better random session id Created better random session ID - + frame handles more jit stacks. Frame handles more JIT stacks. - + handle zero length posts Handle zero length POSTs - + implemented multi-part ranges so that acrobat is happy. Implemented + + created better random session id created better random session id crea + created better random session id created better random session id created + better random session id Created better random session ID + + frame handles more jit stacks. frame handles more jit stacks. frame ha frame + handles more jit stacks. frame handles more jit stacks. frame handles more + jit stacks. Frame handles more JIT stacks. + + handle zero length posts handle zero length posts handle zero length p + handle zero length posts handle zero length posts handle zero length posts + Handle zero length POSTs + + implemented multi-part ranges so that acrobat is happy. implemented + implemented multi-part ranges so that acrobat is happy. implemented + implemented multi-part ranges so that acrobat is happy. Implemented multi-part ranges so that acrobat is happy. - + improved flush ordering for forwarded requests. Improved flush ordering for + + improved flush ordering for forwarded requests. improved flush orderin + improved flush ordering for forwarded requests. improved flush orderin + improved flush ordering for forwarded requests. Improved flush ordering for forwarded requests. - + improved threadpool stop handling Improved ThreadPool stop handling - + simplified multipart response class. Simplified multipart response class. - + start session scavenger if needed. Start session scavenger if needed. + + improved threadpool stop handling improved threadpool stop handling im + improved threadpool stop handling improved threadpool stop handling improved + threadpool stop handling Improved ThreadPool stop handling + + simplified multipart response class. simplified multipart response cla + simplified multipart response class. simplified multipart response cla + simplified multipart response class. Simplified multipart response class. + + start session scavenger if needed. start session scavenger if needed. start + session scavenger if needed. start session scavenger if needed. start + session scavenger if needed. Start session scavenger if needed. jetty-3.1.rc2 - 30 March 2001 - + added multiexception to throw multiple nested exceptions. Added - MultiException to throw multiple nested exceptions. + + added multiexception to throw multiple nested exceptions. added added added + multiexception to throw multiple nested exceptions. added added + multiexception to throw multiple nested exceptions. Added MultiException to + throw multiple nested exceptions. + added options to turn off ranges and chunking to support acrobat reque added + options to turn off ranges and chunking to support acrobat reque added + options to turn off ranges and chunking to support acrobat reque added options to turn off ranges and chunking to support acrobat requests. - + fixed getlocales handling of quality params fixed getLocales handling of - quality params - + fixed getparameter(name) handling for multiple values. fixed - getParameter(name) handling for multiple values. - + improved handling of primitive classes in xmlconfig Improved handling of + + fixed getlocales handling of quality params fixed getlocales handling fixed + getlocales handling of quality params fixed getlocales handling fixed + getlocales handling of quality params fixed getLocales handling of quality + params + + fixed getparameter(name) handling for multiple values. fixed fixed fixed + getparameter(name) handling for multiple values. fixed fixed + getparameter(name) handling for multiple values. fixed getParameter(name) + handling for multiple values. + + improved handling of primitive classes in xmlconfig improved handling + improved handling of primitive classes in xmlconfig improved handling + improved handling of primitive classes in xmlconfig Improved handling of Primitive classes in XmlConfig - + improved logging of nested exceptions. Improved logging of nested - exceptions. - + lifecycle.start() may throw exception Lifecycle.start() may throw Exception - + only one instance of default mime map. Only one instance of default MIME - map. - + renamed getconnection to gethttpconnection Renamed getConnection to + + improved logging of nested exceptions. improved logging of nested impr + improved logging of nested exceptions. improved logging of nested improved + logging of nested exceptions. Improved logging of nested exceptions. + + lifecycle.start() may throw exception lifecycle.start() may throw exce + lifecycle.start() may throw exception lifecycle.start() may throw exce + lifecycle.start() may throw exception Lifecycle.start() may throw Exception + + only one instance of default mime map. only one instance of default mi only + one instance of default mime map. only one instance of default mi only one + instance of default mime map. Only one instance of default MIME map. + + renamed getconnection to gethttpconnection renamed getconnection to re + renamed getconnection to gethttpconnection renamed getconnection to renamed + getconnection to gethttpconnection Renamed getConnection to getHttpConnection - + use reference jaxp1.1 for xml parsing.y Use reference JAXP1.1 for XML - parsing.y - + version 1.1 of configuration dtd supports new objects. Version 1.1 of + + use reference jaxp1.1 for xml parsing.y use reference jaxp1.1 for xml use + reference jaxp1.1 for xml parsing.y use reference jaxp1.1 for xml use + reference jaxp1.1 for xml parsing.y Use reference JAXP1.1 for XML parsing.y + + version 1.1 of configuration dtd supports new objects. version 1.1 of + version 1.1 of configuration dtd supports new objects. version 1.1 of + version 1.1 of configuration dtd supports new objects. Version 1.1 of configuration dtd supports New objects. jetty-3.1.rc1 - 18 March 2001 - + added jetty documentation pages from jettywiki Added Jetty documentation - pages from JettyWiki - + cleaned up build.xml script Cleaned up build.xml script - + fixed problem with servletcontext.getcontext(uri) Fixed problem with + + added jetty documentation pages from jettywiki added jetty documentati added + jetty documentation pages from jettywiki added jetty documentati added jetty + documentation pages from jettywiki Added Jetty documentation pages from + JettyWiki + + cleaned up build.xml script cleaned up build.xml script cleaned up bui + cleaned up build.xml script cleaned up build.xml script cleaned up build.xml + script Cleaned up build.xml script + + fixed problem with servletcontext.getcontext(uri) fixed problem with f fixed + problem with servletcontext.getcontext(uri) fixed problem with fixed problem + with servletcontext.getcontext(uri) Fixed problem with ServletContext.getContext(uri) - + minimal handling of servlet.log before initialization. Minimal handling of + + minimal handling of servlet.log before initialization. minimal handlin + minimal handling of servlet.log before initialization. minimal handlin + minimal handling of servlet.log before initialization. Minimal handling of Servlet.log before initialization. - + moved jmx and sasl handling to jetty3extra release Moved JMX and SASL - handling to Jetty3Extra release - + resource handler strips url params like jsession. Resource handler strips + + moved jmx and sasl handling to jetty3extra release moved jmx and sasl moved + jmx and sasl handling to jetty3extra release moved jmx and sasl moved jmx + and sasl handling to jetty3extra release Moved JMX and SASL handling to + Jetty3Extra release + + resource handler strips url params like jsession. resource handler str + resource handler strips url params like jsession. resource handler str + resource handler strips url params like jsession. Resource handler strips URL params like JSESSION. - + various ssl cleanups Various SSL cleanups + + various ssl cleanups various ssl cleanups various ssl cleanups various + various ssl cleanups various ssl cleanups various ssl cleanups Various SSL + cleanups jetty-3.1.rc0 - 23 February 2001 - + added jmx management framework. Added JMX management framework. - + changed getter and setter methods that did not conform to beans api. Changed + + added jmx management framework. added jmx management framework. added added + jmx management framework. added jmx management framework. added jmx + management framework. Added JMX management framework. + + changed getter and setter methods that did not conform to beans api. c + changed getter and setter methods that did not conform to beans api. c + changed getter and setter methods that did not conform to beans api. Changed getter and setter methods that did not conform to beans API. - + dynamic servlets may be restricted to context classloader. Dynamic servlets + + dynamic servlets may be restricted to context classloader. dynamic ser + dynamic servlets may be restricted to context classloader. dynamic ser + dynamic servlets may be restricted to context classloader. Dynamic servlets may be restricted to Context classloader. - + fixed init order for unnamed servlets. Fixed init order for unnamed - servlets. - + fixed session invalidation unbind notification to conform with spec Fixed - session invalidation unbind notification to conform with spec - + improved handling of primitives in utilities. Improved handling of - primitives in utilities. - + improved inetaddrport and threadedserver to reduce dns lookups. Improved + + fixed init order for unnamed servlets. fixed init order for unnamed fi fixed + init order for unnamed servlets. fixed init order for unnamed fixed init + order for unnamed servlets. Fixed init order for unnamed servlets. + + fixed session invalidation unbind notification to conform with spec fi fixed + session invalidation unbind notification to conform with spec fi fixed + session invalidation unbind notification to conform with spec Fixed session + invalidation unbind notification to conform with spec + + improved handling of primitives in utilities. improved handling of imp + improved handling of primitives in utilities. improved handling of improved + handling of primitives in utilities. Improved handling of primitives in + utilities. + + improved inetaddrport and threadedserver to reduce dns lookups. improv + improved inetaddrport and threadedserver to reduce dns lookups. improv + improved inetaddrport and threadedserver to reduce dns lookups. Improved InetAddrPort and ThreadedServer to reduce DNS lookups. - + reoganized packages to allowed sealed jars Reoganized packages to allowed + + reoganized packages to allowed sealed jars reoganized packages to allo + reoganized packages to allowed sealed jars reoganized packages to allo + reoganized packages to allowed sealed jars Reoganized packages to allowed sealed Jars - + socket made available via httpconnection. Socket made available via - HttpConnection. - + use thread context classloader as default context loader parent. Use Thread + + socket made available via httpconnection. socket made available via so + socket made available via httpconnection. socket made available via socket + made available via httpconnection. Socket made available via HttpConnection. + + use thread context classloader as default context loader parent. use t use + thread context classloader as default context loader parent. use t use + thread context classloader as default context loader parent. Use Thread context classloader as default context loader parent. jetty-3.0.4 - 23 February 2001 - + fixed lineinput bug with split crlf. Fixed LineInput bug with split CRLF. + + fixed lineinput bug with split crlf. fixed lineinput bug with split cr fixed + lineinput bug with split crlf. fixed lineinput bug with split cr fixed + lineinput bug with split crlf. Fixed LineInput bug with split CRLF. jetty-3.0.3 - 03 February 2001 - + allow log to be disabled before initialization. Allow Log to be disabled - before initialization. - + fixed handling of directories without trailing / Fixed handling of - directories without trailing / - + fixed pipelined request buffer bug. Fixed pipelined request buffer bug. - + handle empty form content without exception. Handle empty form content + + allow log to be disabled before initialization. allow log to be disabl allow + log to be disabled before initialization. allow log to be disabl allow log + to be disabled before initialization. Allow Log to be disabled before + initialization. + + fixed handling of directories without trailing / fixed handling of fix fixed + handling of directories without trailing / fixed handling of fixed handling + of directories without trailing / Fixed handling of directories without + trailing / + + fixed pipelined request buffer bug. fixed pipelined request buffer bug fixed + pipelined request buffer bug. fixed pipelined request buffer bug fixed + pipelined request buffer bug. Fixed pipelined request buffer bug. + + handle empty form content without exception. handle empty form content + handle empty form content without exception. handle empty form content + handle empty form content without exception. Handle empty form content without exception. - + implemented web.xml servlet mapping to a jsp Implemented web.xml servlet + + implemented web.xml servlet mapping to a jsp implemented web.xml servl + implemented web.xml servlet mapping to a jsp implemented web.xml servl + implemented web.xml servlet mapping to a jsp Implemented web.xml servlet mapping to a JSP - + included new jetty logo Included new Jetty Logo + + included new jetty logo included new jetty logo included new jetty log + included new jetty logo included new jetty logo included new jetty logo + Included new Jetty Logo jetty-3.0.2 - 13 January 2001 - + added etc/jetty.policy as example policy file. Added etc/jetty.policy as - example policy file. - + allow '+' in path portion of a url. Allow '+' in path portion of a URL. - + context specific security permissions. Context specific security - permissions. - + greatly improved buffering in chunkableoutputstream Greatly improved - buffering in ChunkableOutputStream - + handle unknown status reasons in httpresponse Handle unknown status reasons + + added etc/jetty.policy as example policy file. added etc/jetty.policy added + etc/jetty.policy as example policy file. added etc/jetty.policy added + etc/jetty.policy as example policy file. Added etc/jetty.policy as example + policy file. + + allow '+' in path portion of a url. allow '+' in path portion of a url allow + '+' in path portion of a url. allow '+' in path portion of a url allow '+' + in path portion of a url. Allow '+' in path portion of a URL. + + context specific security permissions. context specific security conte + context specific security permissions. context specific security context + specific security permissions. Context specific security permissions. + + greatly improved buffering in chunkableoutputstream greatly improved g + greatly improved buffering in chunkableoutputstream greatly improved greatly + improved buffering in chunkableoutputstream Greatly improved buffering in + ChunkableOutputStream + + handle unknown status reasons in httpresponse handle unknown status re + handle unknown status reasons in httpresponse handle unknown status re + handle unknown status reasons in httpresponse Handle unknown status reasons in HttpResponse - + ignore included response updates rather than illegalstateexception Ignore + + ignore included response updates rather than illegalstateexception ign + ignore included response updates rather than illegalstateexception ign + ignore included response updates rather than illegalstateexception Ignore included response updates rather than IllegalStateException - + improved html.block efficiency Improved HTML.Block efficiency - + improved jetty.bat Improved jetty.bat - + improved jetty.sh Improved jetty.sh - + padded error bodies for ie bug. Padded error bodies for IE bug. - + removed classloading stats which were causing circular class loading Removed + + improved html.block efficiency improved html.block efficiency improved + improved html.block efficiency improved html.block efficiency improved + html.block efficiency Improved HTML.Block efficiency + + improved jetty.bat improved jetty.bat improved jetty.bat improved jett + improved jetty.bat improved jetty.bat improved jetty.bat Improved jetty.bat + + improved jetty.sh improved jetty.sh improved jetty.sh improved jetty.s + improved jetty.sh improved jetty.sh improved jetty.sh Improved jetty.sh + + padded error bodies for ie bug. padded error bodies for ie bug. padded + padded error bodies for ie bug. padded error bodies for ie bug. padded error + bodies for ie bug. Padded error bodies for IE bug. + + removed classloading stats which were causing circular class loading r + removed classloading stats which were causing circular class loading r + removed classloading stats which were causing circular class loading Removed classloading stats which were causing circular class loading problems. - + replaced resourcehandler fifo cache with lru cache. Replaced ResourceHandler + + replaced resourcehandler fifo cache with lru cache. replaced resourceh + replaced resourcehandler fifo cache with lru cache. replaced resourceh + replaced resourcehandler fifo cache with lru cache. Replaced ResourceHandler FIFO cache with LRU cache. - + restructured demo site pages. Restructured demo site pages. - + try iso8859_1 encoding if can't find iso-8859-1 Try ISO8859_1 encoding if - can't find ISO-8859-1 + + restructured demo site pages. restructured demo site pages. restructur + restructured demo site pages. restructured demo site pages. restructured + demo site pages. Restructured demo site pages. + + try iso8859_1 encoding if can't find iso-8859-1 try iso8859_1 encoding try + iso8859_1 encoding if can't find iso-8859-1 try iso8859_1 encoding try + iso8859_1 encoding if can't find iso-8859-1 Try ISO8859_1 encoding if can't + find ISO-8859-1 jetty-3.0.1 - 20 December 2000 - + fixed value unbind notification for session invalidation. Fixed value unbind + + fixed value unbind notification for session invalidation. fixed value fixed + value unbind notification for session invalidation. fixed value fixed value + unbind notification for session invalidation. Fixed value unbind notification for session invalidation. - + removed double null check possibility from servletholder Removed double null + + removed double null check possibility from servletholder removed doubl + removed double null check possibility from servletholder removed doubl + removed double null check possibility from servletholder Removed double null check possibility from ServletHolder jetty-3.0.0 - 17 December 2000 - + fixed rel path handling in default configurations. Fixed rel path handling - in default configurations. - + fixed rollover bug in writerlogsink Fixed rollover bug in WriterLogSink - + fixed taglib parsing Fixed taglib parsing - + fixed writerlogsink init bug Fixed WriterLogSink init bug - + improved dtd resolution in xml parser. Improved dtd resolution in XML + + fixed rel path handling in default configurations. fixed rel path hand fixed + rel path handling in default configurations. fixed rel path hand fixed rel + path handling in default configurations. Fixed rel path handling in default + configurations. + + fixed rollover bug in writerlogsink fixed rollover bug in writerlogsin fixed + rollover bug in writerlogsink fixed rollover bug in writerlogsin fixed + rollover bug in writerlogsink Fixed rollover bug in WriterLogSink + + fixed taglib parsing fixed taglib parsing fixed taglib parsing fixed t fixed + taglib parsing fixed taglib parsing fixed taglib parsing Fixed taglib + parsing + + fixed writerlogsink init bug fixed writerlogsink init bug fixed fixed + writerlogsink init bug fixed writerlogsink init bug fixed writerlogsink init + bug Fixed WriterLogSink init bug + + improved dtd resolution in xml parser. improved dtd resolution in xml + improved dtd resolution in xml parser. improved dtd resolution in xml + improved dtd resolution in xml parser. Improved dtd resolution in XML parser. - + improved jetty.sh logging Improved jetty.sh logging - + optional extract war files. Optional extract war files. - + use inner class to avoid double null check sync problems Use inner class to - avoid double null check sync problems + + improved jetty.sh logging improved jetty.sh logging improved jetty.sh + improved jetty.sh logging improved jetty.sh logging improved jetty.sh + logging Improved jetty.sh logging + + optional extract war files. optional extract war files. optional extra + optional extract war files. optional extract war files. optional extract war + files. Optional extract war files. + + use inner class to avoid double null check sync problems use inner cla use + inner class to avoid double null check sync problems use inner cla use inner + class to avoid double null check sync problems Use inner class to avoid + double null check sync problems jetty-3.0.0.rc8 - 13 December 2000 - + added forwardhandler Added ForwardHandler - + change pathmap handling of /* to give precedence over suffix mapping. Change + + added forwardhandler added forwardhandler added forwardhandler added added + forwardhandler added forwardhandler added forwardhandler Added + ForwardHandler + + change pathmap handling of /* to give precedence over suffix mapping. change + pathmap handling of /* to give precedence over suffix mapping. change + pathmap handling of /* to give precedence over suffix mapping. Change PathMap handling of /* to give precedence over suffix mapping. - + default log options changed if in debug mode. Default log options changed if + + default log options changed if in debug mode. default log options chan + default log options changed if in debug mode. default log options chan + default log options changed if in debug mode. Default log options changed if in debug mode. - + forward to welcome pages rather than redirect. Forward to welcome pages + + forward to welcome pages rather than redirect. forward to welcome page + forward to welcome pages rather than redirect. forward to welcome page + forward to welcome pages rather than redirect. Forward to welcome pages rather than redirect. - + getsecurityhandler creates handler at position 0. getSecurityHandler creates + + getsecurityhandler creates handler at position 0. getsecurityhandler c + getsecurityhandler creates handler at position 0. getsecurityhandler c + getsecurityhandler creates handler at position 0. getSecurityHandler creates handler at position 0. - + improved exit admin handling Improved exit admin handling - + jetty.server catches init exceptions per server Jetty.Server catches init + + improved exit admin handling improved exit admin handling improved exi + improved exit admin handling improved exit admin handling improved exit + admin handling Improved exit admin handling + + jetty.server catches init exceptions per server jetty.server catches i + jetty.server catches init exceptions per server jetty.server catches i + jetty.server catches init exceptions per server Jetty.Server catches init exceptions per server - + mapped *.jsp,*.jsp,*.jsp,*.jsp,*.jsp,*.jsp,*.jsp,*.jsp Mapped + + mapped *.jsp,*.jsp,*.jsp,*.jsp,*.jsp,*.jsp,*.jsp,*.jsp mapped mapped mapped + *.jsp,*.jsp,*.jsp,*.jsp,*.jsp,*.jsp,*.jsp,*.jsp mapped mapped + + *.jsp,*.jsp,*.jsp,*.jsp,*.jsp,*.jsp,*.jsp,*.jsp Mapped + *.jsp,*.jsP,*.jSp,*.jSP,*.Jsp,*.JsP,*.JSp,*.JSP + optional alias checking added to fileresource. turned on by default o + optional alias checking added to fileresource. turned on by default o + optional alias checking added to fileresource. turned on by default o Optional alias checking added to FileResource. Turned on by default on all platforms without the "/" file separator. - + patched jasper to tomcat 3.2.1 Patched jasper to tomcat 3.2.1 - + protected meta-inf as well as web-inf in web applications. Protected + + patched jasper to tomcat 3.2.1 patched jasper to tomcat 3.2.1 patched + patched jasper to tomcat 3.2.1 patched jasper to tomcat 3.2.1 patched jasper + to tomcat 3.2.1 Patched jasper to tomcat 3.2.1 + + protected meta-inf as well as web-inf in web applications. protected + protected meta-inf as well as web-inf in web applications. protected + protected meta-inf as well as web-inf in web applications. Protected META-INF as well as WEB-INF in web applications. - + removed security constraint on demo admin server. Removed security - constraint on demo admin server. - + removed some unused variables. Removed some unused variables. - + removed special characters from source. Removed special characters from + + removed security constraint on demo admin server. removed security rem + removed security constraint on demo admin server. removed security removed + security constraint on demo admin server. Removed security constraint on + demo admin server. + + removed some unused variables. removed some unused variables. removed + removed some unused variables. removed some unused variables. removed some + unused variables. Removed some unused variables. + + removed special characters from source. removed special characters fro + removed special characters from source. removed special characters fro + removed special characters from source. Removed special characters from source. - + sysv unix init script SysV unix init script - + tidied handling of ".", ".." and "//" in resource paths Tidied handling of + + sysv unix init script sysv unix init script sysv unix init script sysv sysv + unix init script sysv unix init script sysv unix init script SysV unix init + script + + tidied handling of ".", ".." and "//" in resource paths tidied handlin + tidied handling of ".", ".." and "//" in resource paths tidied handlin + tidied handling of ".", ".." and "//" in resource paths Tidied handling of ".", ".." and "//" in resource paths jetty-3.0.0.rc7 - 02 December 2000 - + added com.mortbay.http.handler.servlet.context.logsink attribute to se Added + + added com.mortbay.http.handler.servlet.context.logsink attribute to se added + com.mortbay.http.handler.servlet.context.logsink attribute to se added + com.mortbay.http.handler.servlet.context.logsink attribute to se Added Com.mortbay.HTTP.Handler.Servlet.Context.LogSink attribute to Servlet Context. If set, it is used in preference to the system log. - + added notfoundservlet Added NotFoundServlet - + added range handling to resourcehandler. Added range handling to - ResourceHandler. - + allow dynamic servlets to be served from / Allow dynamic servlets to be - served from / - + auto add a notfoundhandler if needed. Auto add a NotFoundHandler if needed. - + cgi servlet handles not found better. CGI servlet handles not found better. - + changed log options to less verbose defaults. Changed log options to less + + added notfoundservlet added notfoundservlet added notfoundservlet adde added + notfoundservlet added notfoundservlet added notfoundservlet Added + NotFoundServlet + + added range handling to resourcehandler. added range handling to added added + range handling to resourcehandler. added range handling to added range + handling to resourcehandler. Added range handling to ResourceHandler. + + allow dynamic servlets to be served from / allow dynamic servlets to b allow + dynamic servlets to be served from / allow dynamic servlets to b allow + dynamic servlets to be served from / Allow dynamic servlets to be served + from / + + auto add a notfoundhandler if needed. auto add a notfoundhandler if ne auto + add a notfoundhandler if needed. auto add a notfoundhandler if ne auto add a + notfoundhandler if needed. Auto add a NotFoundHandler if needed. + + cgi servlet handles not found better. cgi servlet handles not found be cgi + servlet handles not found better. cgi servlet handles not found be cgi + servlet handles not found better. CGI servlet handles not found better. + + changed log options to less verbose defaults. changed log options to l + changed log options to less verbose defaults. changed log options to l + changed log options to less verbose defaults. Changed log options to less verbose defaults. - + conditionals apply to puts, dels and moves in resourcehandler. Conditionals + + conditionals apply to puts, dels and moves in resourcehandler. conditi + conditionals apply to puts, dels and moves in resourcehandler. conditi + conditionals apply to puts, dels and moves in resourcehandler. Conditionals apply to puts, dels and moves in ResourceHandler. + depreciated rolloverlogsink and moved functionality to an improved + depreciated rolloverlogsink and moved functionality to an improved + depreciated rolloverlogsink and moved functionality to an improved Depreciated RollOverLogSink and moved functionality to an improved WriterLogSink. - + don't set mime-version in response. Don't set MIME-Version in response. - + double null lock checks use threadpool.__nulllockchecks. Double null lock + + don't set mime-version in response. don't set mime-version in response don't + set mime-version in response. don't set mime-version in response don't set + mime-version in response. Don't set MIME-Version in response. + + double null lock checks use threadpool.__nulllockchecks. double null l + double null lock checks use threadpool.__nulllockchecks. double null l + double null lock checks use threadpool.__nulllockchecks. Double null lock checks use ThreadPool.__nullLockChecks. - + extended security constraints (see readme and webapp demo). Extended + + extended security constraints (see readme and webapp demo). extended + extended security constraints (see readme and webapp demo). extended + extended security constraints (see readme and webapp demo). Extended security constraints (see README and WebApp Demo). - + fixed security problem with lowercase web-inf uris on windows. Fixed - security problem with lowercase WEB-INF uris on windows. - + handle multiple inits of same servlet class. Handle multiple inits of same - servlet class. - + put, move disabled in webapplication unless defaults file is passed. PUT, - MOVE disabled in WebApplication unless defaults file is passed. - + set the acceptranges header. Set the AcceptRanges header. - + set thread context classloader during handler start/stop calls. Set thread + + fixed security problem with lowercase web-inf uris on windows. fixed f fixed + security problem with lowercase web-inf uris on windows. fixed fixed + security problem with lowercase web-inf uris on windows. Fixed security + problem with lowercase WEB-INF uris on windows. + + handle multiple inits of same servlet class. handle multiple inits of handle + multiple inits of same servlet class. handle multiple inits of handle + multiple inits of same servlet class. Handle multiple inits of same servlet + class. + + put, move disabled in webapplication unless defaults file is passed. p put, + move disabled in webapplication unless defaults file is passed. p put, move + disabled in webapplication unless defaults file is passed. PUT, MOVE + disabled in WebApplication unless defaults file is passed. + + set the acceptranges header. set the acceptranges header. set the set the + acceptranges header. set the acceptranges header. set the acceptranges + header. Set the AcceptRanges header. + + set thread context classloader during handler start/stop calls. set th set + thread context classloader during handler start/stop calls. set th set + thread context classloader during handler start/stop calls. Set thread context classloader during handler start/stop calls. - + split debug servlet out of admin servlet. Split Debug servlet out of Admin - Servlet. + + split debug servlet out of admin servlet. split debug servlet out of a split + debug servlet out of admin servlet. split debug servlet out of a split debug + servlet out of admin servlet. Split Debug servlet out of Admin Servlet. + threadedserver.forcestop() now makes a connection to itself to handle + threadedserver.forcestop() now makes a connection to itself to handle + threadedserver.forcestop() now makes a connection to itself to handle ThreadedServer.forceStop() now makes a connection to itself to handle non-premptive close. - + uris accept all characters < 0xff. URIs accept all characters < 0xff. + + uris accept all characters < 0xff. uris accept all characters < 0xff. uris + accept all characters < 0xff. uris accept all characters < 0xff. uris accept + all characters < 0xff. URIs accept all characters < 0xff. + web-inf protected by notfoundservlet rather than security constraint. + web-inf protected by notfoundservlet rather than security constraint. + web-inf protected by notfoundservlet rather than security constraint. WEB-INF protected by NotFoundServlet rather than security constraint. jetty-3.0.0.rc6 - 20 November 2000 - + added servletwriter that can be disabled. Added ServletWriter that can be + + added servletwriter that can be disabled. added servletwriter that can added + servletwriter that can be disabled. added servletwriter that can added + servletwriter that can be disabled. Added ServletWriter that can be disabled. - + added win32 service support Added Win32 service support - + admin servlet uses unique links for ie. Admin servlet uses unique links for - IE. - + allow httpmessage state to be manipulated. Allow HttpMessage state to be + + added win32 service support added win32 service support added win32 se added + win32 service support added win32 service support added win32 service + support Added Win32 service support + + admin servlet uses unique links for ie. admin servlet uses unique link admin + servlet uses unique links for ie. admin servlet uses unique link admin + servlet uses unique links for ie. Admin servlet uses unique links for IE. + + allow httpmessage state to be manipulated. allow httpmessage state to allow + httpmessage state to be manipulated. allow httpmessage state to allow + httpmessage state to be manipulated. Allow HttpMessage state to be manipulated. - + allow load-on-startup with no content. Allow load-on-startup with no - content. - + allow multiple set cookies. Allow multiple set cookies. - + corrected a few of the many spelling mistakes. Corrected a few of the many + + allow load-on-startup with no content. allow load-on-startup with no a allow + load-on-startup with no content. allow load-on-startup with no allow + load-on-startup with no content. Allow load-on-startup with no content. + + allow multiple set cookies. allow multiple set cookies. allow multiple allow + multiple set cookies. allow multiple set cookies. allow multiple set + cookies. Allow multiple set cookies. + + corrected a few of the many spelling mistakes. corrected a few of the + corrected a few of the many spelling mistakes. corrected a few of the + corrected a few of the many spelling mistakes. Corrected a few of the many spelling mistakes. - + don't include classes in release. don't include classes in release. - + don't set connection:close for normal http/1.0 responses. Don't set - connection:close for normal HTTP/1.0 responses. - + don't start httpserver log sink on add. Don't start HttpServer log sink on - add. - + fixed rolloverfilelogsink bug with extra log files. Fixed - RollOverFileLogSink bug with extra log files. - + implemented customizable error pages. Implemented customizable error pages. + + don't include classes in release. don't include classes in release. do don't + include classes in release. don't include classes in release. don't include + classes in release. don't include classes in release. + + don't set connection:close for normal http/1.0 responses. don't set do don't + set connection:close for normal http/1.0 responses. don't set don't set + connection:close for normal http/1.0 responses. Don't set connection:close + for normal HTTP/1.0 responses. + + don't start httpserver log sink on add. don't start httpserver log sin don't + start httpserver log sink on add. don't start httpserver log sin don't start + httpserver log sink on add. Don't start HttpServer log sink on add. + + fixed rolloverfilelogsink bug with extra log files. fixed fixed fixed + rolloverfilelogsink bug with extra log files. fixed fixed + rolloverfilelogsink bug with extra log files. Fixed RollOverFileLogSink bug + with extra log files. + + implemented customizable error pages. implemented customizable error p + implemented customizable error pages. implemented customizable error p + implemented customizable error pages. Implemented customizable error pages. + implemented resource aliases in handlercontext - used by servlet conte + implemented resource aliases in handlercontext - used by servlet conte + implemented resource aliases in handlercontext - used by servlet conte Implemented resource aliases in HandlerContext - used by Servlet Context - + improved log defaults Improved Log defaults - + javadoc improvements. Javadoc improvements. - + map tablib configuration to resource aliases. Map tablib configuration to + + improved log defaults improved log defaults improved log defaults impr + improved log defaults improved log defaults improved log defaults Improved + Log defaults + + javadoc improvements. javadoc improvements. javadoc improvements. java + javadoc improvements. javadoc improvements. javadoc improvements. Javadoc + improvements. + + map tablib configuration to resource aliases. map tablib configuration map + tablib configuration to resource aliases. map tablib configuration map + tablib configuration to resource aliases. Map tablib configuration to resource aliases. - + prevent reloading dynamic servlets at different paths. Prevent reloading + + prevent reloading dynamic servlets at different paths. prevent reloadi + prevent reloading dynamic servlets at different paths. prevent reloadi + prevent reloading dynamic servlets at different paths. Prevent reloading dynamic servlets at different paths. - + put extra server and servlet info in header. Put extra server and servlet - info in header. - + reduced risk of double null check sync problem. Reduced risk of double null + + put extra server and servlet info in header. put extra server and serv put + extra server and servlet info in header. put extra server and serv put extra + server and servlet info in header. Put extra server and servlet info in + header. + + reduced risk of double null check sync problem. reduced risk of double + reduced risk of double null check sync problem. reduced risk of double + reduced risk of double null check sync problem. Reduced risk of double null check sync problem. + requestdispatcher.forward() only resets buffer, not headers. + requestdispatcher.forward() only resets buffer, not headers. + requestdispatcher.forward() only resets buffer, not headers. RequestDispatcher.forward() only resets buffer, not headers. - + requestdispatcher new queries params replace old. RequestDispatcher new + + requestdispatcher new queries params replace old. requestdispatcher ne + requestdispatcher new queries params replace old. requestdispatcher ne + requestdispatcher new queries params replace old. RequestDispatcher new queries params replace old. - + resource gets systemresources from it's own classloader. Resource gets + + resource gets systemresources from it's own classloader. resource gets + resource gets systemresources from it's own classloader. resource gets + resource gets systemresources from it's own classloader. Resource gets systemresources from it's own classloader. - + servlet init order may be negative. Servlet init order may be negative. - + session cookies are given context path Session cookies are given context + + servlet init order may be negative. servlet init order may be negative + servlet init order may be negative. servlet init order may be negative + servlet init order may be negative. Servlet init order may be negative. + + session cookies are given context path session cookies are given conte + session cookies are given context path session cookies are given conte + session cookies are given context path Session cookies are given context path - + sessions try version 1 cookies in set-cookie2 header. Sessions try version 1 + + sessions try version 1 cookies in set-cookie2 header. sessions try ver + sessions try version 1 cookies in set-cookie2 header. sessions try ver + sessions try version 1 cookies in set-cookie2 header. Sessions try version 1 cookies in set-cookie2 header. - + simple stats in contextloader. Simple stats in ContextLoader. - + version details in header can be suppressed with system property Version + + simple stats in contextloader. simple stats in contextloader. simple s + simple stats in contextloader. simple stats in contextloader. simple stats + in contextloader. Simple stats in ContextLoader. + + version details in header can be suppressed with system property versi + version details in header can be suppressed with system property versi + version details in header can be suppressed with system property Version details in header can be suppressed with System property java.com.mortbay.HTTP.Version.paranoid - + warn for missing web-inf or web.xml Warn for missing WEB-INF or web.xml - + webapps serve dynamics servlets by default. Webapps serve dynamics servlets + + warn for missing web-inf or web.xml warn for missing web-inf or web.xm warn + for missing web-inf or web.xml warn for missing web-inf or web.xm warn for + missing web-inf or web.xml Warn for missing WEB-INF or web.xml + + webapps serve dynamics servlets by default. webapps serve dynamics ser + webapps serve dynamics servlets by default. webapps serve dynamics ser + webapps serve dynamics servlets by default. Webapps serve dynamics servlets by default. jetty-3.0.0.rc5 - 12 November 2000 - + added debug form to admin servlet. Added debug form to Admin servlet. - + allow null cookie values Allow null cookie values - + avoid jprobe race warnings in datecache Avoid jprobe race warnings in - DateCache - + default writer encoding set by mime type if not explicitly set. Default + + added debug form to admin servlet. added debug form to admin servlet. added + debug form to admin servlet. added debug form to admin servlet. added debug + form to admin servlet. Added debug form to Admin servlet. + + allow null cookie values allow null cookie values allow null cookie va allow + null cookie values allow null cookie values allow null cookie values Allow + null cookie values + + avoid jprobe race warnings in datecache avoid jprobe race warnings in avoid + jprobe race warnings in datecache avoid jprobe race warnings in avoid jprobe + race warnings in datecache Avoid jprobe race warnings in DateCache + + default writer encoding set by mime type if not explicitly set. defaul + default writer encoding set by mime type if not explicitly set. defaul + default writer encoding set by mime type if not explicitly set. Default writer encoding set by mime type if not explicitly set. - + implemented servlet load ordering. Implemented servlet load ordering. - + many javadoc cleanups. Many javadoc cleanups. - + merged dynamichandler into servlethandler. Merged DynamicHandler into + + implemented servlet load ordering. implemented servlet load ordering. + implemented servlet load ordering. implemented servlet load ordering. + implemented servlet load ordering. Implemented servlet load ordering. + + many javadoc cleanups. many javadoc cleanups. many javadoc cleanups. m many + javadoc cleanups. many javadoc cleanups. many javadoc cleanups. Many javadoc + cleanups. + + merged dynamichandler into servlethandler. merged dynamichandler into + merged dynamichandler into servlethandler. merged dynamichandler into merged + dynamichandler into servlethandler. Merged DynamicHandler into ServletHandler. - + moved jsp classpath hack to servletholder Moved JSP classpath hack to - ServletHolder - + pass flush through servletout Pass flush through ServletOut - + relax webapp rules, accept no web.xml or no web-inf Relax webapp rules, - accept no web.xml or no WEB-INF - + removed makefile build system. Removed Makefile build system. - + requestdispatcher can dispatch static resources. RequestDispatcher can + + moved jsp classpath hack to servletholder moved jsp classpath hack to moved + jsp classpath hack to servletholder moved jsp classpath hack to moved jsp + classpath hack to servletholder Moved JSP classpath hack to ServletHolder + + pass flush through servletout pass flush through servletout pass flush pass + flush through servletout pass flush through servletout pass flush through + servletout Pass flush through ServletOut + + relax webapp rules, accept no web.xml or no web-inf relax webapp rules relax + webapp rules, accept no web.xml or no web-inf relax webapp rules relax + webapp rules, accept no web.xml or no web-inf Relax webapp rules, accept no + web.xml or no WEB-INF + + removed makefile build system. removed makefile build system. removed + removed makefile build system. removed makefile build system. removed + makefile build system. Removed Makefile build system. + + requestdispatcher can dispatch static resources. requestdispatcher can + requestdispatcher can dispatch static resources. requestdispatcher can + requestdispatcher can dispatch static resources. RequestDispatcher can dispatch static resources. + servlet exceptions cause 503 unavailable rather than 500 server error + servlet exceptions cause 503 unavailable rather than 500 server error + servlet exceptions cause 503 unavailable rather than 500 server error Servlet exceptions cause 503 unavailable rather than 500 server error jetty-2.4.9 - 12 November 2000 - + htmlfilter handles non default encodings HtmlFilter handles non default + + htmlfilter handles non default encodings htmlfilter handles non defaul + htmlfilter handles non default encodings htmlfilter handles non defaul + htmlfilter handles non default encodings HtmlFilter handles non default encodings - + httplistener default max idle time = 20s HttpListener default max idle time + + httplistener default max idle time = 20s httplistener default max idle + httplistener default max idle time = 20s httplistener default max idle + httplistener default max idle time = 20s HttpListener default max idle time = 20s - + httplistener ignore interruptedioexceptions HttpListener ignore - InterruptedIOExceptions - + httprequest.write uses iso8859_1 encoding. HttpRequest.write uses ISO8859_1 + + httplistener ignore interruptedioexceptions httplistener ignore httpli + httplistener ignore interruptedioexceptions httplistener ignore httplistener + ignore interruptedioexceptions HttpListener ignore InterruptedIOExceptions + + httprequest.write uses iso8859_1 encoding. httprequest.write uses iso8 + httprequest.write uses iso8859_1 encoding. httprequest.write uses iso8 + httprequest.write uses iso8859_1 encoding. HttpRequest.write uses ISO8859_1 encoding. - + writing httprequests encodes path Writing HttpRequests encodes path + + writing httprequests encodes path writing httprequests encodes path wr + writing httprequests encodes path writing httprequests encodes path writing + httprequests encodes path Writing HttpRequests encodes path jetty-3.0.0.rc4 - 06 November 2000 - + fixed mime type mapping bug introduced in rc3 Fixed mime type mapping bug - introduced in RC3 - + fixed mis-synchronization in threadpool.stop() Fixed mis-synchronization in + + fixed mime type mapping bug introduced in rc3 fixed mime type mapping fixed + mime type mapping bug introduced in rc3 fixed mime type mapping fixed mime + type mapping bug introduced in rc3 Fixed mime type mapping bug introduced in + RC3 + + fixed mis-synchronization in threadpool.stop() fixed mis-synchronizati fixed + mis-synchronization in threadpool.stop() fixed mis-synchronizati fixed + mis-synchronization in threadpool.stop() Fixed mis-synchronization in ThreadPool.stop() - + ignore more ioexceptions (still visible with debug). Ignore more - IOExceptions (still visible with debug). - + provide default jettyindex.properties Provide default JettyIndex.properties + + ignore more ioexceptions (still visible with debug). ignore more ignor + ignore more ioexceptions (still visible with debug). ignore more ignore more + ioexceptions (still visible with debug). Ignore more IOExceptions (still + visible with debug). + + provide default jettyindex.properties provide default jettyindex.prope + provide default jettyindex.properties provide default jettyindex.prope + provide default jettyindex.properties Provide default JettyIndex.properties jetty-3.0.0.rc3 - 05 November 2000 - + added bin/jetty.sh run script. Added bin/jetty.sh run script. - + added context class path dynamic servlet demo Added context class path - dynamic servlet demo - + added gz tgz tar.gz .z mime mappings. Added gz tgz tar.gz .z mime mappings. - + added handlercontext.sethttpserveraccess for trusted contexts. Added + + added bin/jetty.sh run script. added bin/jetty.sh run script. added added + bin/jetty.sh run script. added bin/jetty.sh run script. added bin/jetty.sh + run script. Added bin/jetty.sh run script. + + added context class path dynamic servlet demo added context class path added + context class path dynamic servlet demo added context class path added + context class path dynamic servlet demo Added context class path dynamic + servlet demo + + added gz tgz tar.gz .z mime mappings. added gz tgz tar.gz .z mime mapp added + gz tgz tar.gz .z mime mappings. added gz tgz tar.gz .z mime mapp added gz + tgz tar.gz .z mime mappings. Added gz tgz tar.gz .z mime mappings. + + added handlercontext.sethttpserveraccess for trusted contexts. added a added + handlercontext.sethttpserveraccess for trusted contexts. added added + handlercontext.sethttpserveraccess for trusted contexts. Added HandlerContext.setHttpServerAccess for trusted contexts. - + changed threadpool.stop for ibm 1.3 jvm Changed ThreadPool.stop for IBM 1.3 + + changed threadpool.stop for ibm 1.3 jvm changed threadpool.stop for ib + changed threadpool.stop for ibm 1.3 jvm changed threadpool.stop for ib + changed threadpool.stop for ibm 1.3 jvm Changed ThreadPool.stop for IBM 1.3 JVM - + fixed default mimemap initialization bug Fixed default mimemap - initialization bug - + further clean up of the connection close actions Further clean up of the + + fixed default mimemap initialization bug fixed default mimemap fixed d fixed + default mimemap initialization bug fixed default mimemap fixed default + mimemap initialization bug Fixed default mimemap initialization bug + + further clean up of the connection close actions further clean up of t + further clean up of the connection close actions further clean up of t + further clean up of the connection close actions Further clean up of the connection close actions - + handle mime suffixes containing dots. Handle mime suffixes containing dots. - + implemented mime mapping in webapplications. Implemented mime mapping in + + handle mime suffixes containing dots. handle mime suffixes containing handle + mime suffixes containing dots. handle mime suffixes containing handle mime + suffixes containing dots. Handle mime suffixes containing dots. + + implemented mime mapping in webapplications. implemented mime mapping + implemented mime mapping in webapplications. implemented mime mapping + implemented mime mapping in webapplications. Implemented mime mapping in webapplications. - + moved unused classes from com.mortbay.util to com.mortbay.tools in new Moved + + moved unused classes from com.mortbay.util to com.mortbay.tools in new moved + unused classes from com.mortbay.util to com.mortbay.tools in new moved + unused classes from com.mortbay.util to com.mortbay.tools in new Moved unused classes from com.mortbay.Util to com.mortbay.Tools in new distribution package. - + optimized persistent connections by recycling objects Optimized persistent + + optimized persistent connections by recycling objects optimized persis + optimized persistent connections by recycling objects optimized persis + optimized persistent connections by recycling objects Optimized persistent connections by recycling objects - + prevent servlet setattribute calls to protected context attributes. Prevent + + prevent servlet setattribute calls to protected context attributes. pr + prevent servlet setattribute calls to protected context attributes. pr + prevent servlet setattribute calls to protected context attributes. Prevent servlet setAttribute calls to protected context attributes. - + removed redundant context attributes. Removed redundant context attributes. - + set maxreadtimems in all examples Set MaxReadTimeMs in all examples - + set the thread context class loader in handlercontext.handle Set the thread - context class loader in HandlerContext.handle - + strip ./ from relative resources. Strip ./ from relative resources. - + upgraded build.xml to ant v1.2 upgraded build.xml to ant v1.2 + + removed redundant context attributes. removed redundant context attrib + removed redundant context attributes. removed redundant context attrib + removed redundant context attributes. Removed redundant context attributes. + + set maxreadtimems in all examples set maxreadtimems in all examples se set + maxreadtimems in all examples set maxreadtimems in all examples set + maxreadtimems in all examples Set MaxReadTimeMs in all examples + + set the thread context class loader in handlercontext.handle set the t set + the thread context class loader in handlercontext.handle set the t set the + thread context class loader in handlercontext.handle Set the thread context + class loader in HandlerContext.handle + + strip ./ from relative resources. strip ./ from relative resources. st strip + ./ from relative resources. strip ./ from relative resources. strip ./ from + relative resources. Strip ./ from relative resources. + + upgraded build.xml to ant v1.2 upgraded build.xml to ant v1.2 upgraded + upgraded build.xml to ant v1.2 upgraded build.xml to ant v1.2 upgraded + build.xml to ant v1.2 upgraded build.xml to ant v1.2 jetty-3.0.0.rc2 - 29 October 2000 - + accept http/1. as http/1.0 (for netscape bug). Accept HTTP/1. as HTTP/1.0 + + accept http/1. as http/1.0 (for netscape bug). accept http/1. as http/ + accept http/1. as http/1.0 (for netscape bug). accept http/1. as http/ + accept http/1. as http/1.0 (for netscape bug). Accept HTTP/1. as HTTP/1.0 (for netscape bug). - + accept public dtd for xmlconfiguration (old style still supported). Accept + + accept public dtd for xmlconfiguration (old style still supported). ac + accept public dtd for xmlconfiguration (old style still supported). ac + accept public dtd for xmlconfiguration (old style still supported). Accept public DTD for XmlConfiguration (old style still supported). - + cleaned up non persistent connection close. Cleaned up non persistent + + cleaned up non persistent connection close. cleaned up non persistent + cleaned up non persistent connection close. cleaned up non persistent + cleaned up non persistent connection close. Cleaned up non persistent connection close. + erlencoding treats params without values as empty rather than null. + erlencoding treats params without values as empty rather than null. + erlencoding treats params without values as empty rather than null. ErlEncoding treats params without values as empty rather than null. - + fixed thread name problem in threadpool Fixed thread name problem in - ThreadPool - + pass file based classpath to jspservlet (see readme). Pass file based - classpath to JspServlet (see README). - + prevented multiple init of servletholder Prevented multiple init of + + fixed thread name problem in threadpool fixed thread name problem in f fixed + thread name problem in threadpool fixed thread name problem in fixed thread + name problem in threadpool Fixed thread name problem in ThreadPool + + pass file based classpath to jspservlet (see readme). pass file based pass + file based classpath to jspservlet (see readme). pass file based pass file + based classpath to jspservlet (see readme). Pass file based classpath to + JspServlet (see README). + + prevented multiple init of servletholder prevented multiple init of + prevented multiple init of servletholder prevented multiple init of + prevented multiple init of servletholder Prevented multiple init of ServletHolder - + replaced iso-8859-1 literals with stringutil static Replaced ISO-8859-1 + + replaced iso-8859-1 literals with stringutil static replaced iso-8859- + replaced iso-8859-1 literals with stringutil static replaced iso-8859- + replaced iso-8859-1 literals with stringutil static Replaced ISO-8859-1 literals with StringUtil static jetty-3.0.0.rc1 - 22 October 2000 - + added cgi to demo Added CGI to demo - + added hashuserrealm and cleaned up security constraints Added HashUserRealm - and cleaned up security constraints - + added multipart request and response classes from jetty2 Added Multipart - request and response classes from Jetty2 - + added simple admin servlet. Added simple admin servlet. - + all attributes in javax. java. and com.mortbay. name spaces to be set. All + + added cgi to demo added cgi to demo added cgi to demo added cgi to dem added + cgi to demo added cgi to demo added cgi to demo Added CGI to demo + + added hashuserrealm and cleaned up security constraints added hashuser added + hashuserrealm and cleaned up security constraints added hashuser added + hashuserrealm and cleaned up security constraints Added HashUserRealm and + cleaned up security constraints + + added multipart request and response classes from jetty2 added multipa added + multipart request and response classes from jetty2 added multipa added + multipart request and response classes from jetty2 Added Multipart request + and response classes from Jetty2 + + added simple admin servlet. added simple admin servlet. added simple a added + simple admin servlet. added simple admin servlet. added simple admin + servlet. Added simple admin servlet. + + all attributes in javax. java. and com.mortbay. name spaces to be set. all + attributes in javax. java. and com.mortbay. name spaces to be set. all + attributes in javax. java. and com.mortbay. name spaces to be set. All attributes in javax. java. and com.mortbay. name spaces to be set. - + cleaned up exception handling. Cleaned up exception handling. - + initialize jsp with classloader. Initialize JSP with classloader. - + moved and simplified servletloader to contextloader. Moved and simplified + + cleaned up exception handling. cleaned up exception handling. cleaned + cleaned up exception handling. cleaned up exception handling. cleaned up + exception handling. Cleaned up exception handling. + + initialize jsp with classloader. initialize jsp with classloader. init + initialize jsp with classloader. initialize jsp with classloader. initialize + jsp with classloader. Initialize JSP with classloader. + + moved and simplified servletloader to contextloader. moved and simplif moved + and simplified servletloader to contextloader. moved and simplif moved and + simplified servletloader to contextloader. Moved and simplified ServletLoader to ContextLoader. - + partial handling of 0.9 requests. Partial handling of 0.9 requests. - + removed thread.destroy() calls. removed Thread.destroy() calls. + + partial handling of 0.9 requests. partial handling of 0.9 requests. pa + partial handling of 0.9 requests. partial handling of 0.9 requests. partial + handling of 0.9 requests. Partial handling of 0.9 requests. + + removed thread.destroy() calls. removed thread.destroy() calls. remove + removed thread.destroy() calls. removed thread.destroy() calls. removed + thread.destroy() calls. removed Thread.destroy() calls. jetty-2.4.8 - 23 October 2000 - + fixed bug with 304 replies with bodies. Fixed bug with 304 replies with - bodies. - + fixed closing socket problem Fixed closing socket problem - + improved win32 make files. Improved win32 make files. + + fixed bug with 304 replies with bodies. fixed bug with 304 replies wit fixed + bug with 304 replies with bodies. fixed bug with 304 replies wit fixed bug + with 304 replies with bodies. Fixed bug with 304 replies with bodies. + + fixed closing socket problem fixed closing socket problem fixed closin fixed + closing socket problem fixed closing socket problem fixed closing socket + problem Fixed closing socket problem + + improved win32 make files. improved win32 make files. improved win32 m + improved win32 make files. improved win32 make files. improved win32 make + files. Improved win32 make files. jetty-3.0.B05 - 18 October 2000 - + added default webapp servlet mapping /servlet/name/* Added default webapp - servlet mapping /servlet/name/* - + cleaned up response committing and flushing Cleaned up response committing + + added default webapp servlet mapping /servlet/name/* added default web added + default webapp servlet mapping /servlet/name/* added default web added + default webapp servlet mapping /servlet/name/* Added default webapp servlet + mapping /servlet/name/* + + cleaned up response committing and flushing cleaned up response commit + cleaned up response committing and flushing cleaned up response commit + cleaned up response committing and flushing Cleaned up response committing and flushing - + fixed jarfileresource to handle jar files without directories. Fixed + + fixed jarfileresource to handle jar files without directories. fixed f fixed + jarfileresource to handle jar files without directories. fixed fixed + jarfileresource to handle jar files without directories. Fixed JarFileResource to handle jar files without directories. - + handler rfc2109 cookies (like any browser handles them!) Handler RFC2109 + + handler rfc2109 cookies (like any browser handles them!) handler rfc21 + handler rfc2109 cookies (like any browser handles them!) handler rfc21 + handler rfc2109 cookies (like any browser handles them!) Handler RFC2109 cookies (like any browser handles them!) - + implemented security-role-ref for servlets Implemented security-role-ref for + + implemented security-role-ref for servlets implemented security-role-r + implemented security-role-ref for servlets implemented security-role-r + implemented security-role-ref for servlets Implemented security-role-ref for servlets - + implemented war file support Implemented war file support - + improved ant documentation. improved ant documentation. - + improved default log format for clarity. Improved default log format for + + implemented war file support implemented war file support implemented + implemented war file support implemented war file support implemented war + file support Implemented war file support + + improved ant documentation. improved ant documentation. improved ant + improved ant documentation. improved ant documentation. improved ant + documentation. improved ant documentation. + + improved default log format for clarity. improved default log format f + improved default log format for clarity. improved default log format f + improved default log format for clarity. Improved default log format for clarity. - + improved null returns to get almost clean watchdog test. Improved null + + improved null returns to get almost clean watchdog test. improved null + improved null returns to get almost clean watchdog test. improved null + improved null returns to get almost clean watchdog test. Improved null returns to get almost clean watchdog test. - + improved path spec interpretation by looking at 2.3 spec Improved path spec + + improved path spec interpretation by looking at 2.3 spec improved path + improved path spec interpretation by looking at 2.3 spec improved path + improved path spec interpretation by looking at 2.3 spec Improved path spec interpretation by looking at 2.3 spec - + java2 style classloading Java2 style classloading - + made test harnesses work with ant. Made test harnesses work with ant. - + protected servletconfig from downcast security problems Protected - servletConfig from downcast security problems - + removed most deprecation warnings Removed most deprecation warnings - + separated context attributes and initparams. Separated context attributes + + java2 style classloading java2 style classloading java2 style classloa java2 + style classloading java2 style classloading java2 style classloading Java2 + style classloading + + made test harnesses work with ant. made test harnesses work with ant. made + test harnesses work with ant. made test harnesses work with ant. made test + harnesses work with ant. Made test harnesses work with ant. + + protected servletconfig from downcast security problems protected prot + protected servletconfig from downcast security problems protected protected + servletconfig from downcast security problems Protected servletConfig from + downcast security problems + + removed most deprecation warnings removed most deprecation warnings re + removed most deprecation warnings removed most deprecation warnings removed + most deprecation warnings Removed most deprecation warnings + + separated context attributes and initparams. separated context attribu + separated context attributes and initparams. separated context attribu + separated context attributes and initparams. Separated context attributes and initParams. jetty-3.0.B04 - 12 October 2000 - + added modified version of jasperb3.2 for jsp Added modified version of - JasperB3.2 for JSP - + added webdefault.xml for web applications. Added webdefault.xml for web + + added modified version of jasperb3.2 for jsp added modified version of added + modified version of jasperb3.2 for jsp added modified version of added + modified version of jasperb3.2 for jsp Added modified version of JasperB3.2 + for JSP + + added webdefault.xml for web applications. added webdefault.xml for we added + webdefault.xml for web applications. added webdefault.xml for we added + webdefault.xml for web applications. Added webdefault.xml for web applications. - + do not try multiple servlets for a request. Do not try multiple servlets for - a request. - + filthy hack to teach jasper jspserver jetty classpath Filthy hack to teach + + do not try multiple servlets for a request. do not try multiple servle do + not try multiple servlets for a request. do not try multiple servle do not + try multiple servlets for a request. Do not try multiple servlets for a + request. + + filthy hack to teach jasper jspserver jetty classpath filthy hack to t + filthy hack to teach jasper jspserver jetty classpath filthy hack to t + filthy hack to teach jasper jspserver jetty classpath Filthy hack to teach jasper JspServer Jetty classpath - + fixed problem with session id in paths Fixed problem with session ID in - paths - + implemented context.getcontext(uri) Implemented Context.getContext(uri) - + merged and renamed third party jars. Merged and renamed third party jars. - + moved filebase to docroot Moved FileBase to docroot - + redirect to index files, so index.jsp works. Redirect to index files, so + + fixed problem with session id in paths fixed problem with session id i fixed + problem with session id in paths fixed problem with session id i fixed + problem with session id in paths Fixed problem with session ID in paths + + implemented context.getcontext(uri) implemented context.getcontext(uri + implemented context.getcontext(uri) implemented context.getcontext(uri + implemented context.getcontext(uri) Implemented Context.getContext(uri) + + merged and renamed third party jars. merged and renamed third party ja + merged and renamed third party jars. merged and renamed third party ja + merged and renamed third party jars. Merged and renamed third party jars. + + moved filebase to docroot moved filebase to docroot moved filebase to moved + filebase to docroot moved filebase to docroot moved filebase to docroot + Moved FileBase to docroot + + redirect to index files, so index.jsp works. redirect to index files, + redirect to index files, so index.jsp works. redirect to index files, + redirect to index files, so index.jsp works. Redirect to index files, so index.jsp works. - + restricted context mapping to simple model for servlets. Restricted context + + restricted context mapping to simple model for servlets. restricted co + restricted context mapping to simple model for servlets. restricted co + restricted context mapping to simple model for servlets. Restricted context mapping to simple model for servlets. jetty-3.0.B03 - 09 October 2000 - + added append mode in rolloverfilelogsink Added append mode in - RolloverFileLogSink - + added release script Added release script - + catch stop and destroy exceptions in httpserver.stop() Catch stop and - destroy exceptions in HttpServer.stop() - + expanded import package.*; lines Expanded import package.*; lines - + expanded leading tabs to spaces Expanded leading tabs to spaces - + handle ignorable spaces in webapplication Handle ignorable spaces in - WebApplication - + handle ignorable spaces in xmlconfiguration Handle ignorable spaces in + + added append mode in rolloverfilelogsink added append mode in added ap added + append mode in rolloverfilelogsink added append mode in added append mode in + rolloverfilelogsink Added append mode in RolloverFileLogSink + + added release script added release script added release script added r added + release script added release script added release script Added release + script + + catch stop and destroy exceptions in httpserver.stop() catch stop and catch + stop and destroy exceptions in httpserver.stop() catch stop and catch stop + and destroy exceptions in httpserver.stop() Catch stop and destroy + exceptions in HttpServer.stop() + + expanded import package.*; lines expanded import package.*; lines expa + expanded import package.*; lines expanded import package.*; lines expanded + import package.*; lines Expanded import package.*; lines + + expanded leading tabs to spaces expanded leading tabs to spaces expand + expanded leading tabs to spaces expanded leading tabs to spaces expanded + leading tabs to spaces Expanded leading tabs to spaces + + handle ignorable spaces in webapplication handle ignorable spaces in h + handle ignorable spaces in webapplication handle ignorable spaces in handle + ignorable spaces in webapplication Handle ignorable spaces in WebApplication + + handle ignorable spaces in xmlconfiguration handle ignorable spaces in + handle ignorable spaces in xmlconfiguration handle ignorable spaces in + handle ignorable spaces in xmlconfiguration Handle ignorable spaces in XmlConfiguration - + implemented request dispatching. Implemented request dispatching. - + improved context to handler contract. Improved Context to Handler contract. - + improved handler tostring Improved handler toString - + improved log rollover. Improved Log rollover. - + made logsink a lifecycle interface Made LogSink a Lifecycle interface - + parse but not handler startup ordering in web applications. Parse but not - handler startup ordering in web applications. - + pass object to logsink Pass object to LogSink - + redirect context only paths. Redirect context only paths. - + redo dynamic servlets handling Redo dynamic servlets handling - + remove 411 checks as ie breaks this rule after redirect. Remove 411 checks + + implemented request dispatching. implemented request dispatching. + implemented request dispatching. implemented request dispatching. + implemented request dispatching. Implemented request dispatching. + + improved context to handler contract. improved context to handler cont + improved context to handler contract. improved context to handler cont + improved context to handler contract. Improved Context to Handler contract. + + improved handler tostring improved handler tostring improved handler + improved handler tostring improved handler tostring improved handler + tostring Improved handler toString + + improved log rollover. improved log rollover. improved log rollover. + improved log rollover. improved log rollover. improved log rollover. + Improved Log rollover. + + made logsink a lifecycle interface made logsink a lifecycle interface made + logsink a lifecycle interface made logsink a lifecycle interface made + logsink a lifecycle interface Made LogSink a Lifecycle interface + + parse but not handler startup ordering in web applications. parse but parse + but not handler startup ordering in web applications. parse but parse but + not handler startup ordering in web applications. Parse but not handler + startup ordering in web applications. + + pass object to logsink pass object to logsink pass object to logsink p pass + object to logsink pass object to logsink pass object to logsink Pass object + to LogSink + + redirect context only paths. redirect context only paths. redirect con + redirect context only paths. redirect context only paths. redirect context + only paths. Redirect context only paths. + + redo dynamic servlets handling redo dynamic servlets handling redo dyn redo + dynamic servlets handling redo dynamic servlets handling redo dynamic + servlets handling Redo dynamic servlets handling + + remove 411 checks as ie breaks this rule after redirect. remove 411 ch + remove 411 checks as ie breaks this rule after redirect. remove 411 ch + remove 411 checks as ie breaks this rule after redirect. Remove 411 checks as IE breaks this rule after redirect. - + removed last remnants jdk 1.1 support Removed last remnants JDK 1.1 support - + send request log via a logsink Send request log via a LogSink - + simplified path translation and real path calculation. Simplified path + + removed last remnants jdk 1.1 support removed last remnants jdk 1.1 su + removed last remnants jdk 1.1 support removed last remnants jdk 1.1 su + removed last remnants jdk 1.1 support Removed last remnants JDK 1.1 support + + send request log via a logsink send request log via a logsink send req send + request log via a logsink send request log via a logsink send request log + via a logsink Send request log via a LogSink + + simplified path translation and real path calculation. simplified path + simplified path translation and real path calculation. simplified path + simplified path translation and real path calculation. Simplified path translation and real path calculation. - + warn about explicit sets of webapplication Warn about explicit sets of - WebApplication + + warn about explicit sets of webapplication warn about explicit sets of warn + about explicit sets of webapplication warn about explicit sets of warn about + explicit sets of webapplication Warn about explicit sets of WebApplication jetty-2.4.7 - 06 October 2000 - + added encode methods to uri Added encode methods to URI - + allow objects to be passed to logsink Allow Objects to be passed to LogSink - + fixes to ssl doco fixes to SSL doco - + improved win32 build Improved win32 build - + set content length on errors for keep alive. Set content length on errors - for keep alive. - + support key and keystore passwords Support key and keystore passwords + + added encode methods to uri added encode methods to uri added encode m added + encode methods to uri added encode methods to uri added encode methods to + uri Added encode methods to URI + + allow objects to be passed to logsink allow objects to be passed to lo allow + objects to be passed to logsink allow objects to be passed to lo allow + objects to be passed to logsink Allow Objects to be passed to LogSink + + fixes to ssl doco fixes to ssl doco fixes to ssl doco fixes to ssl doc fixes + to ssl doco fixes to ssl doco fixes to ssl doco fixes to SSL doco + + improved win32 build improved win32 build improved win32 build improve + improved win32 build improved win32 build improved win32 build Improved + win32 build + + set content length on errors for keep alive. set content length on err set + content length on errors for keep alive. set content length on err set + content length on errors for keep alive. Set content length on errors for + keep alive. + + support key and keystore passwords support key and keystore passwords + support key and keystore passwords support key and keystore passwords + support key and keystore passwords Support key and keystore passwords + various improvements to servletdispatch, propertytree and associated + various improvements to servletdispatch, propertytree and associated + various improvements to servletdispatch, propertytree and associated Various improvements to ServletDispatch, PropertyTree and associated classes. jetty-3.0.B02 - 24 August 2000 - + added cgi servlet Added CGI servlet - + fixed bug in testrfc2616 Fixed bug in TestRFC2616 - + fixed http/1.0 input close bug Fixed HTTP/1.0 input close bug - + fixed lineinput bug with ssl giving cr pause lf. Fixed LineInput bug with - SSL giving CR pause LF. - + improved threadedserver stop and destroy Improved ThreadedServer stop and + + added cgi servlet added cgi servlet added cgi servlet added cgi servle added + cgi servlet added cgi servlet added cgi servlet Added CGI servlet + + fixed bug in testrfc2616 fixed bug in testrfc2616 fixed bug in testrfc fixed + bug in testrfc2616 fixed bug in testrfc2616 fixed bug in testrfc2616 Fixed + bug in TestRFC2616 + + fixed http/1.0 input close bug fixed http/1.0 input close bug fixed ht fixed + http/1.0 input close bug fixed http/1.0 input close bug fixed http/1.0 input + close bug Fixed HTTP/1.0 input close bug + + fixed lineinput bug with ssl giving cr pause lf. fixed lineinput bug w fixed + lineinput bug with ssl giving cr pause lf. fixed lineinput bug w fixed + lineinput bug with ssl giving cr pause lf. Fixed LineInput bug with SSL + giving CR pause LF. + + improved threadedserver stop and destroy improved threadedserver stop + improved threadedserver stop and destroy improved threadedserver stop + improved threadedserver stop and destroy Improved ThreadedServer stop and destroy - + use resources in webapplication Use resources in WebApplication + + use resources in webapplication use resources in webapplication use use + resources in webapplication use resources in webapplication use resources in + webapplication Use resources in WebApplication jetty-3.0.B01 - 21 August 2000 - + implemented more webapp configuration Implemented more webapp configuration - + partial implementation of webapp securitycontraints Partial implementation + + implemented more webapp configuration implemented more webapp configur + implemented more webapp configuration implemented more webapp configur + implemented more webapp configuration Implemented more webapp configuration + + partial implementation of webapp securitycontraints partial implementa + partial implementation of webapp securitycontraints partial implementa + partial implementation of webapp securitycontraints Partial implementation of webapp securitycontraints - + ssl implemented with jsselistener SSL implemented with JsseListener + + ssl implemented with jsselistener ssl implemented with jsselistener ss ssl + implemented with jsselistener ssl implemented with jsselistener ssl + implemented with jsselistener SSL implemented with JsseListener + switched to the aelfred xml parser from microstar, which is only parti + switched to the aelfred xml parser from microstar, which is only parti + switched to the aelfred xml parser from microstar, which is only parti Switched to the aelfred XML parser from microstar, which is only partially validating, but small and lightweight jetty-2.4.6 - 16 August 2000 - + added passive mode methods to ftp Added passive mode methods to FTP + + added passive mode methods to ftp added passive mode methods to ftp ad added + passive mode methods to ftp added passive mode methods to ftp added passive + mode methods to ftp Added passive mode methods to FTP + com.mortbay.util.keypairtool added to handle openssl ssl keys. + com.mortbay.util.keypairtool added to handle openssl ssl keys. + com.mortbay.util.keypairtool added to handle openssl ssl keys. com.mortbay.Util.KeyPairTool added to handle openSSL SSL keys. - + jsselistener & sunjsselistener added and documented JsseListener & + + jsselistener & sunjsselistener added and documented jsselistener & + jsselistener & sunjsselistener added and documented jsselistener & + jsselistener & sunjsselistener added and documented JsseListener & SunJsseListener added and documented - + minor changes to compile with jikes. Minor changes to compile with jikes. - + turn linger off before closing sockets, to allow restart. Turn Linger off - before closing sockets, to allow restart. + + minor changes to compile with jikes. minor changes to compile with jik minor + changes to compile with jikes. minor changes to compile with jik minor + changes to compile with jikes. Minor changes to compile with jikes. + + turn linger off before closing sockets, to allow restart. turn linger turn + linger off before closing sockets, to allow restart. turn linger turn + linger off before closing sockets, to allow restart. Turn Linger off before + closing sockets, to allow restart. jetty-3.0.A99 - 10 August 2000 - + added resource abstraction Added Resource abstraction - + added xmlconfiguration utility Added Xmlconfiguration utility - + implemented jetty.xml configuration Implemented jetty.xml configuration - + make it compile cleanly with jikes. Make it compile cleanly with jikes. - + re-added commented out imports for jdk-1.1 compile Re-added commented out + + added resource abstraction added resource abstraction added resource added + resource abstraction added resource abstraction added resource abstraction + Added Resource abstraction + + added xmlconfiguration utility added xmlconfiguration utility added added + xmlconfiguration utility added xmlconfiguration utility added + xmlconfiguration utility Added Xmlconfiguration utility + + implemented jetty.xml configuration implemented jetty.xml configuratio + implemented jetty.xml configuration implemented jetty.xml configuratio + implemented jetty.xml configuration Implemented jetty.xml configuration + + make it compile cleanly with jikes. make it compile cleanly with jikes make + it compile cleanly with jikes. make it compile cleanly with jikes make it + compile cleanly with jikes. Make it compile cleanly with jikes. + + re-added commented out imports for jdk-1.1 compile re-added commented + re-added commented out imports for jdk-1.1 compile re-added commented + re-added commented out imports for jdk-1.1 compile Re-added commented out imports for JDK-1.1 compile - + removed filebase. now use resourcebase instead Removed FileBase. Now use + + removed filebase. now use resourcebase instead removed filebase. now u + removed filebase. now use resourcebase instead removed filebase. now u + removed filebase. now use resourcebase instead Removed FileBase. Now use ResourceBase instead - + replaced filehandler with resourcehandler Replaced FileHandler with - ResourceHandler - + servletloader simplied and uses resourcepath ServletLoader simplied and uses + + replaced filehandler with resourcehandler replaced filehandler with re + replaced filehandler with resourcehandler replaced filehandler with replaced + filehandler with resourcehandler Replaced FileHandler with ResourceHandler + + servletloader simplied and uses resourcepath servletloader simplied an + servletloader simplied and uses resourcepath servletloader simplied an + servletloader simplied and uses resourcepath ServletLoader simplied and uses ResourcePath - + use sax xml parsing instead of dom for space saving. Use SAX XML parsing - instead of DOM for space saving. + + use sax xml parsing instead of dom for space saving. use sax xml parsi use + sax xml parsing instead of dom for space saving. use sax xml parsi use sax + xml parsing instead of dom for space saving. Use SAX XML parsing instead of + DOM for space saving. jetty-3.0.A98 - 20 July 2000 - + allow httprequest.tostring() handles bad requests. Allow - HttpRequest.toString() handles bad requests. - + fixed constructor to rolloverfilelogsink Fixed constructor to - RolloverFileLogSink - + implemented jetty demos and site as web application. Implemented Jetty demos + + allow httprequest.tostring() handles bad requests. allow allow allow + httprequest.tostring() handles bad requests. allow allow + httprequest.tostring() handles bad requests. Allow HttpRequest.toString() + handles bad requests. + + fixed constructor to rolloverfilelogsink fixed constructor to fixed fixed + constructor to rolloverfilelogsink fixed constructor to fixed constructor to + rolloverfilelogsink Fixed constructor to RolloverFileLogSink + + implemented jetty demos and site as web application. implemented jetty + implemented jetty demos and site as web application. implemented jetty + implemented jetty demos and site as web application. Implemented Jetty demos and Site as Web Application. - + implemented webapplicationcontext Implemented WebApplicationContext - + improved synchronization on logsink Improved synchronization on LogSink + + implemented webapplicationcontext implemented webapplicationcontext + implemented webapplicationcontext implemented webapplicationcontext + implemented webapplicationcontext Implemented WebApplicationContext + + improved synchronization on logsink improved synchronization on logsin + improved synchronization on logsink improved synchronization on logsin + improved synchronization on logsink Improved synchronization on LogSink + servletrequest.getserverport() returns 80 rather than 0 + servletrequest.getserverport() returns 80 rather than 0 + servletrequest.getserverport() returns 80 rather than 0 ServletRequest.getServerPort() returns 80 rather than 0 - + switched to jdk1.2 only Switched to JDK1.2 only + + switched to jdk1.2 only switched to jdk1.2 only switched to jdk1.2 onl + switched to jdk1.2 only switched to jdk1.2 only switched to jdk1.2 only + Switched to JDK1.2 only jetty-3.0.A97 - 13 July 2000 - + added error handling to lifecyclethread Added error handling to - LifeCycleThread - + added wml mappings Added WML mappings - + better tuned socketlistener parameters Better tuned SocketListener - parameters - + fixed makefiles for bsd ls Fixed makefiles for BSD ls - + fixed persistent commits with no content (eg redirect+keep-alive). Fixed + + added error handling to lifecyclethread added error handling to added added + error handling to lifecyclethread added error handling to added error + handling to lifecyclethread Added error handling to LifeCycleThread + + added wml mappings added wml mappings added wml mappings added wml map added + wml mappings added wml mappings added wml mappings Added WML mappings + + better tuned socketlistener parameters better tuned socketlistener bet + better tuned socketlistener parameters better tuned socketlistener better + tuned socketlistener parameters Better tuned SocketListener parameters + + fixed makefiles for bsd ls fixed makefiles for bsd ls fixed makefiles fixed + makefiles for bsd ls fixed makefiles for bsd ls fixed makefiles for bsd ls + Fixed makefiles for BSD ls + + fixed persistent commits with no content (eg redirect+keep-alive). fix fixed + persistent commits with no content (eg redirect+keep-alive). fix fixed + persistent commits with no content (eg redirect+keep-alive). Fixed persistent commits with no content (eg redirect+keep-alive). - + formatted version in server info string. Formatted version in server info + + formatted version in server info string. formatted version in server i + formatted version in server info string. formatted version in server i + formatted version in server info string. Formatted version in server info string. - + implemented removeattribute on requests implemented removeAttribute on + + implemented removeattribute on requests implemented removeattribute on + implemented removeattribute on requests implemented removeattribute on + implemented removeattribute on requests implemented removeAttribute on requests - + implemented servlet getlocale(s). Implemented servlet getLocale(s). - + implemented servlet issecure(). Implemented servlet isSecure(). - + less verbose debug Less verbose debug + + implemented servlet getlocale(s). implemented servlet getlocale(s). + implemented servlet getlocale(s). implemented servlet getlocale(s). + implemented servlet getlocale(s). Implemented servlet getLocale(s). + + implemented servlet issecure(). implemented servlet issecure(). implem + implemented servlet issecure(). implemented servlet issecure(). implemented + servlet issecure(). Implemented servlet isSecure(). + + less verbose debug less verbose debug less verbose debug less verbose less + verbose debug less verbose debug less verbose debug Less verbose debug + protect setcontentlength from a late set in default servlet head handl + protect setcontentlength from a late set in default servlet head handl + protect setcontentlength from a late set in default servlet head handl Protect setContentLength from a late set in default servlet HEAD handling. - + started requestdispatcher implementation. Started RequestDispatcher - implementation. - + tempory request log implementation Tempory request log implementation + + started requestdispatcher implementation. started requestdispatcher st + started requestdispatcher implementation. started requestdispatcher started + requestdispatcher implementation. Started RequestDispatcher implementation. + + tempory request log implementation tempory request log implementation + tempory request log implementation tempory request log implementation + tempory request log implementation Tempory request log implementation jetty-2.4.5 - 09 July 2000 - + added htmlexpirefilter and removed response cache revention from htmlf Added + + added htmlexpirefilter and removed response cache revention from htmlf added + htmlexpirefilter and removed response cache revention from htmlf added + htmlexpirefilter and removed response cache revention from htmlf Added HtmlExpireFilter and removed response cache revention from HtmlFilter. - + don't mark a session invalid until after values unbound. Don't mark a - session invalid until after values unbound. - + fixed transaction handling in jdbc wrappers Fixed transaction handling in - JDBC wrappers - + formatted version in server info. Formatted version in server info. + + don't mark a session invalid until after values unbound. don't mark a don't + mark a session invalid until after values unbound. don't mark a don't mark a + session invalid until after values unbound. Don't mark a session invalid + until after values unbound. + + fixed transaction handling in jdbc wrappers fixed transaction handling fixed + transaction handling in jdbc wrappers fixed transaction handling fixed + transaction handling in jdbc wrappers Fixed transaction handling in JDBC + wrappers + + formatted version in server info. formatted version in server info. + formatted version in server info. formatted version in server info. + formatted version in server info. Formatted version in server info. jetty-3.0.A96 - 27 June 2000 - + fixed bug with http/1.1 head reqests to servlets. Fixed bug with HTTP/1.1 - Head reqests to servlets. - + supressed un-needed chunking eof indicators. Supressed un-needed chunking + + fixed bug with http/1.1 head reqests to servlets. fixed bug with http/ fixed + bug with http/1.1 head reqests to servlets. fixed bug with http/ fixed bug + with http/1.1 head reqests to servlets. Fixed bug with HTTP/1.1 Head reqests + to servlets. + + supressed un-needed chunking eof indicators. supressed un-needed chunk + supressed un-needed chunking eof indicators. supressed un-needed chunk + supressed un-needed chunking eof indicators. Supressed un-needed chunking EOF indicators. jetty-3.0.A95 - 24 June 2000 - + fixed getservletpath for default "/" Fixed getServletPath for default "/" - + handle spaces in file names in filehandler. Handle spaces in file names in + + fixed getservletpath for default "/" fixed getservletpath for default fixed + getservletpath for default "/" fixed getservletpath for default fixed + getservletpath for default "/" Fixed getServletPath for default "/" + + handle spaces in file names in filehandler. handle spaces in file name + handle spaces in file names in filehandler. handle spaces in file name + handle spaces in file names in filehandler. Handle spaces in file names in FileHandler. jetty-3.0.A94 - 19 June 2000 - + added handlercontext to allow grouping of handlers into units with the Added + + added handlercontext to allow grouping of handlers into units with the added + handlercontext to allow grouping of handlers into units with the added + handlercontext to allow grouping of handlers into units with the Added HandlerContext to allow grouping of handlers into units with the same file, resource and class configurations. - + cleaned up commit() and added complete() to httpresponse Cleaned up commit() + + cleaned up commit() and added complete() to httpresponse cleaned up co + cleaned up commit() and added complete() to httpresponse cleaned up co + cleaned up commit() and added complete() to httpresponse Cleaned up commit() and added complete() to HttpResponse - + implemented sessions. Implemented Sessions. - + pathmap exact matches can terminate with ; or # for url sessions and PathMap + + implemented sessions. implemented sessions. implemented sessions. + implemented sessions. implemented sessions. implemented sessions. + Implemented Sessions. + + pathmap exact matches can terminate with ; or # for url sessions and p + pathmap exact matches can terminate with ; or # for url sessions and p + pathmap exact matches can terminate with ; or # for url sessions and PathMap exact matches can terminate with ; or # for URL sessions and targets. - + updated license to clarify that commercial usage is ok! Updated license to + + updated license to clarify that commercial usage is ok! updated licens + updated license to clarify that commercial usage is ok! updated licens + updated license to clarify that commercial usage is ok! Updated license to clarify that commercial usage IS OK! jetty-3.0.A93 - 14 June 2000 - + lots of changes and probably unstable Lots of changes and probably unstable - + major rethink! moved to 2.2 servlet api Major rethink! Moved to 2.2 servlet - API + + lots of changes and probably unstable lots of changes and probably uns lots + of changes and probably unstable lots of changes and probably uns lots of + changes and probably unstable Lots of changes and probably unstable + + major rethink! moved to 2.2 servlet api major rethink! moved to 2.2 se major + rethink! moved to 2.2 servlet api major rethink! moved to 2.2 se major + rethink! moved to 2.2 servlet api Major rethink! Moved to 2.2 servlet API jetty-3.0.A92 - 07 June 2000 - + added html classes to jar Added HTML classes to jar - + fixed redirection bug in filehandler Fixed redirection bug in FileHandler + + added html classes to jar added html classes to jar added html classes added + html classes to jar added html classes to jar added html classes to jar + Added HTML classes to jar + + fixed redirection bug in filehandler fixed redirection bug in filehand fixed + redirection bug in filehandler fixed redirection bug in filehand fixed + redirection bug in filehandler Fixed redirection bug in FileHandler jetty-2.4.4 - 03 June 2000 - + added build-win32.mak Added build-win32.mak - + added html.composite.replace Added HTML.Composite.replace - + added rolloverfilelogsink Added RolloverFileLogSink - + added uk.org.gosnell.servlets.cgiservlet to contrib Added + + added build-win32.mak added build-win32.mak added build-win32.mak adde added + build-win32.mak added build-win32.mak added build-win32.mak Added + build-win32.mak + + added html.composite.replace added html.composite.replace added added + html.composite.replace added html.composite.replace added + html.composite.replace Added HTML.Composite.replace + + added rolloverfilelogsink added rolloverfilelogsink added added + rolloverfilelogsink added rolloverfilelogsink added rolloverfilelogsink + Added RolloverFileLogSink + + added uk.org.gosnell.servlets.cgiservlet to contrib added added added + uk.org.gosnell.servlets.cgiservlet to contrib added added + uk.org.gosnell.servlets.cgiservlet to contrib Added uk.org.gosnell.Servlets.CgiServlet to contrib + basicauthhandler uses getresourcepath so it can be used behind request + basicauthhandler uses getresourcepath so it can be used behind request + basicauthhandler uses getresourcepath so it can be used behind request BasicAuthHandler uses getResourcePath so it can be used behind request dispatching - + filehandler implements ifmodifiedsince on index files. FileHandler + + filehandler implements ifmodifiedsince on index files. filehandler + filehandler implements ifmodifiedsince on index files. filehandler + filehandler implements ifmodifiedsince on index files. FileHandler implements IfModifiedSince on index files. + httprequest.setrequestpath does not null pathinfo. + httprequest.setrequestpath does not null pathinfo. + httprequest.setrequestpath does not null pathinfo. HttpRequest.setRequestPath does not null pathInfo. - + improved logsink configuration Improved LogSink configuration - + many debug call optimizations Many debug call optimizations - + support system.property expansions in propertytrees. Support System.property + + improved logsink configuration improved logsink configuration improved + improved logsink configuration improved logsink configuration improved + logsink configuration Improved LogSink configuration + + many debug call optimizations many debug call optimizations many debug many + debug call optimizations many debug call optimizations many debug call + optimizations Many debug call optimizations + + support system.property expansions in propertytrees. support system.pr + support system.property expansions in propertytrees. support system.pr + support system.property expansions in propertytrees. Support System.property expansions in PropertyTrees. jetty-3.0.A91 - 03 June 2000 - + abstracted servlethandler Abstracted ServletHandler - + added html classes from jetty2 Added HTML classes from Jetty2 - + implemented realpath and getresource methods for servlets. Implemented + + abstracted servlethandler abstracted servlethandler abstracted abstracted + servlethandler abstracted servlethandler abstracted servlethandler + Abstracted ServletHandler + + added html classes from jetty2 added html classes from jetty2 added ht added + html classes from jetty2 added html classes from jetty2 added html classes + from jetty2 Added HTML classes from Jetty2 + + implemented realpath and getresource methods for servlets. implemented + implemented realpath and getresource methods for servlets. implemented + implemented realpath and getresource methods for servlets. Implemented realPath and getResource methods for servlets. - + improved logsink mechanism Improved LogSink mechanism - + simplified class loading Simplified class loading - + simplified httpserver configuration methods and arguments Simplified + + improved logsink mechanism improved logsink mechanism improved logsink + improved logsink mechanism improved logsink mechanism improved logsink + mechanism Improved LogSink mechanism + + simplified class loading simplified class loading simplified class loa + simplified class loading simplified class loading simplified class loading + Simplified class loading + + simplified httpserver configuration methods and arguments simplified + simplified httpserver configuration methods and arguments simplified + simplified httpserver configuration methods and arguments Simplified HttpServer configuration methods and arguments jetty-3.0.A9 - 07 May 2000 - + file handler checks modified headers on directory indexes. File handler - checks modified headers on directory indexes. - + fixed double chunking bug in socketlistener. Fixed double chunking bug in + + file handler checks modified headers on directory indexes. file handle file + handler checks modified headers on directory indexes. file handle file + handler checks modified headers on directory indexes. File handler checks + modified headers on directory indexes. + + fixed double chunking bug in socketlistener. fixed double chunking bug fixed + double chunking bug in socketlistener. fixed double chunking bug fixed + double chunking bug in socketlistener. Fixed double chunking bug in SocketListener. - + improvided finally handling of output end game. Improvided finally handling + + improvided finally handling of output end game. improvided finally han + improvided finally handling of output end game. improvided finally han + improvided finally handling of output end game. Improvided finally handling of output end game. + servletloader tries unix then platform separator for zip separator. + servletloader tries unix then platform separator for zip separator. + servletloader tries unix then platform separator for zip separator. ServletLoader tries unix then platform separator for zip separator. jetty-3.0.A8 - 04 May 2000 - + addcookie takes an int maxage rather than a expires date. addCookie takes an + + addcookie takes an int maxage rather than a expires date. addcookie ta + addcookie takes an int maxage rather than a expires date. addcookie ta + addcookie takes an int maxage rather than a expires date. addCookie takes an int maxAge rather than a expires date. - + added logsink extensible log architecture. Added LogSink extensible log + + added logsink extensible log architecture. added logsink extensible lo added + logsink extensible log architecture. added logsink extensible lo added + logsink extensible log architecture. Added LogSink extensible log architecture. - + added tenlet class for reverse telnet. Added Tenlet class for reverse - telnet. - + code.ignore only outputs when debug is verbose. Code.ignore only outputs + + added tenlet class for reverse telnet. added tenlet class for reverse added + tenlet class for reverse telnet. added tenlet class for reverse added tenlet + class for reverse telnet. Added Tenlet class for reverse telnet. + + code.ignore only outputs when debug is verbose. code.ignore only outpu + code.ignore only outputs when debug is verbose. code.ignore only outpu + code.ignore only outputs when debug is verbose. Code.ignore only outputs when debug is verbose. - + moved sevlet2_1 handler to com.mortbay.servlet2_1 Moved Sevlet2_1 handler to + + moved sevlet2_1 handler to com.mortbay.servlet2_1 moved sevlet2_1 hand moved + sevlet2_1 handler to com.mortbay.servlet2_1 moved sevlet2_1 hand moved + sevlet2_1 handler to com.mortbay.servlet2_1 Moved Sevlet2_1 handler to com.mortbay.Servlet2_1 - + servlet2_1 class loading re-acrchitected. see readme. Servlet2_1 class + + servlet2_1 class loading re-acrchitected. see readme. servlet2_1 class + servlet2_1 class loading re-acrchitected. see readme. servlet2_1 class + servlet2_1 class loading re-acrchitected. see readme. Servlet2_1 class loading re-acrchitected. See README. jetty-2.4.3 - 04 May 2000 - + allow crlf in urlencoded Allow CRLF in UrlEncoded - + pass cookies with 0 max age to browser. Pass Cookies with 0 max age to - browser. + + allow crlf in urlencoded allow crlf in urlencoded allow crlf in urlenc allow + crlf in urlencoded allow crlf in urlencoded allow crlf in urlencoded Allow + CRLF in UrlEncoded + + pass cookies with 0 max age to browser. pass cookies with 0 max age to pass + cookies with 0 max age to browser. pass cookies with 0 max age to pass + cookies with 0 max age to browser. Pass Cookies with 0 max age to browser. jetty-2.4.2 - 23 April 2000 - + added gnujsp to jettyserver.prp file. Added GNUJSP to JettyServer.prp file. - + added logsink and filelogsink classes to allow extensible log handling Added + + added gnujsp to jettyserver.prp file. added gnujsp to jettyserver.prp added + gnujsp to jettyserver.prp file. added gnujsp to jettyserver.prp added + gnujsp to jettyserver.prp file. Added GNUJSP to JettyServer.prp file. + + added logsink and filelogsink classes to allow extensible log handling added + logsink and filelogsink classes to allow extensible log handling added + logsink and filelogsink classes to allow extensible log handling Added LogSink and FileLogSink classes to allow extensible Log handling. - + handle nested requestdispatcher includes. Handle nested RequestDispatcher + + handle nested requestdispatcher includes. handle nested requestdispatc + handle nested requestdispatcher includes. handle nested requestdispatc + handle nested requestdispatcher includes. Handle nested RequestDispatcher includes. - + modified gnujsp to prevent close in nested requests. Modified GNUJSP to + + modified gnujsp to prevent close in nested requests. modified gnujsp t + modified gnujsp to prevent close in nested requests. modified gnujsp t + modified gnujsp to prevent close in nested requests. Modified GNUJSP to prevent close in nested requests. jetty-3.0.A7 - 15 April 2000 - + added inetgateway to help debug ie5 problems Added InetGateway to help debug - IE5 problems - + added removevalue method to multimap added removeValue method to MultiMap - + fixed flush problem with chunked output for ie5 fixed flush problem with - chunked output for IE5 - + include java 1.2 source hierarchy Include java 1.2 source hierarchy - + removed excess ';' from source removed excess ';' from source + + added inetgateway to help debug ie5 problems added inetgateway to help added + inetgateway to help debug ie5 problems added inetgateway to help added + inetgateway to help debug ie5 problems Added InetGateway to help debug IE5 + problems + + added removevalue method to multimap added removevalue method to multi added + removevalue method to multimap added removevalue method to multi added + removevalue method to multimap added removeValue method to MultiMap + + fixed flush problem with chunked output for ie5 fixed flush problem wi fixed + flush problem with chunked output for ie5 fixed flush problem wi fixed flush + problem with chunked output for ie5 fixed flush problem with chunked output + for IE5 + + include java 1.2 source hierarchy include java 1.2 source hierarchy in + include java 1.2 source hierarchy include java 1.2 source hierarchy include + java 1.2 source hierarchy Include java 1.2 source hierarchy + + removed excess ';' from source removed excess ';' from source removed + removed excess ';' from source removed excess ';' from source removed excess + ';' from source removed excess ';' from source jetty-2.4.1 - 09 April 2000 - + fixed bug in htmlfilter for tags split between writes. Fixed bug in - HtmlFilter for tags split between writes. - + removed debug println from servletholder. Removed debug println from - ServletHolder. - + set encoding before exception in filehandler. Set encoding before exception - in FileHandler. + + fixed bug in htmlfilter for tags split between writes. fixed bug in fi fixed + bug in htmlfilter for tags split between writes. fixed bug in fixed bug in + htmlfilter for tags split between writes. Fixed bug in HtmlFilter for tags + split between writes. + + removed debug println from servletholder. removed debug println from r + removed debug println from servletholder. removed debug println from removed + debug println from servletholder. Removed debug println from ServletHolder. + + set encoding before exception in filehandler. set encoding before exce set + encoding before exception in filehandler. set encoding before exce set + encoding before exception in filehandler. Set encoding before exception in + FileHandler. jetty-3.0.A6 - 09 April 2000 - + added bin/usejava2collections to convert to jdk1.2 added - bin/useJava2Collections to convert to JDK1.2 - + dates forced to use us locale Dates forced to use US locale - + improved portability of frame and debug. Improved portability of Frame and + + added bin/usejava2collections to convert to jdk1.2 added added added + bin/usejava2collections to convert to jdk1.2 added added + bin/usejava2collections to convert to jdk1.2 added bin/useJava2Collections + to convert to JDK1.2 + + dates forced to use us locale dates forced to use us locale dates forc dates + forced to use us locale dates forced to use us locale dates forced to use us + locale Dates forced to use US locale + + improved portability of frame and debug. improved portability of frame + improved portability of frame and debug. improved portability of frame + improved portability of frame and debug. Improved portability of Frame and Debug. - + integrated skeleton 2.1 servlet container Integrated skeleton 2.1 Servlet + + integrated skeleton 2.1 servlet container integrated skeleton 2.1 serv + integrated skeleton 2.1 servlet container integrated skeleton 2.1 serv + integrated skeleton 2.1 servlet container Integrated skeleton 2.1 Servlet container - + removed converter utilities and inetgateway. Removed Converter utilities and + + removed converter utilities and inetgateway. removed converter utiliti + removed converter utilities and inetgateway. removed converter utiliti + removed converter utilities and inetgateway. Removed Converter utilities and InetGateway. jetty-2.4.0 - 24 March 2000 - + absolute uris are returned by getrequesturi (if sent by browser). Absolute + + absolute uris are returned by getrequesturi (if sent by browser). abso + absolute uris are returned by getrequesturi (if sent by browser). abso + absolute uris are returned by getrequesturi (if sent by browser). Absolute URIs are returned by getRequestURI (if sent by browser). - + added doc directory with a small start Added doc directory with a small - start - + added per servlet resourcebase configuration. Added per servlet resourceBase + + added doc directory with a small start added doc directory with a smal added + doc directory with a small start added doc directory with a smal added doc + directory with a small start Added doc directory with a small start + + added per servlet resourcebase configuration. added per servlet resour added + per servlet resourcebase configuration. added per servlet resour added per + servlet resourcebase configuration. Added per servlet resourceBase configuration. - + added virtualhosthandler for virtual host handling Added VirtualHostHandler - for virtual host handling - + fixed bug with requestdispatcher.include() Fixed bug with - RequestDispatcher.include() - + fixed caste problem in urlencoded Fixed caste problem in UrlEncoded - + fixed null pointer in threadedserver with stopall Fixed null pointer in - ThreadedServer with stopAll - + form parameters only decoded for posts Form parameters only decoded for - POSTs - + implemented full handling of cookie max age. Implemented full handling of + + added virtualhosthandler for virtual host handling added virtualhostha added + virtualhosthandler for virtual host handling added virtualhostha added + virtualhosthandler for virtual host handling Added VirtualHostHandler for + virtual host handling + + fixed bug with requestdispatcher.include() fixed bug with fixed bug wi fixed + bug with requestdispatcher.include() fixed bug with fixed bug with + requestdispatcher.include() Fixed bug with RequestDispatcher.include() + + fixed caste problem in urlencoded fixed caste problem in urlencoded fi fixed + caste problem in urlencoded fixed caste problem in urlencoded fixed caste + problem in urlencoded Fixed caste problem in UrlEncoded + + fixed null pointer in threadedserver with stopall fixed null pointer i fixed + null pointer in threadedserver with stopall fixed null pointer i fixed null + pointer in threadedserver with stopall Fixed null pointer in ThreadedServer + with stopAll + + form parameters only decoded for posts form parameters only decoded fo form + parameters only decoded for posts form parameters only decoded fo form + parameters only decoded for posts Form parameters only decoded for POSTs + + implemented full handling of cookie max age. implemented full handling + implemented full handling of cookie max age. implemented full handling + implemented full handling of cookie max age. Implemented full handling of cookie max age. - + improved parsing of stack trace in debug mode. Improved parsing of stack + + improved parsing of stack trace in debug mode. improved parsing of sta + improved parsing of stack trace in debug mode. improved parsing of sta + improved parsing of stack trace in debug mode. Improved parsing of stack trace in debug mode. - + moved setuid native code to contrib hierarchy Moved SetUID native code to - contrib hierarchy - + requestdispatcher handles uri parameters RequestDispatcher handles URI + + moved setuid native code to contrib hierarchy moved setuid native code moved + setuid native code to contrib hierarchy moved setuid native code moved + setuid native code to contrib hierarchy Moved SetUID native code to contrib + hierarchy + + requestdispatcher handles uri parameters requestdispatcher handles uri + requestdispatcher handles uri parameters requestdispatcher handles uri + requestdispatcher handles uri parameters RequestDispatcher handles URI parameters - + upgraded to gnujsp 1.0.0 Upgraded to gnujsp 1.0.0 + + upgraded to gnujsp 1.0.0 upgraded to gnujsp 1.0.0 upgraded to gnujsp 1 + upgraded to gnujsp 1.0.0 upgraded to gnujsp 1.0.0 upgraded to gnujsp 1.0.0 + Upgraded to gnujsp 1.0.0 jetty-2.3.5 - 25 January 2000 - + added configuration option to turn off keep-alive in http/1.0 Added - configuration option to turn off Keep-Alive in HTTP/1.0 - + added contrib/com/kiwiconsulting/jetty jsse ssl adaptor to release. Added + + added configuration option to turn off keep-alive in http/1.0 added ad added + configuration option to turn off keep-alive in http/1.0 added added + configuration option to turn off keep-alive in http/1.0 Added configuration + option to turn off Keep-Alive in HTTP/1.0 + + added contrib/com/kiwiconsulting/jetty jsse ssl adaptor to release. ad added + contrib/com/kiwiconsulting/jetty jsse ssl adaptor to release. ad added + contrib/com/kiwiconsulting/jetty jsse ssl adaptor to release. Added contrib/com/kiwiconsulting/jetty JSSE SSL adaptor to release. - + allow configured servlets to be auto reloaded. Allow configured servlets to - be auto reloaded. - + allow properties to be configured for dynamic servlets. Allow properties to - be configured for dynamic servlets. - + fixed expires bug in cookies Fixed expires bug in Cookies - + fixed nasty bug with http/1.1 redirects. Fixed nasty bug with HTTP/1.1 - redirects. - + force locale of date formats to us. Force locale of date formats to US. - + proxyhandler sends content for posts etc. ProxyHandler sends content for + + allow configured servlets to be auto reloaded. allow configured servle allow + configured servlets to be auto reloaded. allow configured servle allow + configured servlets to be auto reloaded. Allow configured servlets to be + auto reloaded. + + allow properties to be configured for dynamic servlets. allow properti allow + properties to be configured for dynamic servlets. allow properti allow + properties to be configured for dynamic servlets. Allow properties to be + configured for dynamic servlets. + + fixed expires bug in cookies fixed expires bug in cookies fixed expire fixed + expires bug in cookies fixed expires bug in cookies fixed expires bug in + cookies Fixed expires bug in Cookies + + fixed nasty bug with http/1.1 redirects. fixed nasty bug with http/1.1 fixed + nasty bug with http/1.1 redirects. fixed nasty bug with http/1.1 fixed nasty + bug with http/1.1 redirects. Fixed nasty bug with HTTP/1.1 redirects. + + force locale of date formats to us. force locale of date formats to us force + locale of date formats to us. force locale of date formats to us force + locale of date formats to us. Force locale of date formats to US. + + proxyhandler sends content for posts etc. proxyhandler sends content f + proxyhandler sends content for posts etc. proxyhandler sends content f + proxyhandler sends content for posts etc. ProxyHandler sends content for POSTs etc. jetty-2.3.4 - 18 January 2000 - + cookie map keyed on domain as well as name and path. Cookie map keyed on - domain as well as name and path. - + dictionaryconverter handles null values. DictionaryConverter handles null + + cookie map keyed on domain as well as name and path. cookie map keyed cookie + map keyed on domain as well as name and path. cookie map keyed cookie map + keyed on domain as well as name and path. Cookie map keyed on domain as well + as name and path. + + dictionaryconverter handles null values. dictionaryconverter handles n + dictionaryconverter handles null values. dictionaryconverter handles n + dictionaryconverter handles null values. DictionaryConverter handles null values. - + fixed illegalstateexception handling in defaultexceptionhandler Fixed + + fixed illegalstateexception handling in defaultexceptionhandler fixed fixed + illegalstateexception handling in defaultexceptionhandler fixed fixed + illegalstateexception handling in defaultexceptionhandler Fixed IllegalStateException handling in DefaultExceptionHandler - + fixed interaction with resourcepaths and proxy demo. Fixed interaction with + + fixed interaction with resourcepaths and proxy demo. fixed interaction fixed + interaction with resourcepaths and proxy demo. fixed interaction fixed + interaction with resourcepaths and proxy demo. Fixed interaction with resourcePaths and proxy demo. - + improved htmlfilter.activate header modifications. Improved - HtmlFilter.activate header modifications. - + include from linux rather than genunix for native builds include from linux + + improved htmlfilter.activate header modifications. improved improved + improved htmlfilter.activate header modifications. improved improved + htmlfilter.activate header modifications. Improved HtmlFilter.activate + header modifications. + + include from linux rather than genunix for native builds include from + include from linux rather than genunix for native builds include from + include from linux rather than genunix for native builds include from linux rather than genunix for native builds - + methodtag.invoke() is now public. MethodTag.invoke() is now public. - + servlet properties allow objects to be stored. Servlet properties allow + + methodtag.invoke() is now public. methodtag.invoke() is now public. + methodtag.invoke() is now public. methodtag.invoke() is now public. + methodtag.invoke() is now public. MethodTag.invoke() is now public. + + servlet properties allow objects to be stored. servlet properties allo + servlet properties allow objects to be stored. servlet properties allo + servlet properties allow objects to be stored. Servlet properties allow objects to be stored. - + uri decodes applies url decoding to the path. URI decodes applies URL - decoding to the path. + + uri decodes applies url decoding to the path. uri decodes applies url uri + decodes applies url decoding to the path. uri decodes applies url uri + decodes applies url decoding to the path. URI decodes applies URL decoding + to the path. jetty-3.0.A5 - 19 October 1999 - + do our own url string encoding with 8859-1 Do our own URL string encoding - with 8859-1 - + replaced lf wait in lineinput with state boolean. Replaced LF wait in + + do our own url string encoding with 8859-1 do our own url string encod do + our own url string encoding with 8859-1 do our own url string encod do our + own url string encoding with 8859-1 Do our own URL string encoding with + 8859-1 + + replaced lf wait in lineinput with state boolean. replaced lf wait in + replaced lf wait in lineinput with state boolean. replaced lf wait in + replaced lf wait in lineinput with state boolean. Replaced LF wait in LineInput with state boolean. - + use char array in urlencoded.decode Use char array in UrlEncoded.decode - + use iso8859_1 instead of utf8 for headers etc. Use ISO8859_1 instead of UTF8 - for headers etc. + + use char array in urlencoded.decode use char array in urlencoded.decod use + char array in urlencoded.decode use char array in urlencoded.decod use char + array in urlencoded.decode Use char array in UrlEncoded.decode + + use iso8859_1 instead of utf8 for headers etc. use iso8859_1 instead o use + iso8859_1 instead of utf8 for headers etc. use iso8859_1 instead o use + iso8859_1 instead of utf8 for headers etc. Use ISO8859_1 instead of UTF8 for + headers etc. jetty-2.3.3 - 19 October 1999 - + do our own url encoding with iso-8859-1 Do our own URL encoding with - ISO-8859-1 - + http.html.embedurl uses contents encoding. HTTP.HTML.EmbedUrl uses contents + + do our own url encoding with iso-8859-1 do our own url encoding with d do + our own url encoding with iso-8859-1 do our own url encoding with do our own + url encoding with iso-8859-1 Do our own URL encoding with ISO-8859-1 + + http.html.embedurl uses contents encoding. http.html.embedurl uses con + http.html.embedurl uses contents encoding. http.html.embedurl uses con + http.html.embedurl uses contents encoding. HTTP.HTML.EmbedUrl uses contents encoding. - + replaced utf8 encoding with iso-8859-1 for headers. Replaced UTF8 encoding + + replaced utf8 encoding with iso-8859-1 for headers. replaced utf8 enco + replaced utf8 encoding with iso-8859-1 for headers. replaced utf8 enco + replaced utf8 encoding with iso-8859-1 for headers. Replaced UTF8 encoding with ISO-8859-1 for headers. - + use urlencoded for form parameters. Use UrlEncoded for form parameters. + + use urlencoded for form parameters. use urlencoded for form parameters use + urlencoded for form parameters. use urlencoded for form parameters use + urlencoded for form parameters. Use UrlEncoded for form parameters. jetty-2.3.2 - 17 October 1999 - + fixed getreader bug with httprequest. Fixed getReader bug with HttpRequest. - + updated urlencoded with jetty3 version. Updated UrlEncoded with Jetty3 + + fixed getreader bug with httprequest. fixed getreader bug with httpreq fixed + getreader bug with httprequest. fixed getreader bug with httpreq fixed + getreader bug with httprequest. Fixed getReader bug with HttpRequest. + + updated urlencoded with jetty3 version. updated urlencoded with jetty3 + updated urlencoded with jetty3 version. updated urlencoded with jetty3 + updated urlencoded with jetty3 version. Updated UrlEncoded with Jetty3 version. jetty-3.0.A4 - 16 October 1999 - + added lf wait after cr to lineinput. Added LF wait after CR to LineInput. - + basic authentication handler. Basic Authentication Handler. - + request attributes Request attributes - + utf8 in urldecoded.decodestring. UTF8 in UrlDecoded.decodeString. + + added lf wait after cr to lineinput. added lf wait after cr to lineinp added + lf wait after cr to lineinput. added lf wait after cr to lineinp added lf + wait after cr to lineinput. Added LF wait after CR to LineInput. + + basic authentication handler. basic authentication handler. basic basic + authentication handler. basic authentication handler. basic authentication + handler. Basic Authentication Handler. + + request attributes request attributes request attributes request attri + request attributes request attributes request attributes Request attributes + + utf8 in urldecoded.decodestring. utf8 in urldecoded.decodestring. utf8 utf8 + in urldecoded.decodestring. utf8 in urldecoded.decodestring. utf8 in + urldecoded.decodestring. UTF8 in UrlDecoded.decodeString. jetty-2.3.1 - 14 October 1999 - + added assert with no message to code Added assert with no message to Code - + added oracle db adapter Added Oracle DB adapter - + changed demo servlets to use writers in preference to outputstreams Changed + + added assert with no message to code added assert with no message to c added + assert with no message to code added assert with no message to c added + assert with no message to code Added assert with no message to Code + + added oracle db adapter added oracle db adapter added oracle db adapte added + oracle db adapter added oracle db adapter added oracle db adapter Added + Oracle DB adapter + + changed demo servlets to use writers in preference to outputstreams ch + changed demo servlets to use writers in preference to outputstreams ch + changed demo servlets to use writers in preference to outputstreams Changed demo servlets to use writers in preference to outputstreams - + fixed gnujsp 1.0 resource bug. Fixed GNUJSP 1.0 resource bug. - + force utf8 for ftp commands Force UTF8 for FTP commands - + force utf8 for html Force UTF8 for HTML - + http/1.0 keep-alive (about time!). HTTP/1.0 Keep-Alive (about time!). - + nullhandler/server default name.name.properties to load NullHandler/Server + + fixed gnujsp 1.0 resource bug. fixed gnujsp 1.0 resource bug. fixed gn fixed + gnujsp 1.0 resource bug. fixed gnujsp 1.0 resource bug. fixed gnujsp 1.0 + resource bug. Fixed GNUJSP 1.0 resource bug. + + force utf8 for ftp commands force utf8 for ftp commands force utf8 for force + utf8 for ftp commands force utf8 for ftp commands force utf8 for ftp + commands Force UTF8 for FTP commands + + force utf8 for html force utf8 for html force utf8 for html force utf8 force + utf8 for html force utf8 for html force utf8 for html Force UTF8 for HTML + + http/1.0 keep-alive (about time!). http/1.0 keep-alive (about time!). + http/1.0 keep-alive (about time!). http/1.0 keep-alive (about time!). + http/1.0 keep-alive (about time!). HTTP/1.0 Keep-Alive (about time!). + + nullhandler/server default name.name.properties to load nullhandler/se + nullhandler/server default name.name.properties to load nullhandler/se + nullhandler/server default name.name.properties to load NullHandler/Server default name.name.PROPERTIES to load prefix/name.name.properties - + prevented thread churn on idle server. Prevented thread churn on idle + + prevented thread churn on idle server. prevented thread churn on idle + prevented thread churn on idle server. prevented thread churn on idle + prevented thread churn on idle server. Prevented thread churn on idle server. + threadedserver calls setsotimeout(_maxthreadidlems) on accepted socket + threadedserver calls setsotimeout(_maxthreadidlems) on accepted socket + threadedserver calls setsotimeout(_maxthreadidlems) on accepted socket ThreadedServer calls setSoTimeout(_maxThreadIdleMs) on accepted sockets. Idle reads will timeout. - + use utf8 in http headers Use UTF8 in HTTP headers + + use utf8 in http headers use utf8 in http headers use utf8 in http hea use + utf8 in http headers use utf8 in http headers use utf8 in http headers Use + UTF8 in HTTP headers jetty-3.0.A3 - 14 October 1999 - + added lifecycle interface to utils implemented by threadpool, Added - LifeCycle interface to Utils implemented by ThreadPool, ThreadedServer, - HttpListener & HttpHandler - + added service method to httpconnection for specialization. Added service - method to HttpConnection for specialization. - + maxreadtimems added to threadedserver. MaxReadTimeMs added to - ThreadedServer. - + startall, stopall and destroyall methods added to httpserver. StartAll, + + added lifecycle interface to utils implemented by threadpool, added ad added + lifecycle interface to utils implemented by threadpool, added added + lifecycle interface to utils implemented by threadpool, Added LifeCycle + interface to Utils implemented by ThreadPool, ThreadedServer, HttpListener & + HttpHandler + + added service method to httpconnection for specialization. added servi added + service method to httpconnection for specialization. added servi added + service method to httpconnection for specialization. Added service method to + HttpConnection for specialization. + + maxreadtimems added to threadedserver. maxreadtimems added to maxreadt + maxreadtimems added to threadedserver. maxreadtimems added to maxreadtimems + added to threadedserver. MaxReadTimeMs added to ThreadedServer. + + startall, stopall and destroyall methods added to httpserver. startall + startall, stopall and destroyall methods added to httpserver. startall + startall, stopall and destroyall methods added to httpserver. StartAll, stopAll and destroyAll methods added to HttpServer. jetty-3.0.A2 - 13 October 1999 - + added cookie support and demo. Added cookie support and demo. - + cleaned up util testharness. Cleaned up Util TestHarness. - + fixed lineinput problem with repeated crs Fixed LineInput problem with - repeated CRs - + head handling. HEAD handling. - + http/1.0 keep-alive (about time!) HTTP/1.0 Keep-alive (about time!) - + notfound handler NotFound Handler - + option * handling. OPTION * Handling. - + prevent entity content for responses 100-199,203,304 Prevent entity content + + added cookie support and demo. added cookie support and demo. added co added + cookie support and demo. added cookie support and demo. added cookie support + and demo. Added cookie support and demo. + + cleaned up util testharness. cleaned up util testharness. cleaned up u + cleaned up util testharness. cleaned up util testharness. cleaned up util + testharness. Cleaned up Util TestHarness. + + fixed lineinput problem with repeated crs fixed lineinput problem with fixed + lineinput problem with repeated crs fixed lineinput problem with fixed + lineinput problem with repeated crs Fixed LineInput problem with repeated + CRs + + head handling. head handling. head handling. head handling. head handling. + head handling. head handling. HEAD handling. + + http/1.0 keep-alive (about time!) http/1.0 keep-alive (about time!) ht + http/1.0 keep-alive (about time!) http/1.0 keep-alive (about time!) http/1.0 + keep-alive (about time!) HTTP/1.0 Keep-alive (about time!) + + notfound handler notfound handler notfound handler notfound handler notfound + handler notfound handler notfound handler NotFound Handler + + option * handling. option * handling. option * handling. option * hand + option * handling. option * handling. option * handling. OPTION * Handling. + + prevent entity content for responses 100-199,203,304 prevent entity co + prevent entity content for responses 100-199,203,304 prevent entity co + prevent entity content for responses 100-199,203,304 Prevent entity content for responses 100-199,203,304 - + reduced flushing on writing response. Reduced flushing on writing response. - + trace handling. TRACE handling. - + utf8 handling on raw output stream. UTF8 handling on raw output stream. - + virtual hosts. Virtual Hosts. + + reduced flushing on writing response. reduced flushing on writing resp + reduced flushing on writing response. reduced flushing on writing resp + reduced flushing on writing response. Reduced flushing on writing response. + + trace handling. trace handling. trace handling. trace handling. trace + handling. trace handling. trace handling. TRACE handling. + + utf8 handling on raw output stream. utf8 handling on raw output stream utf8 + handling on raw output stream. utf8 handling on raw output stream utf8 + handling on raw output stream. UTF8 handling on raw output stream. + + virtual hosts. virtual hosts. virtual hosts. virtual hosts. virtual hosts. + virtual hosts. virtual hosts. Virtual Hosts. jetty-3.0.A1 - 12 October 1999 - + added httphandler interface with start/stop/destroy lifecycle Added - HttpHandler interface with start/stop/destroy lifecycle - + added multimap for common handling of multiple valued parameters. Added - MultiMap for common handling of multiple valued parameters. - + added parameters to httprequest Added parameters to HttpRequest - + added pathmap implementing mapping as defined in the 2.2 api specifica Added + + added httphandler interface with start/stop/destroy lifecycle added ad added + httphandler interface with start/stop/destroy lifecycle added added + httphandler interface with start/stop/destroy lifecycle Added HttpHandler + interface with start/stop/destroy lifecycle + + added multimap for common handling of multiple valued parameters. adde added + multimap for common handling of multiple valued parameters. adde added + multimap for common handling of multiple valued parameters. Added MultiMap + for common handling of multiple valued parameters. + + added parameters to httprequest added parameters to httprequest added added + parameters to httprequest added parameters to httprequest added parameters + to httprequest Added parameters to HttpRequest + + added pathmap implementing mapping as defined in the 2.2 api specifica added + pathmap implementing mapping as defined in the 2.2 api specifica added + pathmap implementing mapping as defined in the 2.2 api specifica Added PathMap implementing mapping as defined in the 2.2 API specification (ie. /exact, /prefix/*, *.extention & default ). - + implemented simple extension architecture in httpserver. Implemented simple + + implemented simple extension architecture in httpserver. implemented s + implemented simple extension architecture in httpserver. implemented s + implemented simple extension architecture in httpserver. Implemented simple extension architecture in HttpServer. - + lineinput uses own buffering and uses character encodings. LineInput uses + + lineinput uses own buffering and uses character encodings. lineinput u + lineinput uses own buffering and uses character encodings. lineinput u + lineinput uses own buffering and uses character encodings. LineInput uses own buffering and uses character encodings. - + quick port of filehandler Quick port of FileHandler - + setup demo pages. Setup demo pages. - + updated httplistener is start/stop/destroy lifecycle. Updated HttpListener + + quick port of filehandler quick port of filehandler quick port of quick port + of filehandler quick port of filehandler quick port of filehandler Quick + port of FileHandler + + setup demo pages. setup demo pages. setup demo pages. setup demo pages setup + demo pages. setup demo pages. setup demo pages. Setup demo pages. + + updated httplistener is start/stop/destroy lifecycle. updated httplist + updated httplistener is start/stop/destroy lifecycle. updated httplist + updated httplistener is start/stop/destroy lifecycle. Updated HttpListener is start/stop/destroy lifecycle. jetty-3.0.A0 - 09 October 1999 - + added generalized http connection. Added generalized HTTP Connection. - + added support for servlet 2.2 outbut buffer control. Added support for - servlet 2.2 outbut buffer control. - + added support for transfer and content encoding filters. Added support for + + added generalized http connection. added generalized http connection. added + generalized http connection. added generalized http connection. added + generalized http connection. Added generalized HTTP Connection. + + added support for servlet 2.2 outbut buffer control. added support for added + support for servlet 2.2 outbut buffer control. added support for added + support for servlet 2.2 outbut buffer control. Added support for servlet 2.2 + outbut buffer control. + + added support for transfer and content encoding filters. added support added + support for transfer and content encoding filters. added support added + support for transfer and content encoding filters. Added support for transfer and content encoding filters. - + cleaned up chunking code to use lineinput and reduce buffering. Cleaned up + + cleaned up chunking code to use lineinput and reduce buffering. cleane + cleaned up chunking code to use lineinput and reduce buffering. cleane + cleaned up chunking code to use lineinput and reduce buffering. Cleaned up chunking code to use LineInput and reduce buffering. - + cleanup and abstraction of threadpool. Cleanup and abstraction of - ThreadPool. - + cleanup of httprequest and decoupled from servlet api Cleanup of HttpRequest + + cleanup and abstraction of threadpool. cleanup and abstraction of clea + cleanup and abstraction of threadpool. cleanup and abstraction of cleanup + and abstraction of threadpool. Cleanup and abstraction of ThreadPool. + + cleanup of httprequest and decoupled from servlet api cleanup of httpr + cleanup of httprequest and decoupled from servlet api cleanup of httpr + cleanup of httprequest and decoupled from servlet api Cleanup of HttpRequest and decoupled from Servlet API - + cleanup of httpresponse and decoupled from servlet api Cleanup of - HttpResponse and decoupled from Servlet API - + cleanup of lineinput, using 1.2 collections. Cleanup of LineInput, using 1.2 + + cleanup of httpresponse and decoupled from servlet api cleanup of clea + cleanup of httpresponse and decoupled from servlet api cleanup of cleanup of + httpresponse and decoupled from servlet api Cleanup of HttpResponse and + decoupled from Servlet API + + cleanup of lineinput, using 1.2 collections. cleanup of lineinput, usi + cleanup of lineinput, using 1.2 collections. cleanup of lineinput, usi + cleanup of lineinput, using 1.2 collections. Cleanup of LineInput, using 1.2 Collections. - + cleanup of uri, using 1.2 collections. Cleanup of URI, using 1.2 - Collections. - + cleanup of urlencoded, using 1.2 collections. Cleanup of UrlEncoded, using + + cleanup of uri, using 1.2 collections. cleanup of uri, using 1.2 clean + cleanup of uri, using 1.2 collections. cleanup of uri, using 1.2 cleanup of + uri, using 1.2 collections. Cleanup of URI, using 1.2 Collections. + + cleanup of urlencoded, using 1.2 collections. cleanup of urlencoded, u + cleanup of urlencoded, using 1.2 collections. cleanup of urlencoded, u + cleanup of urlencoded, using 1.2 collections. Cleanup of UrlEncoded, using 1.2 Collections. - + created rfc2616 test harness. Created RFC2616 test harness. - + extended uri to handle absolute urls Extended URI to handle absolute URLs - + generalized notification of outputstream events. Generalized notification of + + created rfc2616 test harness. created rfc2616 test harness. created rf + created rfc2616 test harness. created rfc2616 test harness. created rfc2616 + test harness. Created RFC2616 test harness. + + extended uri to handle absolute urls extended uri to handle absolute u + extended uri to handle absolute urls extended uri to handle absolute u + extended uri to handle absolute urls Extended URI to handle absolute URLs + + generalized notification of outputstream events. generalized notificat + generalized notification of outputstream events. generalized notificat + generalized notification of outputstream events. Generalized notification of outputStream events. - + gzip and deflate request transfer encodings gzip and deflate request - transfer encodings + + gzip and deflate request transfer encodings gzip and deflate request g gzip + and deflate request transfer encodings gzip and deflate request gzip and + deflate request transfer encodings gzip and deflate request transfer + encodings + httpexceptions now produce error pages with specific detail of the + httpexceptions now produce error pages with specific detail of the + httpexceptions now produce error pages with specific detail of the HttpExceptions now produce error pages with specific detail of the exception. - + httpmessage supports chunked trailers. HttpMessage supports chunked + + httpmessage supports chunked trailers. httpmessage supports chunked + httpmessage supports chunked trailers. httpmessage supports chunked + httpmessage supports chunked trailers. HttpMessage supports chunked trailers. - + httpmessage supports message states. HttpMessage supports message states. - + moved com.mortbay.base classes to com.mortbay.util Moved com.mortbay.Base - classes to com.mortbay.Util - + moved httpinput/outputstream to chunkableinput/outputstream. Moved + + httpmessage supports message states. httpmessage supports message stat + httpmessage supports message states. httpmessage supports message stat + httpmessage supports message states. HttpMessage supports message states. + + moved com.mortbay.base classes to com.mortbay.util moved com.mortbay.b moved + com.mortbay.base classes to com.mortbay.util moved com.mortbay.b moved + com.mortbay.base classes to com.mortbay.util Moved com.mortbay.Base classes + to com.mortbay.Util + + moved httpinput/outputstream to chunkableinput/outputstream. moved mov moved + httpinput/outputstream to chunkableinput/outputstream. moved moved + httpinput/outputstream to chunkableinput/outputstream. Moved HttpInput/OutputStream to ChunkableInput/OutputStream. - + split httpheader into httpfields and httpmessage. Split HttpHeader into - HttpFields and HttpMessage. - + started fresh repository in cvs Started fresh repository in CVS - + te field coding and trailer handler TE field coding and trailer handler - + threadedserver based on threadpool. ThreadedServer based on ThreadPool. + + split httpheader into httpfields and httpmessage. split httpheader int split + httpheader into httpfields and httpmessage. split httpheader int split + httpheader into httpfields and httpmessage. Split HttpHeader into HttpFields + and HttpMessage. + + started fresh repository in cvs started fresh repository in cvs starte + started fresh repository in cvs started fresh repository in cvs started + fresh repository in cvs Started fresh repository in CVS + + te field coding and trailer handler te field coding and trailer handle te + field coding and trailer handler te field coding and trailer handle te field + coding and trailer handler TE field coding and trailer handler + + threadedserver based on threadpool. threadedserver based on threadpool + threadedserver based on threadpool. threadedserver based on threadpool + threadedserver based on threadpool. ThreadedServer based on ThreadPool. jetty-2.3.0 - 05 October 1999 - + added setuid class with native unix call to set the effective user id. Added + + added setuid class with native unix call to set the effective user id. added + setuid class with native unix call to set the effective user id. added + setuid class with native unix call to set the effective user id. Added SetUID class with native Unix call to set the effective User ID. - + ftp closes files after put/get. FTP closes files after put/get. - + ftp uses inetaddress of command socket for data socket. FTP uses InetAddress - of command socket for data socket. + + ftp closes files after put/get. ftp closes files after put/get. ftp cl ftp + closes files after put/get. ftp closes files after put/get. ftp closes files + after put/get. FTP closes files after put/get. + + ftp uses inetaddress of command socket for data socket. ftp uses ineta ftp + uses inetaddress of command socket for data socket. ftp uses ineta ftp uses + inetaddress of command socket for data socket. FTP uses InetAddress of + command socket for data socket. jetty-2.3.0A - 22 September 1999 - + added "powered by jetty" button. Added "Powered by Jetty" button. - + added buildjetty.java file. Added BuildJetty.java file. - + added gnujsp 1.0 for the jsp 1.0 api. Added GNUJSP 1.0 for the JSP 1.0 API. - + expanded tabs to spaces in source. Expanded tabs to spaces in source. - + made session ids less predictable and removed race. Made session IDs less + + added "powered by jetty" button. added "powered by jetty" button. adde added + "powered by jetty" button. added "powered by jetty" button. added "powered + by jetty" button. Added "Powered by Jetty" button. + + added buildjetty.java file. added buildjetty.java file. added added + buildjetty.java file. added buildjetty.java file. added buildjetty.java + file. Added BuildJetty.java file. + + added gnujsp 1.0 for the jsp 1.0 api. added gnujsp 1.0 for the jsp 1.0 added + gnujsp 1.0 for the jsp 1.0 api. added gnujsp 1.0 for the jsp 1.0 added + gnujsp 1.0 for the jsp 1.0 api. Added GNUJSP 1.0 for the JSP 1.0 API. + + expanded tabs to spaces in source. expanded tabs to spaces in source. + expanded tabs to spaces in source. expanded tabs to spaces in source. + expanded tabs to spaces in source. Expanded tabs to spaces in source. + + made session ids less predictable and removed race. made session ids l made + session ids less predictable and removed race. made session ids l made + session ids less predictable and removed race. Made session IDs less predictable and removed race. - + servercontext available to htmlfilters via context param ServerContext + + servercontext available to htmlfilters via context param servercontext + servercontext available to htmlfilters via context param servercontext + servercontext available to htmlfilters via context param ServerContext available to HtmlFilters via context param - + use javax.servlet classes from jwsdk1.0 Use javax.servlet classes from - JWSDK1.0 + + use javax.servlet classes from jwsdk1.0 use javax.servlet classes from use + javax.servlet classes from jwsdk1.0 use javax.servlet classes from use + javax.servlet classes from jwsdk1.0 Use javax.servlet classes from JWSDK1.0 jetty-2.2.8 - 15 September 1999 - + added disablelog() to turn off logging. Added disableLog() to turn off - logging. - + allow default table attributes to be overriden. Allow default table - attributes to be overriden. - + fixed bug in element.attribute with empty string values. Fixed bug in - Element.attribute with empty string values. - + improved quoting in html element values Improved quoting in HTML element + + added disablelog() to turn off logging. added disablelog() to turn off added + disablelog() to turn off logging. added disablelog() to turn off added + disablelog() to turn off logging. Added disableLog() to turn off logging. + + allow default table attributes to be overriden. allow default table al allow + default table attributes to be overriden. allow default table allow default + table attributes to be overriden. Allow default table attributes to be + overriden. + + fixed bug in element.attribute with empty string values. fixed bug in fixed + bug in element.attribute with empty string values. fixed bug in fixed bug in + element.attribute with empty string values. Fixed bug in Element.attribute + with empty string values. + + improved quoting in html element values improved quoting in html eleme + improved quoting in html element values improved quoting in html eleme + improved quoting in html element values Improved quoting in HTML element values - + made translation of getrequesturi() optional. Made translation of - getRequestURI() optional. - + removed recursion from translationhandler Removed recursion from - TranslationHandler + + made translation of getrequesturi() optional. made translation of made made + translation of getrequesturi() optional. made translation of made + translation of getrequesturi() optional. Made translation of getRequestURI() + optional. + + removed recursion from translationhandler removed recursion from remov + removed recursion from translationhandler removed recursion from removed + recursion from translationhandler Removed recursion from TranslationHandler jetty-2.2.7 - 09 September 1999 - + added default row, head and cell elements to table. Added default row, head - and cell elements to Table. - + added gzipfilter for content encoding. Added GzipFilter for content - encoding. + + added default row, head and cell elements to table. added default row, added + default row, head and cell elements to table. added default row, added + default row, head and cell elements to table. Added default row, head and + cell elements to Table. + + added gzipfilter for content encoding. added gzipfilter for content ad added + gzipfilter for content encoding. added gzipfilter for content added + gzipfilter for content encoding. Added GzipFilter for content encoding. + filehandler passes post request through if the file does not exist. + filehandler passes post request through if the file does not exist. + filehandler passes post request through if the file does not exist. FileHandler passes POST request through if the file does not exist. - + reverted semantics of getrequesturi() to return untranslated uri. Reverted + + reverted semantics of getrequesturi() to return untranslated uri. reve + reverted semantics of getrequesturi() to return untranslated uri. reve + reverted semantics of getrequesturi() to return untranslated uri. Reverted semantics of getRequestURI() to return untranslated URI. jetty-2.2.6 - 05 September 1999 - + added destroy() method on all httphandlers. Added destroy() method on all + + added destroy() method on all httphandlers. added destroy() method on added + destroy() method on all httphandlers. added destroy() method on added + destroy() method on all httphandlers. Added destroy() method on all HttpHandlers. - + added servletrunnerhandler to the contrib directories. Added - ServletRunnerHandler to the contrib directories. - + allow the handling of getpathtranslated to be configured in servlethan Allow - the handling of getPathTranslated to be configured in ServletHandler. - + class stylelink added. class StyleLink added. - + cookies always available from getcookies. Cookies always available from + + added servletrunnerhandler to the contrib directories. added added added + servletrunnerhandler to the contrib directories. added added + servletrunnerhandler to the contrib directories. Added ServletRunnerHandler + to the contrib directories. + + allow the handling of getpathtranslated to be configured in servlethan allow + the handling of getpathtranslated to be configured in servlethan allow the + handling of getpathtranslated to be configured in servlethan Allow the + handling of getPathTranslated to be configured in ServletHandler. + + class stylelink added. class stylelink added. class stylelink added. c class + stylelink added. class stylelink added. class stylelink added. class + StyleLink added. + + cookies always available from getcookies. cookies always available fro + cookies always available from getcookies. cookies always available fro + cookies always available from getcookies. Cookies always available from getCookies. - + cookies parameter renamed to cookiesasparameters Cookies parameter renamed + + cookies parameter renamed to cookiesasparameters cookies parameter ren + cookies parameter renamed to cookiesasparameters cookies parameter ren + cookies parameter renamed to cookiesasparameters Cookies parameter renamed to CookiesAsParameters - + cssclass, cssid and style methods added to element. cssClass, cssID and + + cssclass, cssid and style methods added to element. cssclass, cssid an + cssclass, cssid and style methods added to element. cssclass, cssid an + cssclass, cssid and style methods added to element. cssClass, cssID and style methods added to element. - + filehandler does not server files ending in '/' FileHandler does not server + + filehandler does not server files ending in '/' filehandler does not s + filehandler does not server files ending in '/' filehandler does not s + filehandler does not server files ending in '/' FileHandler does not server files ending in '/' - + fixed cookie max age order of magnitude bug. Fixed Cookie max age order of + + fixed cookie max age order of magnitude bug. fixed cookie max age orde fixed + cookie max age order of magnitude bug. fixed cookie max age orde fixed + cookie max age order of magnitude bug. Fixed Cookie max age order of magnitude bug. + httprequest.getsession() always returns a session as per the latest ap + httprequest.getsession() always returns a session as per the latest ap + httprequest.getsession() always returns a session as per the latest ap HttpRequest.getSession() always returns a session as per the latest API spec. + ignore duplicate single valued headers, rather than reply with bad req + ignore duplicate single valued headers, rather than reply with bad req + ignore duplicate single valued headers, rather than reply with bad req Ignore duplicate single valued headers, rather than reply with bad request, as IE4 breaks the rules. - + media added to style media added to Style - + new implementation of threadpool, avoids a thread leak problem. New + + media added to style media added to style media added to style media a media + added to style media added to style media added to style media added to + Style + + new implementation of threadpool, avoids a thread leak problem. new ne new + implementation of threadpool, avoids a thread leak problem. new new + implementation of threadpool, avoids a thread leak problem. New implementation of ThreadPool, avoids a thread leak problem. - + removed jrun options from servlethandler configuration. Removed JRUN options + + removed jrun options from servlethandler configuration. removed jrun o + removed jrun options from servlethandler configuration. removed jrun o + removed jrun options from servlethandler configuration. Removed JRUN options from ServletHandler configuration. - + servlethandler.destroy destroys all servlets. ServletHandler.destroy + + servlethandler.destroy destroys all servlets. servlethandler.destroy + servlethandler.destroy destroys all servlets. servlethandler.destroy + servlethandler.destroy destroys all servlets. ServletHandler.destroy destroys all servlets. - + span added to block SPAN added to Block - + updated html package to better support css: Updated HTML package to better + + span added to block span added to block span added to block span added span + added to block span added to block span added to block SPAN added to Block + + updated html package to better support css: updated html package to be + updated html package to better support css: updated html package to be + updated html package to better support css: Updated HTML package to better support CSS: jetty-2.2.5 - 19 August 1999 - + always close connection after a bad request. Always close connection after a + + always close connection after a bad request. always close connection a + always close connection after a bad request. always close connection a + always close connection after a bad request. Always close connection after a bad request. - + better default handling of servletexceptions Better default handling of + + better default handling of servletexceptions better default handling o + better default handling of servletexceptions better default handling o + better default handling of servletexceptions Better default handling of ServletExceptions - + close loaded class files so win32 can overwrite them before gc (what a Close + + close loaded class files so win32 can overwrite them before gc (what a close + loaded class files so win32 can overwrite them before gc (what a close + loaded class files so win32 can overwrite them before gc (what a Close loaded class files so Win32 can overwrite them before GC (what a silly file system!). - + don't override the cookie as parameter option. Don't override the cookie as + + don't override the cookie as parameter option. don't override the cook don't + override the cookie as parameter option. don't override the cook don't + override the cookie as parameter option. Don't override the cookie as parameter option. - + fixed bug with closing connections in threadedserver Fixed bug with closing + + fixed bug with closing connections in threadedserver fixed bug with cl fixed + bug with closing connections in threadedserver fixed bug with cl fixed bug + with closing connections in threadedserver Fixed bug with closing connections in ThreadedServer - + improved error messages from jetty.server. Improved error messages from + + improved error messages from jetty.server. improved error messages fro + improved error messages from jetty.server. improved error messages fro + improved error messages from jetty.server. Improved error messages from Jetty.Server. - + limited growth in multipartresponse boundary. Limited growth in - MultiPartResponse boundary. - + made start and stop non final in threadedserver Made start and stop non - final in ThreadedServer - + set expires header in htmlfilter. Set Expires header in HtmlFilter. + + limited growth in multipartresponse boundary. limited growth in limite + limited growth in multipartresponse boundary. limited growth in limited + growth in multipartresponse boundary. Limited growth in MultiPartResponse + boundary. + + made start and stop non final in threadedserver made start and stop no made + start and stop non final in threadedserver made start and stop no made start + and stop non final in threadedserver Made start and stop non final in + ThreadedServer + + set expires header in htmlfilter. set expires header in htmlfilter. se set + expires header in htmlfilter. set expires header in htmlfilter. set expires + header in htmlfilter. Set Expires header in HtmlFilter. jetty-2.2.4 - 02 August 1999 - + better help on jetty.server Better help on Jetty.Server - + fixed bugs in htmlfilter parser and added testharness. Fixed bugs in - HtmlFilter parser and added TestHarness. - + htmlfilter blanks ifmodifiedsince headers on construction HtmlFilter blanks + + better help on jetty.server better help on jetty.server better help on + better help on jetty.server better help on jetty.server better help on + jetty.server Better help on Jetty.Server + + fixed bugs in htmlfilter parser and added testharness. fixed bugs in f fixed + bugs in htmlfilter parser and added testharness. fixed bugs in fixed bugs in + htmlfilter parser and added testharness. Fixed bugs in HtmlFilter parser and + added TestHarness. + + htmlfilter blanks ifmodifiedsince headers on construction htmlfilter b + htmlfilter blanks ifmodifiedsince headers on construction htmlfilter b + htmlfilter blanks ifmodifiedsince headers on construction HtmlFilter blanks IfModifiedSince headers on construction - + httprequests may be passed to httpfilter constructors. HttpRequests may be + + httprequests may be passed to httpfilter constructors. httprequests ma + httprequests may be passed to httpfilter constructors. httprequests ma + httprequests may be passed to httpfilter constructors. HttpRequests may be passed to HttpFilter constructors. - + improved cfg rcs script. Improved cfg RCS script. - + threadedserver can use subclasses of thread. ThreadedServer can use + + improved cfg rcs script. improved cfg rcs script. improved cfg rcs scr + improved cfg rcs script. improved cfg rcs script. improved cfg rcs script. + Improved cfg RCS script. + + threadedserver can use subclasses of thread. threadedserver can use + threadedserver can use subclasses of thread. threadedserver can use + threadedserver can use subclasses of thread. ThreadedServer can use subclasses of Thread. jetty-2.2.3 - 27 July 1999 - + added stop call to httpserver, used by exit servlet. Added stop call to - HttpServer, used by Exit Servlet. - + filehandler defaults to allowing directory access. FileHandler defaults to + + added stop call to httpserver, used by exit servlet. added stop call t added + stop call to httpserver, used by exit servlet. added stop call t added stop + call to httpserver, used by exit servlet. Added stop call to HttpServer, + used by Exit Servlet. + + filehandler defaults to allowing directory access. filehandler default + filehandler defaults to allowing directory access. filehandler default + filehandler defaults to allowing directory access. FileHandler defaults to allowing directory access. - + fixed parser bug in htmlfilter Fixed parser bug in HtmlFilter - + improved performance of com.mortbay.html.heading Improved performance of + + fixed parser bug in htmlfilter fixed parser bug in htmlfilter fixed pa fixed + parser bug in htmlfilter fixed parser bug in htmlfilter fixed parser bug in + htmlfilter Fixed parser bug in HtmlFilter + + improved performance of com.mortbay.html.heading improved performance + improved performance of com.mortbay.html.heading improved performance + improved performance of com.mortbay.html.heading Improved performance of com.mortbay.HTML.Heading - + jdbc tests modified to use cloudscape as db. JDBC tests modified to use - cloudscape as DB. - + made setinitialize public in servletholder Made setInitialize public in + + jdbc tests modified to use cloudscape as db. jdbc tests modified to us jdbc + tests modified to use cloudscape as db. jdbc tests modified to us jdbc tests + modified to use cloudscape as db. JDBC tests modified to use cloudscape as + DB. + + made setinitialize public in servletholder made setinitialize public i made + setinitialize public in servletholder made setinitialize public i made + setinitialize public in servletholder Made setInitialize public in ServletHolder + simplified jdbc connection handling so that it works with java1.2 - al + simplified jdbc connection handling so that it works with java1.2 - al + simplified jdbc connection handling so that it works with java1.2 - al Simplified JDBC connection handling so that it works with Java1.2 - albeit less efficiently. jetty-2.2.2 - 22 July 1999 - + file handler passes through not allowed options for non existant files File + + file handler passes through not allowed options for non existant files file + handler passes through not allowed options for non existant files file + handler passes through not allowed options for non existant files File handler passes through not allowed options for non existant files. - + fixed bug in com.mortbay.util.io with thread routines. Fixed bug in - com.mortbay.Util.IO with thread routines. - + fixed bug in htmlfilter that prevented single char buffers from being Fixed - bug in HtmlFilter that prevented single char buffers from being written. - + fixed bug with classpath in filejarservletloader after attempt to load Fixed - bug with CLASSPATH in FileJarServletLoader after attempt to load from a jar. - + implemented getresourceasstream in filejarservletloader Implemented + + fixed bug in com.mortbay.util.io with thread routines. fixed bug in fi fixed + bug in com.mortbay.util.io with thread routines. fixed bug in fixed bug in + com.mortbay.util.io with thread routines. Fixed bug in com.mortbay.Util.IO + with thread routines. + + fixed bug in htmlfilter that prevented single char buffers from being fixed + bug in htmlfilter that prevented single char buffers from being fixed bug + in htmlfilter that prevented single char buffers from being Fixed bug in + HtmlFilter that prevented single char buffers from being written. + + fixed bug with classpath in filejarservletloader after attempt to load fixed + bug with classpath in filejarservletloader after attempt to load fixed bug + with classpath in filejarservletloader after attempt to load Fixed bug with + CLASSPATH in FileJarServletLoader after attempt to load from a jar. + + implemented getresourceasstream in filejarservletloader implemented + implemented getresourceasstream in filejarservletloader implemented + implemented getresourceasstream in filejarservletloader Implemented getResourceAsStream in FileJarServletLoader - + improved com.mortbay.base.log handling of different jvms Improved + + improved com.mortbay.base.log handling of different jvms improved impr + improved com.mortbay.base.log handling of different jvms improved improved + com.mortbay.base.log handling of different jvms Improved com.mortbay.Base.Log handling of different JVMs - + minor fixes to readme Minor fixes to README - + moved more test harnesses out of classes. Moved more test harnesses out of - classes. - + notfoundhandler can repond with sc_method_not_allowed. NotFoundHandler can + + minor fixes to readme minor fixes to readme minor fixes to readme mino minor + fixes to readme minor fixes to readme minor fixes to readme Minor fixes to + README + + moved more test harnesses out of classes. moved more test harnesses ou moved + more test harnesses out of classes. moved more test harnesses ou moved more + test harnesses out of classes. Moved more test harnesses out of classes. + + notfoundhandler can repond with sc_method_not_allowed. notfoundhandler + notfoundhandler can repond with sc_method_not_allowed. notfoundhandler + notfoundhandler can repond with sc_method_not_allowed. NotFoundHandler can repond with SC_METHOD_NOT_ALLOWED. jetty-2.2.1 - 18 July 1999 - + added optional resourcebase property to httpconfiguration. this is use Added + + added optional resourcebase property to httpconfiguration. this is use added + optional resourcebase property to httpconfiguration. this is use added + optional resourcebase property to httpconfiguration. this is use Added optional resourceBase property to HttpConfiguration. This is used as a URL prefix in the getResource API and was suggested by the JSERV and Tomcat implementors. - + added terseexceptionhandler Added TerseExceptionHandler - + comma separate header fields. Comma separate header fields. + + added terseexceptionhandler added terseexceptionhandler added added + terseexceptionhandler added terseexceptionhandler added + terseexceptionhandler Added TerseExceptionHandler + + comma separate header fields. comma separate header fields. comma sepa comma + separate header fields. comma separate header fields. comma separate header + fields. Comma separate header fields. + decoupled exceptionhandler configuration from handler stacks. old conf + decoupled exceptionhandler configuration from handler stacks. old conf + decoupled exceptionhandler configuration from handler stacks. old conf Decoupled ExceptionHandler configuration from Handler stacks. Old config style will produce warning and Default behavior. See new config file format for changes. - + handle continuation lines in httpheader. Handle continuation lines in - HttpHeader. - + htmlfilter resets last-modified and content-length headers. HtmlFilter + + handle continuation lines in httpheader. handle continuation lines in + handle continuation lines in httpheader. handle continuation lines in handle + continuation lines in httpheader. Handle continuation lines in HttpHeader. + + htmlfilter resets last-modified and content-length headers. htmlfilter + htmlfilter resets last-modified and content-length headers. htmlfilter + htmlfilter resets last-modified and content-length headers. HtmlFilter resets last-modified and content-length headers. - + ignore ioexception in threadedserver.run() when closing. Ignore IOException + + ignore ioexception in threadedserver.run() when closing. ignore ioexce + ignore ioexception in threadedserver.run() when closing. ignore ioexce + ignore ioexception in threadedserver.run() when closing. Ignore IOException in ThreadedServer.run() when closing. - + implemented com.mortbay.util.io as a threadpool Implemented - com.mortbay.Util.IO as a ThreadPool - + less verbose debug in propertytree Less verbose debug in PropertyTree - + limit maximum line length in httpinputstream. Limit maximum line length in + + implemented com.mortbay.util.io as a threadpool implemented implemente + implemented com.mortbay.util.io as a threadpool implemented implemented + com.mortbay.util.io as a threadpool Implemented com.mortbay.Util.IO as a + ThreadPool + + less verbose debug in propertytree less verbose debug in propertytree less + verbose debug in propertytree less verbose debug in propertytree less + verbose debug in propertytree Less verbose debug in PropertyTree + + limit maximum line length in httpinputstream. limit maximum line lengt limit + maximum line length in httpinputstream. limit maximum line lengt limit + maximum line length in httpinputstream. Limit maximum line length in HttpInputStream. - + protect against duplicate single valued headers. Protect against duplicate + + protect against duplicate single valued headers. protect against dupli + protect against duplicate single valued headers. protect against dupli + protect against duplicate single valued headers. Protect against duplicate single valued headers. + response with sc_bad_request rather than close in more circumstances + response with sc_bad_request rather than close in more circumstances + response with sc_bad_request rather than close in more circumstances Response with SC_BAD_REQUEST rather than close in more circumstances jetty-2.2.0 - 01 July 1999 - + added protekt ssl httplistener Added Protekt SSL HttpListener - + exit servlet improved (a little). Exit servlet improved (a little). - + fixed some of the javadoc formatting. Fixed some of the javadoc formatting. - + improved feature description page. Improved feature description page. - + moved gnujsp and protekt listener to a contrib hierarchy. Moved GNUJSP and - Protekt listener to a contrib hierarchy. + + added protekt ssl httplistener added protekt ssl httplistener added pr added + protekt ssl httplistener added protekt ssl httplistener added protekt ssl + httplistener Added Protekt SSL HttpListener + + exit servlet improved (a little). exit servlet improved (a little). ex exit + servlet improved (a little). exit servlet improved (a little). exit servlet + improved (a little). Exit servlet improved (a little). + + fixed some of the javadoc formatting. fixed some of the javadoc format fixed + some of the javadoc formatting. fixed some of the javadoc format fixed some + of the javadoc formatting. Fixed some of the javadoc formatting. + + improved feature description page. improved feature description page. + improved feature description page. improved feature description page. + improved feature description page. Improved feature description page. + + moved gnujsp and protekt listener to a contrib hierarchy. moved gnujsp moved + gnujsp and protekt listener to a contrib hierarchy. moved gnujsp moved + gnujsp and protekt listener to a contrib hierarchy. Moved GNUJSP and Protekt + listener to a contrib hierarchy. + threadedserver.stop() closes socket before interrupting threads. + threadedserver.stop() closes socket before interrupting threads. + threadedserver.stop() closes socket before interrupting threads. ThreadedServer.stop() closes socket before interrupting threads. jetty-2.2.Beta4 - 29 June 1999 - + added comments to configuration files. Added comments to configuration - files. - + added getglobalproperty to jetty.server and used this to configure def Added + + added comments to configuration files. added comments to configuration added + comments to configuration files. added comments to configuration added + comments to configuration files. Added comments to configuration files. + + added getglobalproperty to jetty.server and used this to configure def added + getglobalproperty to jetty.server and used this to configure def added + getglobalproperty to jetty.server and used this to configure def Added getGlobalProperty to Jetty.Server and used this to configure default page type. - + added jettyminimaldemo.prp as an example of an abbreviated configurati Added + + added jettyminimaldemo.prp as an example of an abbreviated configurati added + jettyminimaldemo.prp as an example of an abbreviated configurati added + jettyminimaldemo.prp as an example of an abbreviated configurati Added JettyMinimalDemo.prp as an example of an abbreviated configuration. - + added property handling to servlethandler to read jrun servlet configu Added + + added property handling to servlethandler to read jrun servlet configu added + property handling to servlethandler to read jrun servlet configu added + property handling to servlethandler to read jrun servlet configu Added property handling to ServletHandler to read JRUN servlet configuration files. + altered meaning of * in propertytree to assist in abbreviated configur + altered meaning of * in propertytree to assist in abbreviated configur + altered meaning of * in propertytree to assist in abbreviated configur Altered meaning of * in PropertyTree to assist in abbreviated configuration files. - + expanded mime.prp file Expanded Mime.prp file - + filehandler flushes files from cache in delete method. FileHandler flushes + + expanded mime.prp file expanded mime.prp file expanded mime.prp file + expanded mime.prp file expanded mime.prp file expanded mime.prp file + Expanded Mime.prp file + + filehandler flushes files from cache in delete method. filehandler flu + filehandler flushes files from cache in delete method. filehandler flu + filehandler flushes files from cache in delete method. FileHandler flushes files from cache in DELETE method. - + made serversocket and accept call generic in threadedserver for ssl Made + + made serversocket and accept call generic in threadedserver for ssl ma made + serversocket and accept call generic in threadedserver for ssl ma made + serversocket and accept call generic in threadedserver for ssl Made ServerSocket and accept call generic in ThreadedServer for SSL listeners. - + options "allowdir" added to filehandler. Options "allowDir" added to - FileHandler. + + options "allowdir" added to filehandler. options "allowdir" added to o + options "allowdir" added to filehandler. options "allowdir" added to options + "allowdir" added to filehandler. Options "allowDir" added to FileHandler. + restructured com.mortbay.jetty.server for better clarity and documenta + restructured com.mortbay.jetty.server for better clarity and documenta + restructured com.mortbay.jetty.server for better clarity and documenta Restructured com.mortbay.Jetty.Server for better clarity and documentation. + threadedserver.stop() now waits until all threads are stopped. + threadedserver.stop() now waits until all threads are stopped. + threadedserver.stop() now waits until all threads are stopped. ThreadedServer.stop() now waits until all threads are stopped. - + updated readme.txt Updated README.txt + + updated readme.txt updated readme.txt updated readme.txt updated readm + updated readme.txt updated readme.txt updated readme.txt Updated README.txt jetty-2.2.Beta3 - 22 June 1999 - + added alternate constructors to html.include for inputstream. Added - alternate constructors to HTML.Include for InputStream. - + added file cache to filehandler Added file cache to FileHandler - + applied contributed patch of spelling and typo corrections Applied - contributed patch of spelling and typo corrections - + fixed bug in httpresponse flush. Fixed bug in HttpResponse flush. - + fixed file and socket leaks in include and embed tags. Fixed file and socket - leaks in Include and Embed tags. - + implemented efficient version of servletcontext.getresourceasstream() + + added alternate constructors to html.include for inputstream. added ad added + alternate constructors to html.include for inputstream. added added + alternate constructors to html.include for inputstream. Added alternate + constructors to HTML.Include for InputStream. + + added file cache to filehandler added file cache to filehandler added added + file cache to filehandler added file cache to filehandler added file cache + to filehandler Added file cache to FileHandler + + applied contributed patch of spelling and typo corrections applied app + applied contributed patch of spelling and typo corrections applied applied + contributed patch of spelling and typo corrections Applied contributed patch + of spelling and typo corrections + + fixed bug in httpresponse flush. fixed bug in httpresponse flush. fixe fixed + bug in httpresponse flush. fixed bug in httpresponse flush. fixed bug in + httpresponse flush. Fixed bug in HttpResponse flush. + + fixed file and socket leaks in include and embed tags. fixed file and fixed + file and socket leaks in include and embed tags. fixed file and fixed file + and socket leaks in include and embed tags. Fixed file and socket leaks in + Include and Embed tags. + + implemented efficient version of servletcontext.getresourceasstream() + implemented efficient version of servletcontext.getresourceasstream() + implemented efficient version of servletcontext.getresourceasstream() Implemented efficient version of ServletContext.getResourceAsStream() that does not open a new socket connection (as does getResource()). - + improved block.write. Improved Block.write. + + improved block.write. improved block.write. improved block.write. impr + improved block.write. improved block.write. improved block.write. Improved + Block.write. + lookandfeelservlet uses getresourceasstream to get the file to wrap. t + lookandfeelservlet uses getresourceasstream to get the file to wrap. t + lookandfeelservlet uses getresourceasstream to get the file to wrap. t LookAndFeelServlet uses getResourceAsStream to get the file to wrap. This allows it to benefit from any caching done and to wrap arbitrary content (not just files). - + ran dos2unix on all text files Ran dos2unix on all text files + + ran dos2unix on all text files ran dos2unix on all text files ran dos2 ran + dos2unix on all text files ran dos2unix on all text files ran dos2unix on + all text files Ran dos2unix on all text files + re-implemented threadedserver to improve and balance performance. + re-implemented threadedserver to improve and balance performance. + re-implemented threadedserver to improve and balance performance. Re-implemented ThreadedServer to improve and balance performance. + restructure demo so that lookandfeel content comes from simple handler + restructure demo so that lookandfeel content comes from simple handler + restructure demo so that lookandfeel content comes from simple handler Restructure demo so that LookAndFeel content comes from simple handler stack. + server.shutdown() clears configuration so that server may be restarted + server.shutdown() clears configuration so that server may be restarted + server.shutdown() clears configuration so that server may be restarted Server.shutdown() clears configuration so that server may be restarted in same virtual machine. jetty-2.2.Beta2 - 12 June 1999 - + added all write methods to httpoutputstream$switchoutputstream Added all - write methods to HttpOutputStream$SwitchOutputStream - + added com.mortbay.jetty.server.shutdown() for gentler shutdown of serv Added + + added all write methods to httpoutputstream$switchoutputstream added a added + all write methods to httpoutputstream$switchoutputstream added a added all + write methods to httpoutputstream$switchoutputstream Added all write methods + to HttpOutputStream$SwitchOutputStream + + added com.mortbay.jetty.server.shutdown() for gentler shutdown of serv added + com.mortbay.jetty.server.shutdown() for gentler shutdown of serv added + com.mortbay.jetty.server.shutdown() for gentler shutdown of serv Added com.mortbay.Jetty.Server.shutdown() for gentler shutdown of server. Called from Exit servlet + handle path info of a dynamic loaded servlets and correctly set the s + handle path info of a dynamic loaded servlets and correctly set the s + handle path info of a dynamic loaded servlets and correctly set the s Handle path info of a dynamic loaded servlets and correctly set the servlet path. + httprequest.getparameternames() no longer alters the order returned by + httprequest.getparameternames() no longer alters the order returned by + httprequest.getparameternames() no longer alters the order returned by HttpRequest.getParameterNames() no longer alters the order returned by getQueryString(). - + standardized date format in persistent cookies. Standardized date format in + + standardized date format in persistent cookies. standardized date form + standardized date format in persistent cookies. standardized date form + standardized date format in persistent cookies. Standardized date format in persistent cookies. jetty-2.2.Beta1 - 07 June 1999 - + allow configuration of minlistenerthreads, maxlistenerthreads, Allow - configuration of MinListenerThreads, MaxListenerThreads, - MaxListenerThreadIdleMs - + close files after use to avoid "file leak" under heavy load. Close files - after use to avoid "file leak" under heavy load. - + defined abstract servletloader, derivations of which can be specified + + allow configuration of minlistenerthreads, maxlistenerthreads, allow a allow + configuration of minlistenerthreads, maxlistenerthreads, allow allow + configuration of minlistenerthreads, maxlistenerthreads, Allow configuration + of MinListenerThreads, MaxListenerThreads, MaxListenerThreadIdleMs + + close files after use to avoid "file leak" under heavy load. close fil close + files after use to avoid "file leak" under heavy load. close fil close files + after use to avoid "file leak" under heavy load. Close files after use to + avoid "file leak" under heavy load. + + defined abstract servletloader, derivations of which can be specified + defined abstract servletloader, derivations of which can be specified + defined abstract servletloader, derivations of which can be specified Defined abstract ServletLoader, derivations of which can be specified in HttpConfiguration properties. - + destroy requests and responses to help garbage collector. Destroy requests + + destroy requests and responses to help garbage collector. destroy requ + destroy requests and responses to help garbage collector. destroy requ + destroy requests and responses to help garbage collector. Destroy requests and responses to help garbage collector. - + don't warn about ioexceptions unless debug is on. Don't warn about - IOExceptions unless Debug is on. - + fixed cache in filejarservletloader Fixed cache in FileJarServletLoader - + fixed incorrect version numbers in a few places. Fixed incorrect version - numbers in a few places. - + fixed missing copyright messages from some contributions Fixed missing - copyright messages from some contributions - + htmlfilter optimized for being called by a buffered writer. HtmlFilter + + don't warn about ioexceptions unless debug is on. don't warn about don don't + warn about ioexceptions unless debug is on. don't warn about don't warn + about ioexceptions unless debug is on. Don't warn about IOExceptions unless + Debug is on. + + fixed cache in filejarservletloader fixed cache in filejarservletloade fixed + cache in filejarservletloader fixed cache in filejarservletloade fixed cache + in filejarservletloader Fixed cache in FileJarServletLoader + + fixed incorrect version numbers in a few places. fixed incorrect versi fixed + incorrect version numbers in a few places. fixed incorrect versi fixed + incorrect version numbers in a few places. Fixed incorrect version numbers + in a few places. + + fixed missing copyright messages from some contributions fixed missing fixed + missing copyright messages from some contributions fixed missing fixed + missing copyright messages from some contributions Fixed missing copyright + messages from some contributions + + htmlfilter optimized for being called by a buffered writer. htmlfilter + htmlfilter optimized for being called by a buffered writer. htmlfilter + htmlfilter optimized for being called by a buffered writer. HtmlFilter optimized for being called by a buffered writer. - + implemented all httpserver attribute methods by mapping to the Implemented + + implemented all httpserver attribute methods by mapping to the impleme + implemented all httpserver attribute methods by mapping to the impleme + implemented all httpserver attribute methods by mapping to the Implemented all HttpServer attribute methods by mapping to the HttpConfiguration properties. Dynamic reconfiguration is NOT supported by these methods (but we are thinking about it). - + improved threadpool synchronization and added minthreads. Improved - ThreadPool synchronization and added minThreads. - + included gnujsp 0.9.9 Included GNUJSP 0.9.9 - + limit the job queue only grow to the max number of threads. Limit the job - queue only grow to the max number of threads. - + optional use of datecache in log file format Optional use of DateCache in + + improved threadpool synchronization and added minthreads. improved imp + improved threadpool synchronization and added minthreads. improved improved + threadpool synchronization and added minthreads. Improved ThreadPool + synchronization and added minThreads. + + included gnujsp 0.9.9 included gnujsp 0.9.9 included gnujsp 0.9.9 incl + included gnujsp 0.9.9 included gnujsp 0.9.9 included gnujsp 0.9.9 Included + GNUJSP 0.9.9 + + limit the job queue only grow to the max number of threads. limit the limit + the job queue only grow to the max number of threads. limit the limit the + job queue only grow to the max number of threads. Limit the job queue only + grow to the max number of threads. + + optional use of datecache in log file format optional use of datecache + optional use of datecache in log file format optional use of datecache + optional use of datecache in log file format Optional use of DateCache in log file format - + restructure threadedserver to reduce object creation. Restructure + + restructure threadedserver to reduce object creation. restructure + restructure threadedserver to reduce object creation. restructure + restructure threadedserver to reduce object creation. Restructure ThreadedServer to reduce object creation. jetty-2.2.Beta0 - 31 May 1999 - + added "initialize" attribute to servlet configuration to allow servlet Added + + added "initialize" attribute to servlet configuration to allow servlet added + "initialize" attribute to servlet configuration to allow servlet added + "initialize" attribute to servlet configuration to allow servlet Added "Initialize" attribute to servlet configuration to allow servlet to be initialized when loaded. - + added httpresponse.requesthandled() method to avoid bug with servlet d Added + + added httpresponse.requesthandled() method to avoid bug with servlet d added + httpresponse.requesthandled() method to avoid bug with servlet d added + httpresponse.requesthandled() method to avoid bug with servlet d Added HttpResponse.requestHandled() method to avoid bug with servlet doHead method. - + added page.rewind() method to allow a page to be written multiple time Added + + added page.rewind() method to allow a page to be written multiple time added + page.rewind() method to allow a page to be written multiple time added + page.rewind() method to allow a page to be written multiple time Added Page.rewind() method to allow a page to be written multiple times - + handle malformed % characters in urls. Handle malformed % characters in + + handle malformed % characters in urls. handle malformed % characters i + handle malformed % characters in urls. handle malformed % characters i + handle malformed % characters in urls. Handle malformed % characters in URLs. + httprequest.getcookies returns empty array rather than null for no coo + httprequest.getcookies returns empty array rather than null for no coo + httprequest.getcookies returns empty array rather than null for no coo HttpRequest.getCookies returns empty array rather than null for no cookies. + included and improved version of threadpool for significant performanc + included and improved version of threadpool for significant performanc + included and improved version of threadpool for significant performanc Included and improved version of ThreadPool for significant performance improvement under high load. - + included contributed com.mortbay.jetty.stresstester class Included - contributed com.mortbay.Jetty.StressTester class + + included contributed com.mortbay.jetty.stresstester class included inc + included contributed com.mortbay.jetty.stresstester class included included + contributed com.mortbay.jetty.stresstester class Included contributed + com.mortbay.Jetty.StressTester class + loghandler changed to support only a single outfile and optional appen + loghandler changed to support only a single outfile and optional appen + loghandler changed to support only a single outfile and optional appen LogHandler changed to support only a single outfile and optional append. - + removed support for stf Removed support for STF - + servlet loader handles jar files with different files separator. Servlet + + removed support for stf removed support for stf removed support for st + removed support for stf removed support for stf removed support for stf + Removed support for STF + + servlet loader handles jar files with different files separator. servl + servlet loader handles jar files with different files separator. servl + servlet loader handles jar files with different files separator. Servlet loader handles jar files with different files separator. - + threadedserver gently shuts down. ThreadedServer gently shuts down. - + token effort to keep test files out of the jar Token effort to keep test - files out of the jar + + threadedserver gently shuts down. threadedserver gently shuts down. + threadedserver gently shuts down. threadedserver gently shuts down. + threadedserver gently shuts down. ThreadedServer gently shuts down. + + token effort to keep test files out of the jar token effort to keep te token + effort to keep test files out of the jar token effort to keep te token + effort to keep test files out of the jar Token effort to keep test files out + of the jar jetty-2.2.Alpha1 - 07 May 1999 - + call destroy on old servlets when reloading. Call destroy on old servlets - when reloading. - + dynamic servlets can have autoreload configured Dynamic servlets can have + + call destroy on old servlets when reloading. call destroy on old servl call + destroy on old servlets when reloading. call destroy on old servl call + destroy on old servlets when reloading. Call destroy on old servlets when + reloading. + + dynamic servlets can have autoreload configured dynamic servlets can h + dynamic servlets can have autoreload configured dynamic servlets can h + dynamic servlets can have autoreload configured Dynamic servlets can have autoReload configured - + fixed bug in sessiondump Fixed bug in SessionDump - + made capitalization of config file more consistent(ish) Made capitalization - of config file more consistent(ish) - + servletholder can auto reload servlets ServletHolder can auto reload + + fixed bug in sessiondump fixed bug in sessiondump fixed bug in session fixed + bug in sessiondump fixed bug in sessiondump fixed bug in sessiondump Fixed + bug in SessionDump + + made capitalization of config file more consistent(ish) made capitaliz made + capitalization of config file more consistent(ish) made capitaliz made + capitalization of config file more consistent(ish) Made capitalization of + config file more consistent(ish) + + servletholder can auto reload servlets servletholder can auto reload + servletholder can auto reload servlets servletholder can auto reload + servletholder can auto reload servlets ServletHolder can auto reload servlets - + wait for requests to complete before reloading. Wait for requests to - complete before reloading. + + wait for requests to complete before reloading. wait for requests to w wait + for requests to complete before reloading. wait for requests to wait for + requests to complete before reloading. Wait for requests to complete before + reloading. jetty-2.2.Alpha0 - 06 May 1999 - + added reload method to servletholder, but no way to call it yet. Added - reload method to ServletHolder, but no way to call it yet. - + added servletloader implementation if classloader. Added ServletLoader + + added reload method to servletholder, but no way to call it yet. added added + reload method to servletholder, but no way to call it yet. added added + reload method to servletholder, but no way to call it yet. Added reload + method to ServletHolder, but no way to call it yet. + + added servletloader implementation if classloader. added servletloader added + servletloader implementation if classloader. added servletloader added + servletloader implementation if classloader. Added ServletLoader implementation if ClassLoader. - + changed options for fileserver Changed options for FileServer - + dynamic loading of servlets. Dynamic loading of servlets. - + fixed date overflow in cookies Fixed date overflow in Cookies + + changed options for fileserver changed options for fileserver changed + changed options for fileserver changed options for fileserver changed + options for fileserver Changed options for FileServer + + dynamic loading of servlets. dynamic loading of servlets. dynamic load + dynamic loading of servlets. dynamic loading of servlets. dynamic loading of + servlets. Dynamic loading of servlets. + + fixed date overflow in cookies fixed date overflow in cookies fixed da fixed + date overflow in cookies fixed date overflow in cookies fixed date overflow + in cookies Fixed date overflow in Cookies + httphandlers given setproperties method to configure via properties. + httphandlers given setproperties method to configure via properties. + httphandlers given setproperties method to configure via properties. HttpHandlers given setProperties method to configure via Properties. - + httplistener class can be configured HttpListener class can be configured - + httpresponse.senderror avoids illegalstateexception HttpResponse.sendError + + httplistener class can be configured httplistener class can be configu + httplistener class can be configured httplistener class can be configu + httplistener class can be configured HttpListener class can be configured + + httpresponse.senderror avoids illegalstateexception httpresponse.sende + httpresponse.senderror avoids illegalstateexception httpresponse.sende + httpresponse.senderror avoids illegalstateexception HttpResponse.sendError avoids IllegalStateException - + implemented servletserver Implemented ServletServer - + improved propertytree implementation Improved PropertyTree implementation - + improved sessiondump servlet Improved SessionDump servlet - + mime suffix mapping can be configured. Mime suffix mapping can be - configured. - + new server class using propertytree for configuration New Server class using + + implemented servletserver implemented servletserver implemented implemented + servletserver implemented servletserver implemented servletserver + Implemented ServletServer + + improved propertytree implementation improved propertytree implementat + improved propertytree implementation improved propertytree implementat + improved propertytree implementation Improved PropertyTree implementation + + improved sessiondump servlet improved sessiondump servlet improved improved + sessiondump servlet improved sessiondump servlet improved sessiondump + servlet Improved SessionDump servlet + + mime suffix mapping can be configured. mime suffix mapping can be mime mime + suffix mapping can be configured. mime suffix mapping can be mime suffix + mapping can be configured. Mime suffix mapping can be configured. + + new server class using propertytree for configuration new server class new + server class using propertytree for configuration new server class new + server class using propertytree for configuration New Server class using PropertyTree for configuration - + old jetty.server class renamed to jetty.server21 Old Jetty.Server class - renamed to Jetty.Server21 - + removed historic api from sessions Removed historic API from sessions - + removed simpleservletserver Removed SimpleServletServer + + old jetty.server class renamed to jetty.server21 old jetty.server clas old + jetty.server class renamed to jetty.server21 old jetty.server clas old + jetty.server class renamed to jetty.server21 Old Jetty.Server class renamed + to Jetty.Server21 + + removed historic api from sessions removed historic api from sessions + removed historic api from sessions removed historic api from sessions + removed historic api from sessions Removed historic API from sessions + + removed simpleservletserver removed simpleservletserver removed removed + simpleservletserver removed simpleservletserver removed simpleservletserver + Removed SimpleServletServer jetty-2.1.7 - 22 April 1999 - + fixed showstopper bug with getreader and getwriter in requests and Fixed + + fixed showstopper bug with getreader and getwriter in requests and fix fixed + showstopper bug with getreader and getwriter in requests and fix fixed + showstopper bug with getreader and getwriter in requests and Fixed showstopper bug with getReader and getWriter in requests and responses. - + httpfilter uses package interface to get httpoutputstream HttpFilter uses + + httpfilter uses package interface to get httpoutputstream httpfilter u + httpfilter uses package interface to get httpoutputstream httpfilter u + httpfilter uses package interface to get httpoutputstream HttpFilter uses package interface to get HttpOutputStream jetty-2.1.6 - 21 April 1999 - + added additional date formats for httpheader.getdateheader Added additional - date formats for HttpHeader.getDateHeader - + new simpler version of propertytree New simpler version of PropertyTree + + added additional date formats for httpheader.getdateheader added addit added + additional date formats for httpheader.getdateheader added addit added + additional date formats for httpheader.getdateheader Added additional date + formats for HttpHeader.getDateHeader + + new simpler version of propertytree new simpler version of propertytre new + simpler version of propertytree new simpler version of propertytre new + simpler version of propertytree New simpler version of PropertyTree + reduced initial size of most hashtables to reduce default memory overh + reduced initial size of most hashtables to reduce default memory overh + reduced initial size of most hashtables to reduce default memory overh Reduced initial size of most hashtables to reduce default memory overheads. - + return eof from httpinputstream that has a content length. Return EOF from + + return eof from httpinputstream that has a content length. return eof return + eof from httpinputstream that has a content length. return eof return eof + from httpinputstream that has a content length. Return EOF from HttpInputStream that has a content length. - + throw illegalstateexception as required from gets of Throw - IllegalStateException as required from gets of input/output/reader/writer in - requests/responses. - + updated propertytreeeditor Updated PropertyTreeEditor + + throw illegalstateexception as required from gets of throw throw throw + illegalstateexception as required from gets of throw throw + illegalstateexception as required from gets of Throw IllegalStateException + as required from gets of input/output/reader/writer in requests/responses. + + updated propertytreeeditor updated propertytreeeditor updated updated + propertytreeeditor updated propertytreeeditor updated propertytreeeditor + Updated PropertyTreeEditor jetty-2.1.5 - 15 April 1999 - + added settype methods to com.mortbay.ftp.ftp Added setType methods to + + added settype methods to com.mortbay.ftp.ftp added settype methods to added + settype methods to com.mortbay.ftp.ftp added settype methods to added + settype methods to com.mortbay.ftp.ftp Added setType methods to com.mortbay.FTP.Ftp - + fixed alignment bug in tableform Fixed alignment bug in TableForm - + fixed bug in servletdispatch for null pathinfo Fixed bug in ServletDispatch - for null pathInfo - + fixed bugs with invalid sessions Fixed bugs with invalid sessions - + form parameters protected against multiple decodes when redirected. Form + + fixed alignment bug in tableform fixed alignment bug in tableform fixe fixed + alignment bug in tableform fixed alignment bug in tableform fixed alignment + bug in tableform Fixed alignment bug in TableForm + + fixed bug in servletdispatch for null pathinfo fixed bug in servletdis fixed + bug in servletdispatch for null pathinfo fixed bug in servletdis fixed bug + in servletdispatch for null pathinfo Fixed bug in ServletDispatch for null + pathInfo + + fixed bugs with invalid sessions fixed bugs with invalid sessions fixe fixed + bugs with invalid sessions fixed bugs with invalid sessions fixed bugs with + invalid sessions Fixed bugs with invalid sessions + + form parameters protected against multiple decodes when redirected. fo form + parameters protected against multiple decodes when redirected. fo form + parameters protected against multiple decodes when redirected. Form parameters protected against multiple decodes when redirected. + htmlfilter now expands to the url encoded session if requi + htmlfilter now expands to the url encoded session if requi + htmlfilter now expands to the url encoded session if requi HtmlFilter now expands to the URL encoded session if required. - + implemented httprequest.getreader() Implemented HttpRequest.getReader() - + instrumented most of the demo to support url session encoding. Instrumented + + implemented httprequest.getreader() implemented httprequest.getreader( + implemented httprequest.getreader() implemented httprequest.getreader( + implemented httprequest.getreader() Implemented HttpRequest.getReader() + + instrumented most of the demo to support url session encoding. instrum + instrumented most of the demo to support url session encoding. instrum + instrumented most of the demo to support url session encoding. Instrumented most of the demo to support URL session encoding. - + moved sessionhandler to front of stacks Moved SessionHandler to front of - stacks - + page factory requires response for session encoding Page factory requires + + moved sessionhandler to front of stacks moved sessionhandler to front moved + sessionhandler to front of stacks moved sessionhandler to front moved + sessionhandler to front of stacks Moved SessionHandler to front of stacks + + page factory requires response for session encoding page factory requi page + factory requires response for session encoding page factory requi page + factory requires response for session encoding Page factory requires response for session encoding - + reduced session memory overhead of sessions Reduced session memory overhead + + reduced session memory overhead of sessions reduced session memory ove + reduced session memory overhead of sessions reduced session memory ove + reduced session memory overhead of sessions Reduced session memory overhead of sessions - + removed rfcs from package Removed RFCs from package + + removed rfcs from package removed rfcs from package removed rfcs from + removed rfcs from package removed rfcs from package removed rfcs from + package Removed RFCs from package + servlet log has been diverted to com.mortbay.base.log.event() thus deb + servlet log has been diverted to com.mortbay.base.log.event() thus deb + servlet log has been diverted to com.mortbay.base.log.event() thus deb Servlet log has been diverted to com.mortbay.Base.Log.event() Thus debug does not need to be turned on to see servlet logs. - + session url encoding fixed for relative urls. Session URL encoding fixed for + + session url encoding fixed for relative urls. session url encoding fix + session url encoding fixed for relative urls. session url encoding fix + session url encoding fixed for relative urls. Session URL encoding fixed for relative URLs. jetty-2.1.4 - 26 March 1999 - + fixed bug in getrealpath fixed bug in getRealPath - + fixed problem compiling pathmap under some jdks. Fixed problem compiling - PathMap under some JDKs. + + fixed bug in getrealpath fixed bug in getrealpath fixed bug in getreal fixed + bug in getrealpath fixed bug in getrealpath fixed bug in getrealpath fixed + bug in getRealPath + + fixed problem compiling pathmap under some jdks. fixed problem compili fixed + problem compiling pathmap under some jdks. fixed problem compili fixed + problem compiling pathmap under some jdks. Fixed problem compiling PathMap + under some JDKs. + getpathtranslated now call getrealpath with pathinfo (as per spec). + getpathtranslated now call getrealpath with pathinfo (as per spec). + getpathtranslated now call getrealpath with pathinfo (as per spec). getPathTranslated now call getRealPath with pathInfo (as per spec). - + httprequest attributes implemented. HttpRequest attributes implemented. + + httprequest attributes implemented. httprequest attributes implemented + httprequest attributes implemented. httprequest attributes implemented + httprequest attributes implemented. HttpRequest attributes implemented. + pathinfo returns null for zero length pathinfo (as per spec). sorry if + pathinfo returns null for zero length pathinfo (as per spec). sorry if + pathinfo returns null for zero length pathinfo (as per spec). sorry if pathInfo returns null for zero length pathInfo (as per spec). Sorry if this breaks your servlets - it is a pain! + reduced html dependence in http package to allow minimal configuration + reduced html dependence in http package to allow minimal configuration + reduced html dependence in http package to allow minimal configuration Reduced HTML dependence in HTTP package to allow minimal configuration - + session max idle time implemented. Session max idle time implemented. - + tightened license agreement so that binary distributions are required + + session max idle time implemented. session max idle time implemented. + session max idle time implemented. session max idle time implemented. + session max idle time implemented. Session max idle time implemented. + + tightened license agreement so that binary distributions are required + tightened license agreement so that binary distributions are required + tightened license agreement so that binary distributions are required Tightened license agreement so that binary distributions are required to include the license file. jetty-2.1.3 - 19 March 1999 - + added support for suffixes to pathmap Added support for suffixes to PathMap - + included gnujsp implementation of java server pages Included GNUJSP - implementation of Java Server Pages - + use java2 javadoc Use Java2 javadoc + + added support for suffixes to pathmap added support for suffixes to pa added + support for suffixes to pathmap added support for suffixes to pa added + support for suffixes to pathmap Added support for suffixes to PathMap + + included gnujsp implementation of java server pages included gnujsp in + included gnujsp implementation of java server pages included gnujsp included + gnujsp implementation of java server pages Included GNUJSP implementation of + Java Server Pages + + use java2 javadoc use java2 javadoc use java2 javadoc use java2 javado use + java2 javadoc use java2 javadoc use java2 javadoc Use Java2 javadoc jetty-2.1.2 - 09 March 1999 - + api documentation for jsdk 2.1.1 API documentation for JSDK 2.1.1 - + cascading style sheet html element added. Cascading style sheet HTML element + + api documentation for jsdk 2.1.1 api documentation for jsdk 2.1.1 api api + documentation for jsdk 2.1.1 api documentation for jsdk 2.1.1 api + documentation for jsdk 2.1.1 API documentation for JSDK 2.1.1 + + cascading style sheet html element added. cascading style sheet html e + cascading style sheet html element added. cascading style sheet html e + cascading style sheet html element added. Cascading style sheet HTML element added. - + converted most servlets to httpservlets using do methods. Converted most + + converted most servlets to httpservlets using do methods. converted mo + converted most servlets to httpservlets using do methods. converted mo + converted most servlets to httpservlets using do methods. Converted most servlets to HttpServlets using do Methods. - + fixed trailing / bug in filehandler (again!). Fixed trailing / bug in - FileHandler (again!). - + jsdk 2.1.1 JSDK 2.1.1 + + fixed trailing / bug in filehandler (again!). fixed trailing / bug in fixed + trailing / bug in filehandler (again!). fixed trailing / bug in fixed + trailing / bug in filehandler (again!). Fixed trailing / bug in FileHandler + (again!). + + jsdk 2.1.1 jsdk 2.1.1 jsdk 2.1.1 jsdk 2.1.1 jsdk 2.1.1 jsdk 2.1.1 jsdk 2.1.1 + JSDK 2.1.1 jetty-2.1.1 - 05 March 1999 + com.mortbay.base.datecache class added and used to speed date handling + com.mortbay.base.datecache class added and used to speed date handling + com.mortbay.base.datecache class added and used to speed date handling com.mortbay.Base.DateCache class added and used to speed date handling. - + fast char buffer handling in httpinputstream Fast char buffer handling in + + fast char buffer handling in httpinputstream fast char buffer handling fast + char buffer handling in httpinputstream fast char buffer handling fast char + buffer handling in httpinputstream Fast char buffer handling in HttpInputStream - + faster version of httpheader.read() Faster version of HttpHeader.read() - + faster version of httpinputstream.readline(). Faster version of + + faster version of httpheader.read() faster version of httpheader.read( + faster version of httpheader.read() faster version of httpheader.read( + faster version of httpheader.read() Faster version of HttpHeader.read() + + faster version of httpinputstream.readline(). faster version of faster + faster version of httpinputstream.readline(). faster version of faster + version of httpinputstream.readline(). Faster version of HttpInputStream.readLine(). - + faster version of httprequest Faster version of HttpRequest - + handle '.' in configured paths (temp fix until propertytrees) Handle '.' in + + faster version of httprequest faster version of httprequest faster ver + faster version of httprequest faster version of httprequest faster version + of httprequest Faster version of HttpRequest + + handle '.' in configured paths (temp fix until propertytrees) handle ' + handle '.' in configured paths (temp fix until propertytrees) handle ' + handle '.' in configured paths (temp fix until propertytrees) Handle '.' in configured paths (temp fix until PropertyTrees) - + reduced number of calls to getremotehost for optimization Reduced number of + + reduced number of calls to getremotehost for optimization reduced numb + reduced number of calls to getremotehost for optimization reduced numb + reduced number of calls to getremotehost for optimization Reduced number of calls to getRemoteHost for optimization - + size all stringbuffers Size all StringBuffers + + size all stringbuffers size all stringbuffers size all stringbuffers s size + all stringbuffers size all stringbuffers size all stringbuffers Size all + StringBuffers jetty-2.1.0 - 22 February 1999 - + deprecated com.mortbay.util.stf Deprecated com.mortbay.Util.STF - + getservlet methods return null. getServlet methods return null. - + image/jpg -> image/jpeg image/jpg -> image/jpeg - + propertytrees (see new demo page) PropertyTrees (see new Demo page) - + servletdispatch (see new demo page) ServletDispatch (see new Demo page) - + session url encoding Session URL Encoding + + deprecated com.mortbay.util.stf deprecated com.mortbay.util.stf deprec + deprecated com.mortbay.util.stf deprecated com.mortbay.util.stf deprecated + com.mortbay.util.stf Deprecated com.mortbay.Util.STF + + getservlet methods return null. getservlet methods return null. getser + getservlet methods return null. getservlet methods return null. getservlet + methods return null. getServlet methods return null. + + image/jpg -> image/jpeg image/jpg -> image/jpeg image/jpg -> image/jpe + image/jpg -> image/jpeg image/jpg -> image/jpeg image/jpg -> image/jpeg + image/jpg -> image/jpeg + + propertytrees (see new demo page) propertytrees (see new demo page) + propertytrees (see new demo page) propertytrees (see new demo page) + propertytrees (see new demo page) PropertyTrees (see new Demo page) + + servletdispatch (see new demo page) servletdispatch (see new demo page + servletdispatch (see new demo page) servletdispatch (see new demo page + servletdispatch (see new demo page) ServletDispatch (see new Demo page) + + session url encoding session url encoding session url encoding session + session url encoding session url encoding session url encoding Session URL + Encoding jetty-2.1.B1 - 13 February 1999 - + added video/quicktime to default mime types. Added video/quicktime to - default MIME types. - + fixed bug with if-modified-since in filehandler Fixed bug with - if-modified-since in FileHandler - + fixed bug with multipartrequest. Fixed bug with MultipartRequest. - + implemented getresource and getresourceasstream (not tested!). Implemented + + added video/quicktime to default mime types. added video/quicktime to added + video/quicktime to default mime types. added video/quicktime to added + video/quicktime to default mime types. Added video/quicktime to default MIME + types. + + fixed bug with if-modified-since in filehandler fixed bug with fixed b fixed + bug with if-modified-since in filehandler fixed bug with fixed bug with + if-modified-since in filehandler Fixed bug with if-modified-since in + FileHandler + + fixed bug with multipartrequest. fixed bug with multipartrequest. fixe fixed + bug with multipartrequest. fixed bug with multipartrequest. fixed bug with + multipartrequest. Fixed bug with MultipartRequest. + + implemented getresource and getresourceasstream (not tested!). impleme + implemented getresource and getresourceasstream (not tested!). impleme + implemented getresource and getresourceasstream (not tested!). Implemented getResource and getResourceAsStream (NOT Tested!). - + implemented handler translations and getrealpath. Implemented Handler + + implemented handler translations and getrealpath. implemented handler + implemented handler translations and getrealpath. implemented handler + implemented handler translations and getrealpath. Implemented Handler translations and getRealPath. - + implemented requestdispatcher (not tested!). Implemented RequestDispatcher + + implemented requestdispatcher (not tested!). implemented requestdispat + implemented requestdispatcher (not tested!). implemented requestdispat + implemented requestdispatcher (not tested!). Implemented RequestDispatcher (NOT Tested!). - + improved handling of file.separator in filehandler. Improved handling of + + improved handling of file.separator in filehandler. improved handling + improved handling of file.separator in filehandler. improved handling + improved handling of file.separator in filehandler. Improved handling of File.separator in FileHandler. - + replace package com.mortbay.util.gateway with class Replace package + + replace package com.mortbay.util.gateway with class replace package re + replace package com.mortbay.util.gateway with class replace package replace + package com.mortbay.util.gateway with class Replace package com.mortbay.Util.Gateway with class com.mortbay.Util.InetGateway - + updated defaultexceptionhandler. Updated DefaultExceptionHandler. - + updated inetaddrport. Updated InetAddrPort. - + updated uri. Updated URI. + + updated defaultexceptionhandler. updated defaultexceptionhandler. upda + updated defaultexceptionhandler. updated defaultexceptionhandler. updated + defaultexceptionhandler. Updated DefaultExceptionHandler. + + updated inetaddrport. updated inetaddrport. updated inetaddrport. upda + updated inetaddrport. updated inetaddrport. updated inetaddrport. Updated + InetAddrPort. + + updated uri. updated uri. updated uri. updated uri. updated uri. updated + uri. updated uri. Updated URI. jetty-2.1.B0 - 30 January 1999 - + added plug gateway classes com.mortbay.util.gateway Added plug gateway - classes com.mortbay.Util.Gateway - + added support for put, move, delete in filehandler Added support for PUT, - MOVE, DELETE in FileHandler - + filehandler now sets content length. FileHandler now sets content length. - + fixed command line bug with simpleservletconfig Fixed command line bug with + + added plug gateway classes com.mortbay.util.gateway added plug gateway added + plug gateway classes com.mortbay.util.gateway added plug gateway added plug + gateway classes com.mortbay.util.gateway Added plug gateway classes + com.mortbay.Util.Gateway + + added support for put, move, delete in filehandler added support for p added + support for put, move, delete in filehandler added support for p added + support for put, move, delete in filehandler Added support for PUT, MOVE, + DELETE in FileHandler + + filehandler now sets content length. filehandler now sets content leng + filehandler now sets content length. filehandler now sets content leng + filehandler now sets content length. FileHandler now sets content length. + + fixed command line bug with simpleservletconfig fixed command line bug fixed + command line bug with simpleservletconfig fixed command line bug fixed + command line bug with simpleservletconfig Fixed command line bug with SimpleServletConfig - + minor changes to support ms j++ and its non standard language extensio Minor + + minor changes to support ms j++ and its non standard language extensio minor + changes to support ms j++ and its non standard language extensio minor + changes to support ms j++ and its non standard language extensio Minor changes to support MS J++ and its non standard language extensions - MMMmmm should have left it unchanged! - + uses jsdk2.1 api, but not all methods implemented. Uses JSDK2.1 API, but not - all methods implemented. + + uses jsdk2.1 api, but not all methods implemented. uses jsdk2.1 api, b uses + jsdk2.1 api, but not all methods implemented. uses jsdk2.1 api, b uses + jsdk2.1 api, but not all methods implemented. Uses JSDK2.1 API, but not all + methods implemented. jetty-2.0.5 - 15 December 1998 - + added getheadernoparams added getHeaderNoParams - + temp fix to getcharacterencoding Temp fix to getCharacterEncoding + + added getheadernoparams added getheadernoparams added getheadernoparam added + getheadernoparams added getheadernoparams added getheadernoparams added + getHeaderNoParams + + temp fix to getcharacterencoding temp fix to getcharacterencoding temp temp + fix to getcharacterencoding temp fix to getcharacterencoding temp fix to + getcharacterencoding Temp fix to getCharacterEncoding jetty-2.0.4 - 10 December 1998 - + implement getcharacterencoding Implement getCharacterEncoding - + improved default makefile behaviour Improved default Makefile behaviour - + improved error code returns Improved error code returns - + portability issues solved for apple's Portability issues solved for Apple's - + removed mortbay_home support from makefiles Removed MORTBAY_HOME support + + implement getcharacterencoding implement getcharacterencoding implemen + implement getcharacterencoding implement getcharacterencoding implement + getcharacterencoding Implement getCharacterEncoding + + improved default makefile behaviour improved default makefile behaviou + improved default makefile behaviour improved default makefile behaviou + improved default makefile behaviour Improved default Makefile behaviour + + improved error code returns improved error code returns improved error + improved error code returns improved error code returns improved error code + returns Improved error code returns + + portability issues solved for apple's portability issues solved for ap + portability issues solved for apple's portability issues solved for ap + portability issues solved for apple's Portability issues solved for Apple's + + removed mortbay_home support from makefiles removed mortbay_home suppo + removed mortbay_home support from makefiles removed mortbay_home suppo + removed mortbay_home support from makefiles Removed MORTBAY_HOME support from Makefiles - + use real release of jsdk2.0 (rather than beta). Use real release of JSDK2.0 - (rather than beta). + + use real release of jsdk2.0 (rather than beta). use real release of js use + real release of jsdk2.0 (rather than beta). use real release of js use real + release of jsdk2.0 (rather than beta). Use real release of JSDK2.0 (rather + than beta). jetty-2.0.3 - 13 November 1998 - + fix bug with index files for jetty.server. previously servers configur Fix - bug with index files for Jetty.Server. Previously servers configured with + + fix bug with index files for jetty.server. previously servers configur fix + bug with index files for jetty.server. previously servers configur fix bug + with index files for jetty.server. previously servers configur Fix bug with + index files for Jetty.Server. Previously servers configured with com.mortbay.Jetty.Server would not handle index.html files. Need to make this configurable in the prp file. - + fixed errors in readme file: com.mortbay.jetty.server was called Fixed - errors in README file: com.mortbay.Jetty.Server was called - com.mortbay.HTTP.Server - + limit threads in threadedserver and low priority listener option great Limit + + fixed errors in readme file: com.mortbay.jetty.server was called fixed fixed + errors in readme file: com.mortbay.jetty.server was called fixed fixed + errors in readme file: com.mortbay.jetty.server was called Fixed errors in + README file: com.mortbay.Jetty.Server was called com.mortbay.HTTP.Server + + limit threads in threadedserver and low priority listener option great limit + threads in threadedserver and low priority listener option great limit + threads in threadedserver and low priority listener option great Limit threads in ThreadedServer and low priority listener option greatly improve performance under worse case loads. jetty-2.0.2 - 01 November 1998 - + add thread pool to threaded server for significant performance improve Add + + add thread pool to threaded server for significant performance improve add + thread pool to threaded server for significant performance improve add + thread pool to threaded server for significant performance improve Add thread pool to threaded server for significant performance improvement. - + buffer files during configuration Buffer files during configuration - + buffer http response headers. Buffer HTTP Response headers. - + use jetty_home rather than mortbay_home for build environment Use JETTY_HOME + + buffer files during configuration buffer files during configuration bu + buffer files during configuration buffer files during configuration buffer + files during configuration Buffer files during configuration + + buffer http response headers. buffer http response headers. buffer htt + buffer http response headers. buffer http response headers. buffer http + response headers. Buffer HTTP Response headers. + + use jetty_home rather than mortbay_home for build environment use jett use + jetty_home rather than mortbay_home for build environment use jett use + jetty_home rather than mortbay_home for build environment Use JETTY_HOME rather than MORTBAY_HOME for build environment jetty-2.0.1 - 27 October 1998 - + released under an open source license. Released under an Open Source + + released under an open source license. released under an open source + released under an open source license. released under an open source + released under an open source license. Released under an Open Source license. jetty-2.0.0 - 25 October 1998 - + added multipart/form-data demo. Added multipart/form-data demo. - + fixed code.formatobject handling of null objects. Fixed Code.formatObject - handling of null objects. - + removed chat demo (too many netscape dependencies). Removed Chat demo (too + + added multipart/form-data demo. added multipart/form-data demo. added added + multipart/form-data demo. added multipart/form-data demo. added + multipart/form-data demo. Added multipart/form-data demo. + + fixed code.formatobject handling of null objects. fixed code.formatobj fixed + code.formatobject handling of null objects. fixed code.formatobj fixed + code.formatobject handling of null objects. Fixed Code.formatObject handling + of null objects. + + removed chat demo (too many netscape dependencies). removed chat demo + removed chat demo (too many netscape dependencies). removed chat demo + removed chat demo (too many netscape dependencies). Removed Chat demo (too many netscape dependencies). - + removed exceptional case from filehandler redirect. Removed exceptional case + + removed exceptional case from filehandler redirect. removed exceptiona + removed exceptional case from filehandler redirect. removed exceptiona + removed exceptional case from filehandler redirect. Removed exceptional case from FileHandler redirect. jetty-2.0.Beta3 - 29 September 1998 - + added com.mortbay.http.multipartrequest to handle file uploads Added + + added com.mortbay.http.multipartrequest to handle file uploads added a added + com.mortbay.http.multipartrequest to handle file uploads added added + com.mortbay.http.multipartrequest to handle file uploads Added com.mortbay.HTTP.MultiPartRequest to handle file uploads - + added com.mortbay.jetty.server (see readme.jetty) Added - com.mortbay.Jetty.Server (see README.Jetty) - + demo converted to an instance of com.mortbay.jetty.server Demo converted to - an instance of com.mortbay.Jetty.Server - + fixed log handler again. Fixed Log Handler again. - + ignore exception from httplistener Ignore exception from HttpListener - + properly implemented multiple listening addresses Properly implemented + + added com.mortbay.jetty.server (see readme.jetty) added added added + com.mortbay.jetty.server (see readme.jetty) added added + com.mortbay.jetty.server (see readme.jetty) Added com.mortbay.Jetty.Server + (see README.Jetty) + + demo converted to an instance of com.mortbay.jetty.server demo convert demo + converted to an instance of com.mortbay.jetty.server demo convert demo + converted to an instance of com.mortbay.jetty.server Demo converted to an + instance of com.mortbay.Jetty.Server + + fixed log handler again. fixed log handler again. fixed log handler ag fixed + log handler again. fixed log handler again. fixed log handler again. Fixed + Log Handler again. + + ignore exception from httplistener ignore exception from httplistener + ignore exception from httplistener ignore exception from httplistener ignore + exception from httplistener Ignore exception from HttpListener + + properly implemented multiple listening addresses properly implemented + properly implemented multiple listening addresses properly implemented + properly implemented multiple listening addresses Properly implemented multiple listening addresses - + send 301 for directories without trailing / in filehandler Send 301 for - directories without trailing / in FileHandler + + send 301 for directories without trailing / in filehandler send 301 fo send + 301 for directories without trailing / in filehandler send 301 fo send 301 + for directories without trailing / in filehandler Send 301 for directories + without trailing / in FileHandler jetty-2.0Beta2 - 01 July 1998 - + fixed log handler for http/1.1 Fixed Log Handler for HTTP/1.1 - + slight improvement in readmees Slight improvement in READMEEs + + fixed log handler for http/1.1 fixed log handler for http/1.1 fixed lo fixed + log handler for http/1.1 fixed log handler for http/1.1 fixed log handler + for http/1.1 Fixed Log Handler for HTTP/1.1 + + slight improvement in readmees slight improvement in readmees slight slight + improvement in readmees slight improvement in readmees slight improvement in + readmees Slight improvement in READMEEs jetty-2.0Beta1 - 01 June 1998 - + fixed bug with calls to service during initialization of servlet Fixed bug - with calls to service during initialization of servlet - + handle full urls in http requests (to some extent) Handle full URLs in HTTP + + fixed bug with calls to service during initialization of servlet fixed fixed + bug with calls to service during initialization of servlet fixed fixed bug + with calls to service during initialization of servlet Fixed bug with calls + to service during initialization of servlet + + handle full urls in http requests (to some extent) handle full urls in + handle full urls in http requests (to some extent) handle full urls in + handle full urls in http requests (to some extent) Handle full URLs in HTTP requests (to some extent) - + improved performance of code.debug() calls, significantly in the case + + improved performance of code.debug() calls, significantly in the case + improved performance of code.debug() calls, significantly in the case + improved performance of code.debug() calls, significantly in the case Improved performance of Code.debug() calls, significantly in the case of non matching debug patterns. - + improved performance with special asciitolowercase Improved performance with + + improved performance with special asciitolowercase improved performanc + improved performance with special asciitolowercase improved performanc + improved performance with special asciitolowercase Improved performance with special asciiToLowerCase - + provided addsection on com.mortbay.html.page Provided addSection on + + provided addsection on com.mortbay.html.page provided addsection on pr + provided addsection on com.mortbay.html.page provided addsection on provided + addsection on com.mortbay.html.page Provided addSection on com.mortbay.HTML.Page - + provided reset on com.mortbay.html.composite. Provided reset on + + provided reset on com.mortbay.html.composite. provided reset on provid + provided reset on com.mortbay.html.composite. provided reset on provided + reset on com.mortbay.html.composite. Provided reset on com.mortbay.HTML.Composite. - + proxy demo in different server instance Proxy demo in different server - instance - + warn if msie used for multi part mime. Warn if MSIE used for multi part - MIME. + + proxy demo in different server instance proxy demo in different server proxy + demo in different server instance proxy demo in different server proxy demo + in different server instance Proxy demo in different server instance + + warn if msie used for multi part mime. warn if msie used for multi par warn + if msie used for multi part mime. warn if msie used for multi par warn if + msie used for multi part mime. Warn if MSIE used for multi part MIME. jetty-2.0Alpha2 - 01 May 1998 - + added date format to log Added date format to Log - + added timezone to log Added timezone to Log - + handle params in getintheader and getdateheader Handle params in - getIntHeader and getDateHeader - + handle single threaded servlets with servlet pool Handle Single Threaded + + added date format to log added date format to log added date format to added + date format to log added date format to log added date format to log Added + date format to Log + + added timezone to log added timezone to log added timezone to log adde added + timezone to log added timezone to log added timezone to log Added timezone + to Log + + handle params in getintheader and getdateheader handle params in handl + handle params in getintheader and getdateheader handle params in handle + params in getintheader and getdateheader Handle params in getIntHeader and + getDateHeader + + handle single threaded servlets with servlet pool handle single thread + handle single threaded servlets with servlet pool handle single thread + handle single threaded servlets with servlet pool Handle Single Threaded servlets with servlet pool - + jdk1.2 javax.servlet api JDK1.2 javax.servlet API - + removed httprequest.getbytecontent Removed HttpRequest.getByteContent - + use javax.servlet.http.cookie Use javax.servlet.http.Cookie - + use javax.servlet.http.httpsession Use javax.servlet.http.HttpSession - + use javax.servlet.http.httputils.parsepostdata Use + + jdk1.2 javax.servlet api jdk1.2 javax.servlet api jdk1.2 javax.servlet + jdk1.2 javax.servlet api jdk1.2 javax.servlet api jdk1.2 javax.servlet api + JDK1.2 javax.servlet API + + removed httprequest.getbytecontent removed httprequest.getbytecontent + removed httprequest.getbytecontent removed httprequest.getbytecontent + removed httprequest.getbytecontent Removed HttpRequest.getByteContent + + use javax.servlet.http.cookie use javax.servlet.http.cookie use use + javax.servlet.http.cookie use javax.servlet.http.cookie use + javax.servlet.http.cookie Use javax.servlet.http.Cookie + + use javax.servlet.http.httpsession use javax.servlet.http.httpsession use + javax.servlet.http.httpsession use javax.servlet.http.httpsession use + javax.servlet.http.httpsession Use javax.servlet.http.HttpSession + + use javax.servlet.http.httputils.parsepostdata use use use + javax.servlet.http.httputils.parsepostdata use use + javax.servlet.http.httputils.parsepostdata Use javax.servlet.http.HttpUtils.parsePostData jetty-1.3.5 - 01 May 1998 - + added date format to log Added date format to Log - + correct handling of multiple parameters Correct handling of multiple - parameters - + debug triggers added to com.mortbay.base.code Debug triggers added to + + added date format to log added date format to log added date format to added + date format to log added date format to log added date format to log Added + date format to Log + + correct handling of multiple parameters correct handling of multiple c + correct handling of multiple parameters correct handling of multiple correct + handling of multiple parameters Correct handling of multiple parameters + + debug triggers added to com.mortbay.base.code debug triggers added to debug + triggers added to com.mortbay.base.code debug triggers added to debug + triggers added to com.mortbay.base.code Debug triggers added to com.mortbay.Base.Code - + fixed socket inet bug in ftp Fixed socket inet bug in FTP + + fixed socket inet bug in ftp fixed socket inet bug in ftp fixed socket fixed + socket inet bug in ftp fixed socket inet bug in ftp fixed socket inet bug in + ftp Fixed socket inet bug in FTP jetty-2.0Alpha1 - 08 April 1998 - + accept chunked data accept chunked data - + add http/1.1 date: header Add HTTP/1.1 Date: header - + correct formatting of date http headers Correct formatting of Date HTTP + + accept chunked data accept chunked data accept chunked data accept chu + accept chunked data accept chunked data accept chunked data accept chunked + data + + add http/1.1 date: header add http/1.1 date: header add http/1.1 date: add + http/1.1 date: header add http/1.1 date: header add http/1.1 date: header + Add HTTP/1.1 Date: header + + correct formatting of date http headers correct formatting of date htt + correct formatting of date http headers correct formatting of date htt + correct formatting of date http headers Correct formatting of Date HTTP headers - + debug triggers added to com.mortbay.base.code Debug triggers added to + + debug triggers added to com.mortbay.base.code debug triggers added to debug + triggers added to com.mortbay.base.code debug triggers added to debug + triggers added to com.mortbay.base.code Debug triggers added to com.mortbay.Base.Code - + fixed forward bug with no port number Fixed forward bug with no port number - + handle extra spaces in http headers handle extra spaces in HTTP headers - + handle file requests with if-modified-since: or if-unmodified-since: Handle + + fixed forward bug with no port number fixed forward bug with no port n fixed + forward bug with no port number fixed forward bug with no port n fixed + forward bug with no port number Fixed forward bug with no port number + + handle extra spaces in http headers handle extra spaces in http header + handle extra spaces in http headers handle extra spaces in http header + handle extra spaces in http headers handle extra spaces in HTTP headers + + handle file requests with if-modified-since: or if-unmodified-since: h + handle file requests with if-modified-since: or if-unmodified-since: h + handle file requests with if-modified-since: or if-unmodified-since: Handle file requests with If-Modified-Since: or If-Unmodified-Since: - + handle head properly Handle HEAD properly - + handle http/1.1 host: header Handle HTTP/1.1 Host: header - + httptests test harness HttpTests test harness - + persistent connections persistent connections - + really fixed handling of multiple parameters Really fixed handling of - multiple parameters - + removed httprequestheader class Removed HttpRequestHeader class - + requires host: header for 1.1 requests Requires Host: header for 1.1 + + handle head properly handle head properly handle head properly handle + handle head properly handle head properly handle head properly Handle HEAD + properly + + handle http/1.1 host: header handle http/1.1 host: header handle http/ + handle http/1.1 host: header handle http/1.1 host: header handle http/1.1 + host: header Handle HTTP/1.1 Host: header + + httptests test harness httptests test harness httptests test harness + httptests test harness httptests test harness httptests test harness + HttpTests test harness + + persistent connections persistent connections persistent connections + persistent connections persistent connections persistent connections + persistent connections + + really fixed handling of multiple parameters really fixed handling of + really fixed handling of multiple parameters really fixed handling of really + fixed handling of multiple parameters Really fixed handling of multiple + parameters + + removed httprequestheader class removed httprequestheader class remove + removed httprequestheader class removed httprequestheader class removed + httprequestheader class Removed HttpRequestHeader class + + requires host: header for 1.1 requests requires host: header for 1.1 + requires host: header for 1.1 requests requires host: header for 1.1 + requires host: header for 1.1 requests Requires Host: header for 1.1 requests - + send 100 continue for http/1.1 requests (concerned about push???) Send 100 - Continue for HTTP/1.1 requests (concerned about push???) - + send connection: close Send Connection: close - + sends chunked data for 1.1 responses of unknown length. Sends chunked data - for 1.1 responses of unknown length. + + send 100 continue for http/1.1 requests (concerned about push???) send send + 100 continue for http/1.1 requests (concerned about push???) send send 100 + continue for http/1.1 requests (concerned about push???) Send 100 Continue + for HTTP/1.1 requests (concerned about push???) + + send connection: close send connection: close send connection: close s send + connection: close send connection: close send connection: close Send + Connection: close + + sends chunked data for 1.1 responses of unknown length. sends chunked sends + chunked data for 1.1 responses of unknown length. sends chunked sends + chunked data for 1.1 responses of unknown length. Sends chunked data for 1.1 + responses of unknown length. jetty-1.3.4 - 15 March 1998 - + dump servlet enhanced to exercise these changes. Dump servlet enhanced to + + dump servlet enhanced to exercise these changes. dump servlet enhanced dump + servlet enhanced to exercise these changes. dump servlet enhanced dump + servlet enhanced to exercise these changes. Dump servlet enhanced to exercise these changes. - + fixed handling of multiple parameters in query and form content. Fixed - handling of multiple parameters in query and form content. - "?A=1%2C2&A=C%2CD" now returns two values ("1,2" & "C,D") rather than 4. + + fixed handling of multiple parameters in query and form content. fixed fixed + handling of multiple parameters in query and form content. fixed fixed + handling of multiple parameters in query and form content. Fixed handling of + multiple parameters in query and form content. "?A=1%2C2&A=C%2CD" now + returns two values ("1,2" & "C,D") rather than 4. + servlethandler now takes an optional file base directory name which is + servlethandler now takes an optional file base directory name which is + servlethandler now takes an optional file base directory name which is ServletHandler now takes an optional file base directory name which is used to set the translated path for pathInfo in servlet requests. jetty-1.3.3 - + closed exception window in httplistener.java Closed exception window in + + closed exception window in httplistener.java closed exception window i + closed exception window in httplistener.java closed exception window i + closed exception window in httplistener.java Closed exception window in HttpListener.java - + fixed tableform.addbuttonarea bug. Fixed TableForm.addButtonArea bug. - + tableform.extendrow() uses existing cell TableForm.extendRow() uses existing + + fixed tableform.addbuttonarea bug. fixed tableform.addbuttonarea bug. fixed + tableform.addbuttonarea bug. fixed tableform.addbuttonarea bug. fixed + tableform.addbuttonarea bug. Fixed TableForm.addButtonArea bug. + + tableform.extendrow() uses existing cell tableform.extendrow() uses ex + tableform.extendrow() uses existing cell tableform.extendrow() uses ex + tableform.extendrow() uses existing cell TableForm.extendRow() uses existing cell jetty-1.3.2 - + added per table cell composite factories Added per Table cell composite - factories - + fixed proxy bug with no port number Fixed proxy bug with no port number + + added per table cell composite factories added per table cell composit added + per table cell composite factories added per table cell composit added per + table cell composite factories Added per Table cell composite factories + + fixed proxy bug with no port number fixed proxy bug with no port numbe fixed + proxy bug with no port number fixed proxy bug with no port numbe fixed proxy + bug with no port number Fixed proxy bug with no port number jetty-1.3.1 - + better handling of invocationtargetexception in debug Better handling of + + better handling of invocationtargetexception in debug better handling better + handling of invocationtargetexception in debug better handling better + handling of invocationtargetexception in debug Better handling of InvocationTargetException in debug - + forwardhandler only forwards as http/1.0 (from tobias.miller) ForwardHandler + + forwardhandler only forwards as http/1.0 (from tobias.miller) forwardh + forwardhandler only forwards as http/1.0 (from tobias.miller) forwardh + forwardhandler only forwards as http/1.0 (from tobias.miller) ForwardHandler only forwards as http/1.0 (from Tobias.Miller) - + improved parsing of stack traces Improved parsing of stack traces - + minor fixes in smtpmail Minor fixes in SmtpMail - + minor release adjustments for tracker Minor release adjustments for Tracker + + improved parsing of stack traces improved parsing of stack traces impr + improved parsing of stack traces improved parsing of stack traces improved + parsing of stack traces Improved parsing of stack traces + + minor fixes in smtpmail minor fixes in smtpmail minor fixes in smtpmai minor + fixes in smtpmail minor fixes in smtpmail minor fixes in smtpmail Minor + fixes in SmtpMail + + minor release adjustments for tracker minor release adjustments for tr minor + release adjustments for tracker minor release adjustments for tr minor + release adjustments for tracker Minor release adjustments for Tracker jetty-1.3.0 - + added dbadaptor to jdbc wrappers Added DbAdaptor to JDBC wrappers - + beta release of tracker Beta release of Tracker + + added dbadaptor to jdbc wrappers added dbadaptor to jdbc wrappers adde added + dbadaptor to jdbc wrappers added dbadaptor to jdbc wrappers added dbadaptor + to jdbc wrappers Added DbAdaptor to JDBC wrappers + + beta release of tracker beta release of tracker beta release of tracke beta + release of tracker beta release of tracker beta release of tracker Beta + release of Tracker jetty-1.2.0 - + alternate look and feel for jetty Alternate look and feel for Jetty - + better debug configuration Better Debug configuration - + debugservlet DebugServlet - + fixed install bug for nested classes Fixed install bug for nested classes - + reintroduced stf Reintroduced STF + + alternate look and feel for jetty alternate look and feel for jetty + alternate look and feel for jetty alternate look and feel for jetty + alternate look and feel for jetty Alternate look and feel for Jetty + + better debug configuration better debug configuration better debug better + debug configuration better debug configuration better debug configuration + Better Debug configuration + + debugservlet debugservlet debugservlet debugservlet debugservlet + debugservlet debugservlet DebugServlet + + fixed install bug for nested classes fixed install bug for nested clas fixed + install bug for nested classes fixed install bug for nested clas fixed + install bug for nested classes Fixed install bug for nested classes + + reintroduced stf reintroduced stf reintroduced stf reintroduced stf + reintroduced stf reintroduced stf reintroduced stf Reintroduced STF jetty-1.1.1 - + improved documentation Improved documentation + + improved documentation improved documentation improved documentation + improved documentation improved documentation improved documentation + Improved documentation jetty-1.1 - + improved connection caching in java.mortbay.jdbc Improved connection caching + + improved connection caching in java.mortbay.jdbc improved connection c + improved connection caching in java.mortbay.jdbc improved connection c + improved connection caching in java.mortbay.jdbc Improved connection caching in java.mortbay.JDBC - + moved httpcode to com.mortbay.util Moved HttpCode to com.mortbay.Util + + moved httpcode to com.mortbay.util moved httpcode to com.mortbay.util moved + httpcode to com.mortbay.util moved httpcode to com.mortbay.util moved + httpcode to com.mortbay.util Moved HttpCode to com.mortbay.Util jetty-1.0.1 - + bug fixes Bug fixes + + bug fixes bug fixes bug fixes bug fixes bug fixes bug fixes bug fixes Bug + fixes jetty-1.0 - + first release in com.mortbay package structure First release in com.mortbay + + first release in com.mortbay package structure first release in com.mo first + release in com.mortbay package structure first release in com.mo first + release in com.mortbay package structure First release in com.mortbay package structure - + included util, jdbc, html, http, jetty Included Util, JDBC, HTML, HTTP, + + included util, jdbc, html, http, jetty included util, jdbc, html, http + included util, jdbc, html, http, jetty included util, jdbc, html, http + included util, jdbc, html, http, jetty Included Util, JDBC, HTML, HTTP, Jetty - diff --git a/apache-jsp/pom.xml b/apache-jsp/pom.xml index 8908a4e2ec6..4536aa1380c 100644 --- a/apache-jsp/pom.xml +++ b/apache-jsp/pom.xml @@ -30,6 +30,31 @@ + + org.apache.maven.plugins + maven-jar-plugin + + + nolog-jar + + jar + + + nolog + + META-INF/services/org.apache.juli.logging.Log + + + + + + + org.jacoco + jacoco-maven-plugin + + true + + @@ -39,11 +64,6 @@ jetty-util ${project.version} - - org.eclipse.jetty - jetty-server - ${project.version} - @@ -68,5 +88,25 @@ org.eclipse.jdt.core.compiler ecj + + + + org.eclipse.jetty + jetty-servlet + ${project.version} + tests + test + + + org.eclipse.jetty + jetty-servlet + ${project.version} + test + + + org.eclipse.jetty.toolchain + jetty-test-helper + test + diff --git a/apache-jsp/src/main/java/org/eclipse/jetty/apache/jsp/JettyJasperInitializer.java b/apache-jsp/src/main/java/org/eclipse/jetty/apache/jsp/JettyJasperInitializer.java index 060db780ffc..bbac439e15e 100644 --- a/apache-jsp/src/main/java/org/eclipse/jetty/apache/jsp/JettyJasperInitializer.java +++ b/apache-jsp/src/main/java/org/eclipse/jetty/apache/jsp/JettyJasperInitializer.java @@ -29,8 +29,9 @@ import javax.servlet.ServletContext; import org.apache.jasper.servlet.JasperInitializer; import org.apache.jasper.servlet.TldPreScanned; import org.apache.jasper.servlet.TldScanner; -import org.eclipse.jetty.util.log.Log; -import org.eclipse.jetty.util.log.Logger; +import org.apache.juli.logging.Log; +import org.apache.juli.logging.LogFactory; + import org.xml.sax.SAXException; /** @@ -38,8 +39,7 @@ import org.xml.sax.SAXException; */ public class JettyJasperInitializer extends JasperInitializer { - private static final Logger LOG = Log.getLogger(JettyJasperInitializer.class); - + private static final Log LOG = LogFactory.getLog(JasperInitializer.class); /** * NullTldScanner * @@ -111,6 +111,4 @@ public class JettyJasperInitializer extends JasperInitializer if (LOG.isDebugEnabled()) LOG.debug("Defaulting to jasper tld scanning"); return super.newTldScanner(context, namespaceAware, validate, blockExternal); } - - } diff --git a/apache-jsp/src/main/java/org/eclipse/jetty/jsp/JettyJspServlet.java b/apache-jsp/src/main/java/org/eclipse/jetty/jsp/JettyJspServlet.java index 6f889dd4d8f..62744692228 100644 --- a/apache-jsp/src/main/java/org/eclipse/jetty/jsp/JettyJspServlet.java +++ b/apache-jsp/src/main/java/org/eclipse/jetty/jsp/JettyJspServlet.java @@ -19,6 +19,9 @@ package org.eclipse.jetty.jsp; import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; @@ -26,9 +29,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.jasper.servlet.JspServlet; -import org.eclipse.jetty.server.handler.ContextHandler; -import org.eclipse.jetty.util.URIUtil; -import org.eclipse.jetty.util.resource.Resource; + /** * JettyJspServlet @@ -76,7 +77,7 @@ public class JettyJspServlet extends JspServlet pathInfo = request.getPathInfo(); } - String pathInContext = URIUtil.addPaths(servletPath,pathInfo); + String pathInContext = addPaths(servletPath,pathInfo); String jspFile = getInitParameter("jspFile"); @@ -84,7 +85,7 @@ public class JettyJspServlet extends JspServlet //otherwise the default servlet might handle it if (jspFile == null) { - if (pathInContext.endsWith("/")) + if (pathInContext != null && pathInContext.endsWith("/")) { //dispatch via forward to the default servlet getServletContext().getNamedDispatcher("default").forward(req, resp); @@ -93,13 +94,16 @@ public class JettyJspServlet extends JspServlet else { //check if it resolves to a directory - Resource resource = ((ContextHandler.Context)getServletContext()).getContextHandler().getResource(pathInContext); - - if (resource!=null && resource.isDirectory()) + String realPath = getServletContext().getRealPath(pathInContext); + if (realPath != null) { - //dispatch via forward to the default servlet - getServletContext().getNamedDispatcher("default").forward(req, resp); - return; + Path asPath = Paths.get(realPath); + if (Files.exists(asPath) && Files.isDirectory(asPath)) + { + //dispatch via forward to the default servlet + getServletContext().getNamedDispatcher("default").forward(req, resp); + return; + } } } } @@ -108,5 +112,19 @@ public class JettyJspServlet extends JspServlet super.service(req, resp); } - + /** + * @param servletPath the servletPath of the request + * @param pathInfo the pathInfo of the request + * @return servletPath with pathInfo appended + */ + private String addPaths(String servletPath, String pathInfo) + { + if (servletPath.length()==0) + return pathInfo; + + if (pathInfo==null) + return servletPath; + + return servletPath+pathInfo; + } } diff --git a/apache-jsp/src/test/java/org/eclipse/jetty/jsp/TestJettyJspServlet.java b/apache-jsp/src/test/java/org/eclipse/jetty/jsp/TestJettyJspServlet.java new file mode 100644 index 00000000000..430de11d04d --- /dev/null +++ b/apache-jsp/src/test/java/org/eclipse/jetty/jsp/TestJettyJspServlet.java @@ -0,0 +1,123 @@ +// +// ======================================================================== +// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.jsp; + +import static org.junit.Assert.*; + +import java.io.File; +import java.io.IOException; +import java.net.URL; +import java.net.URLClassLoader; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.jsp.JspFactory; + +import org.eclipse.jetty.servlet.ServletHolder; +import org.eclipse.jetty.servlet.ServletTester; +import org.eclipse.jetty.toolchain.test.MavenTestingUtils; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.apache.jasper.runtime.JspFactoryImpl; +import org.apache.tomcat.InstanceManager; +import org.apache.tomcat.SimpleInstanceManager; +import org.eclipse.jetty.servlet.ServletContextHandler; + +public class TestJettyJspServlet +{ + File _dir; + ServletTester _tester; + + public static class DfltServlet extends HttpServlet + { + + public DfltServlet() + { + super(); + } + + /** + * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) + */ + @Override + protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException + { + resp.setContentType("html/text"); + resp.getOutputStream().println("This.Is.The.Default."); + } + + } + + @Before + public void setUp () throws Exception + { + JspFactory.setDefaultFactory(new JspFactoryImpl()); + _dir = MavenTestingUtils.getTestResourceDir("base"); + _tester = new ServletTester("/context"); + _tester.getContext().setClassLoader(new URLClassLoader(new URL[0], Thread.currentThread().getContextClassLoader())); + ServletHolder jspHolder = _tester.getContext().addServlet(JettyJspServlet.class, "/*"); + jspHolder.setInitParameter("scratchdir", MavenTestingUtils.getTargetTestingDir().getAbsolutePath()); + _tester.getContext().setResourceBase(_dir.getAbsolutePath()); + _tester.getContext().setAttribute(InstanceManager.class.getName(), new SimpleInstanceManager()); + ServletHolder dfltHolder = new ServletHolder(); + dfltHolder.setName("default"); + dfltHolder.setHeldClass( DfltServlet.class); + _tester.getContext().addServlet(dfltHolder, "/"); + + _tester.start(); + } + + @After + public void tearDown() throws Exception + { + if (_tester != null) + _tester.stop(); + } + + @Test + public void testWithJsp() throws Exception + { + //test that an ordinary jsp is served by jsp servlet + String request = "" + + "GET /context/foo.jsp HTTP/1.1\r\n" + + "Host: localhost\r\n" + + "Connection: close\r\n" + + "\r\n"; + String response = _tester.getResponses(request); + assertTrue(!response.contains("This.Is.The.Default.")); + } + + + @Test + public void testWithDirectory() throws Exception + { + //test that a dir is served by the default servlet + String request = "" + + "GET /context/dir HTTP/1.1\r\n" + + "Host: localhost\r\n" + + "Connection: close\r\n" + + "\r\n"; + String response = _tester.getResponses(request); + assertTrue(response.contains("This.Is.The.Default.")); + } + +} diff --git a/apache-jsp/src/test/resources/base/dir/empty.txt b/apache-jsp/src/test/resources/base/dir/empty.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/apache-jsp/src/test/resources/base/foo.jsp b/apache-jsp/src/test/resources/base/foo.jsp new file mode 100644 index 00000000000..fb73b0b0002 --- /dev/null +++ b/apache-jsp/src/test/resources/base/foo.jsp @@ -0,0 +1,23 @@ + +<%@ page import="java.util.Enumeration" %> + +

JSP Dump

+ + + + + + +<% + Enumeration e =request.getParameterNames(); + while(e.hasMoreElements()) + { + String name = (String)e.nextElement(); +%> + + + +<% } %> + +
Request URI:<%= request.getRequestURI() %>
ServletPath:<%= request.getServletPath() %>
PathInfo:<%= request.getPathInfo() %>
getParameter("<%= name %>")<%= request.getParameter(name) %>
+ diff --git a/apache-jstl/pom.xml b/apache-jstl/pom.xml index 702be9d044a..91335a7d7f8 100644 --- a/apache-jstl/pom.xml +++ b/apache-jstl/pom.xml @@ -22,7 +22,13 @@ false - + + org.jacoco + jacoco-maven-plugin + + true + + diff --git a/jetty-alpn/jetty-alpn-server/src/main/config/modules/alpn-impl/alpn-1.8.0_111.mod b/jetty-alpn/jetty-alpn-server/src/main/config/modules/alpn-impl/alpn-1.8.0_111.mod new file mode 100644 index 00000000000..eebd2a92550 --- /dev/null +++ b/jetty-alpn/jetty-alpn-server/src/main/config/modules/alpn-impl/alpn-1.8.0_111.mod @@ -0,0 +1,5 @@ +[files] +http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/8.1.9.v20160720/alpn-boot-8.1.9.v20160720.jar|lib/alpn/alpn-boot-8.1.9.v20160720.jar + +[exec] +-Xbootclasspath/p:lib/alpn/alpn-boot-8.1.9.v20160720.jar diff --git a/jetty-alpn/jetty-alpn-server/src/main/config/modules/alpn-impl/alpn-1.8.0_112.mod b/jetty-alpn/jetty-alpn-server/src/main/config/modules/alpn-impl/alpn-1.8.0_112.mod new file mode 100644 index 00000000000..3887113d09b --- /dev/null +++ b/jetty-alpn/jetty-alpn-server/src/main/config/modules/alpn-impl/alpn-1.8.0_112.mod @@ -0,0 +1,5 @@ +[files] +http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/8.1.10.v20161026/alpn-boot-8.1.10.v20161026.jar|lib/alpn/alpn-boot-8.1.10.v20161026.jar + +[exec] +-Xbootclasspath/p:lib/alpn/alpn-boot-8.1.10.v20161026.jar diff --git a/jetty-annotations/src/main/java/org/eclipse/jetty/annotations/PostConstructAnnotationHandler.java b/jetty-annotations/src/main/java/org/eclipse/jetty/annotations/PostConstructAnnotationHandler.java index 0c29bc73062..a57ebeb637d 100644 --- a/jetty-annotations/src/main/java/org/eclipse/jetty/annotations/PostConstructAnnotationHandler.java +++ b/jetty-annotations/src/main/java/org/eclipse/jetty/annotations/PostConstructAnnotationHandler.java @@ -44,7 +44,7 @@ public class PostConstructAnnotationHandler extends AbstractIntrospectableAnnota public void doHandle(Class clazz) { //Check that the PostConstruct is on a class that we're interested in - if (Util.supportsPostConstructPreDestroy(clazz)) + if (supportsPostConstruct(clazz)) { Method[] methods = clazz.getDeclaredMethods(); for (int i=0; i> ENV_ENTRY_TYPES = + Arrays.asList(new Class[] {String.class, Character.class, Integer.class, Boolean.class, Double.class, Byte.class, Short.class, Long.class, Float.class}); + protected WebAppContext _context; @@ -57,7 +63,7 @@ public class ResourceAnnotationHandler extends AbstractIntrospectableAnnotationH */ public void doHandle(Class clazz) { - if (Util.supportsResourceInjection(clazz)) + if (supportsResourceInjection(clazz)) { handleClass(clazz); @@ -182,7 +188,7 @@ public class ResourceAnnotationHandler extends AbstractIntrospectableAnnotationH //TODO - an @Resource is equivalent to a resource-ref, resource-env-ref, message-destination metaData.setOrigin("resource-ref."+name+".injection",resource,clazz); } - else if (!Util.isEnvEntryType(type)) + else if (!isEnvEntryType(type)) { //if this is an env-entry type resource and there is no value bound for it, it isn't //an error, it just means that perhaps the code will use a default value instead @@ -196,7 +202,7 @@ public class ResourceAnnotationHandler extends AbstractIntrospectableAnnotationH //if this is an env-entry type resource and there is no value bound for it, it isn't //an error, it just means that perhaps the code will use a default value instead // JavaEE Spec. sec 5.4.1.3 - if (!Util.isEnvEntryType(type)) + if (!isEnvEntryType(type)) throw new IllegalStateException(e); } } @@ -339,7 +345,7 @@ public class ResourceAnnotationHandler extends AbstractIntrospectableAnnotationH //TODO - an @Resource is equivalent to a resource-ref, resource-env-ref, message-destination metaData.setOrigin("resource-ref."+name+".injection",resource,clazz); } - else if (!Util.isEnvEntryType(paramType)) + else if (!isEnvEntryType(paramType)) { //if this is an env-entry type resource and there is no value bound for it, it isn't @@ -353,11 +359,47 @@ public class ResourceAnnotationHandler extends AbstractIntrospectableAnnotationH //if this is an env-entry type resource and there is no value bound for it, it isn't //an error, it just means that perhaps the code will use a default value instead // JavaEE Spec. sec 5.4.1.3 - if (!Util.isEnvEntryType(paramType)) + if (!isEnvEntryType(paramType)) throw new IllegalStateException(e); } } } } + + /** + * Check if the given Class is one that the specification allows to have a Resource annotation. + * + * @param c the class + * @return true if Resource annotation permitted, false otherwise + */ + public boolean supportsResourceInjection (Class c) + { + if (javax.servlet.Servlet.class.isAssignableFrom(c) || + javax.servlet.Filter.class.isAssignableFrom(c) || + javax.servlet.ServletContextListener.class.isAssignableFrom(c) || + javax.servlet.ServletContextAttributeListener.class.isAssignableFrom(c) || + javax.servlet.ServletRequestListener.class.isAssignableFrom(c) || + javax.servlet.ServletRequestAttributeListener.class.isAssignableFrom(c) || + javax.servlet.http.HttpSessionListener.class.isAssignableFrom(c) || + javax.servlet.http.HttpSessionAttributeListener.class.isAssignableFrom(c) || + javax.servlet.http.HttpSessionIdListener.class.isAssignableFrom(c) || + javax.servlet.AsyncListener.class.isAssignableFrom(c) || + javax.servlet.http.HttpUpgradeHandler.class.isAssignableFrom(c)) + return true; + + return false; + } + + + /** + * Check if the class is one of the basic java types permitted as + * env-entries. + * @param clazz the class to check + * @return true if class is permitted by the spec to be an env-entry value + */ + public boolean isEnvEntryType (Class clazz) + { + return ENV_ENTRY_TYPES.contains(clazz); + } } diff --git a/jetty-annotations/src/main/java/org/eclipse/jetty/annotations/Util.java b/jetty-annotations/src/main/java/org/eclipse/jetty/annotations/Util.java deleted file mode 100644 index 9aa259cdc63..00000000000 --- a/jetty-annotations/src/main/java/org/eclipse/jetty/annotations/Util.java +++ /dev/null @@ -1,275 +0,0 @@ -// -// ======================================================================== -// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.annotations; - -import java.lang.reflect.Array; - -import org.eclipse.jetty.util.Loader; -import org.eclipse.jetty.util.TypeUtil; -import org.objectweb.asm.Type; - -/** - * Annotation Processing Utilities - */ -public class Util -{ - private static Class[] __envEntryClassTypes = - new Class[] {String.class, Character.class, Integer.class, Boolean.class, Double.class, Byte.class, Short.class, Long.class, Float.class}; - - - private static String[] __envEntryTypes = - new String[] { Type.getDescriptor(String.class), Type.getDescriptor(Character.class), Type.getDescriptor(Integer.class), Type.getDescriptor(Boolean.class), - Type.getDescriptor(Double.class), Type.getDescriptor(Byte.class), Type.getDescriptor(Short.class), Type.getDescriptor(Long.class), Type.getDescriptor(Float.class)}; - - /** - * Check if the presented method belongs to a class that is one - * of the classes with which a servlet container should be concerned. - * @param c the class - * @return true if class is a type of one of the following: - * ({@link javax.servlet.Servlet}, - * {@link javax.servlet.Filter}, - * {@link javax.servlet.ServletContextListener}, - * {@link javax.servlet.ServletContextAttributeListener}, - * {@link javax.servlet.ServletRequestListener}, - * {@link javax.servlet.ServletRequestAttributeListener}, - * {@link javax.servlet.http.HttpSessionListener}, - * {@link javax.servlet.http.HttpSessionAttributeListener}) - */ - public static boolean isServletType (Class c) - { - boolean isServlet = false; - if (javax.servlet.Servlet.class.isAssignableFrom(c) || - javax.servlet.Filter.class.isAssignableFrom(c) || - javax.servlet.ServletContextListener.class.isAssignableFrom(c) || - javax.servlet.ServletContextAttributeListener.class.isAssignableFrom(c) || - javax.servlet.ServletRequestListener.class.isAssignableFrom(c) || - javax.servlet.ServletRequestAttributeListener.class.isAssignableFrom(c) || - javax.servlet.http.HttpSessionListener.class.isAssignableFrom(c) || - javax.servlet.http.HttpSessionAttributeListener.class.isAssignableFrom(c) || - javax.servlet.AsyncListener.class.isAssignableFrom(c)) - - isServlet=true; - - return isServlet; - } - - - public static boolean supportsResourceInjection (Class c) - { - if (javax.servlet.Servlet.class.isAssignableFrom(c) || - javax.servlet.Filter.class.isAssignableFrom(c) || - javax.servlet.ServletContextListener.class.isAssignableFrom(c) || - javax.servlet.ServletContextAttributeListener.class.isAssignableFrom(c) || - javax.servlet.ServletRequestListener.class.isAssignableFrom(c) || - javax.servlet.ServletRequestAttributeListener.class.isAssignableFrom(c) || - javax.servlet.http.HttpSessionListener.class.isAssignableFrom(c) || - javax.servlet.http.HttpSessionAttributeListener.class.isAssignableFrom(c) || - javax.servlet.http.HttpSessionIdListener.class.isAssignableFrom(c) || - javax.servlet.AsyncListener.class.isAssignableFrom(c) || - javax.servlet.http.HttpUpgradeHandler.class.isAssignableFrom(c)) - return true; - - return false; - } - - - public static boolean supportsPostConstructPreDestroy (Class c) - { - if (javax.servlet.Servlet.class.isAssignableFrom(c) || - javax.servlet.Filter.class.isAssignableFrom(c) || - javax.servlet.ServletContextListener.class.isAssignableFrom(c) || - javax.servlet.ServletContextAttributeListener.class.isAssignableFrom(c) || - javax.servlet.ServletRequestListener.class.isAssignableFrom(c) || - javax.servlet.ServletRequestAttributeListener.class.isAssignableFrom(c) || - javax.servlet.http.HttpSessionListener.class.isAssignableFrom(c) || - javax.servlet.http.HttpSessionAttributeListener.class.isAssignableFrom(c) || - javax.servlet.http.HttpSessionIdListener.class.isAssignableFrom(c) || - javax.servlet.AsyncListener.class.isAssignableFrom(c) || - javax.servlet.http.HttpUpgradeHandler.class.isAssignableFrom(c)) - return true; - - return false; - } - - public static boolean isEnvEntryType (Class type) - { - boolean result = false; - for (int i=0;i<__envEntryClassTypes.length && !result;i++) - { - result = (type.equals(__envEntryClassTypes[i])); - } - return result; - } - - public static boolean isEnvEntryType (String desc) - { - boolean result = false; - for (int i=0;i<__envEntryTypes.length && !result;i++) - { - result = (desc.equals(__envEntryTypes[i])); - } - return result; - } - - public static String normalizePattern(String p) - { - if (p!=null && p.length()>0 && !p.startsWith("/") && !p.startsWith("*")) - return "/"+p; - return p; - } - - - - public static Class[] convertTypes (String params) - throws Exception - { - return convertTypes(Type.getArgumentTypes(params)); - } - - - public static Class[] convertTypes (Type[] types) - throws Exception - { - if (types==null) - return new Class[0]; - - Class[] classArray = new Class[types.length]; - - for (int i=0; i paths = new ArrayList(); for (String s:urlPatterns) { - paths.add(Util.normalizePattern(s)); + paths.add(ServletPathSpec.normalize(s)); } mapping.setPathSpecs(paths.toArray(new String[paths.size()])); } @@ -188,7 +189,7 @@ public class WebFilterAnnotation extends DiscoveredAnnotation ArrayList paths = new ArrayList(); for (String s:urlPatterns) { - paths.add(Util.normalizePattern(s)); + paths.add(ServletPathSpec.normalize(s)); } mapping.setPathSpecs(paths.toArray(new String[paths.size()])); } diff --git a/jetty-annotations/src/main/java/org/eclipse/jetty/annotations/WebServletAnnotation.java b/jetty-annotations/src/main/java/org/eclipse/jetty/annotations/WebServletAnnotation.java index f85ad4cdb4e..dedc8587a58 100644 --- a/jetty-annotations/src/main/java/org/eclipse/jetty/annotations/WebServletAnnotation.java +++ b/jetty-annotations/src/main/java/org/eclipse/jetty/annotations/WebServletAnnotation.java @@ -27,6 +27,8 @@ import javax.servlet.annotation.WebInitParam; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; +import org.eclipse.jetty.http.pathmap.ServletPathSpec; +import org.eclipse.jetty.servlet.Holder; import org.eclipse.jetty.servlet.ServletHolder; import org.eclipse.jetty.servlet.ServletMapping; import org.eclipse.jetty.servlet.Source; @@ -102,7 +104,7 @@ public class WebServletAnnotation extends DiscoveredAnnotation //canonicalize the patterns ArrayList urlPatternList = new ArrayList(); for (String p : urlPatterns) - urlPatternList.add(Util.normalizePattern(p)); + urlPatternList.add(ServletPathSpec.normalize(p)); String servletName = (annotation.name().equals("")?clazz.getName():annotation.name()); diff --git a/jetty-ant/pom.xml b/jetty-ant/pom.xml index 6f12a6a1126..9ff13484735 100644 --- a/jetty-ant/pom.xml +++ b/jetty-ant/pom.xml @@ -33,6 +33,13 @@ + + org.jacoco + jacoco-maven-plugin + + true + + diff --git a/jetty-cdi/test-cdi-it/src/test/resources/jetty-logging.properties b/jetty-cdi/test-cdi-it/src/test/resources/jetty-logging.properties index a3e0efd35f5..6e5209e3846 100644 --- a/jetty-cdi/test-cdi-it/src/test/resources/jetty-logging.properties +++ b/jetty-cdi/test-cdi-it/src/test/resources/jetty-logging.properties @@ -1,10 +1,10 @@ org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog -org.jboss.LEVEL=DEBUG +# org.jboss.LEVEL=DEBUG org.eclipse.jetty.LEVEL=INFO -org.eclipse.jetty.util.DecoratedObjectFactory.LEVEL=DEBUG +# org.eclipse.jetty.util.DecoratedObjectFactory.LEVEL=DEBUG # org.eclipse.jetty.LEVEL=DEBUG -org.eclipse.jetty.websocket.LEVEL=DEBUG +# org.eclipse.jetty.websocket.LEVEL=DEBUG # org.eclipse.jetty.websocket.client.LEVEL=DEBUG diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpConnection.java b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpConnection.java index 766bc308cc2..c7005f089fa 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/HttpConnection.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/HttpConnection.java @@ -112,7 +112,7 @@ public abstract class HttpConnection implements Connection } // If we are HTTP 1.1, add the Host header - if (version.getVersion() == 11) + if (version.getVersion() <= 11) { if (!headers.containsKey(HttpHeader.HOST.asString())) headers.put(getHttpDestination().getHostField()); @@ -121,14 +121,15 @@ public abstract class HttpConnection implements Connection // Add content headers if (content != null) { - if (content instanceof ContentProvider.Typed) + if (!headers.containsKey(HttpHeader.CONTENT_TYPE.asString())) { - if (!headers.containsKey(HttpHeader.CONTENT_TYPE.asString())) - { - String contentType = ((ContentProvider.Typed)content).getContentType(); - if (contentType != null) - headers.put(HttpHeader.CONTENT_TYPE, contentType); - } + String contentType = null; + if (content instanceof ContentProvider.Typed) + contentType = ((ContentProvider.Typed)content).getContentType(); + if (contentType != null) + headers.put(HttpHeader.CONTENT_TYPE, contentType); + else + headers.put(HttpHeader.CONTENT_TYPE, "application/octet-stream"); } long contentLength = content.getLength(); if (contentLength >= 0) @@ -136,11 +137,6 @@ public abstract class HttpConnection implements Connection if (!headers.containsKey(HttpHeader.CONTENT_LENGTH.asString())) headers.put(HttpHeader.CONTENT_LENGTH, String.valueOf(contentLength)); } - else - { - if (!headers.containsKey(HttpHeader.TRANSFER_ENCODING.asString())) - headers.put(CHUNKED_FIELD); - } } // Cookies diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpChannelOverHTTP.java b/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpChannelOverHTTP.java index a922f1734b0..736510a772c 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpChannelOverHTTP.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpChannelOverHTTP.java @@ -143,6 +143,8 @@ public class HttpChannelOverHTTP extends HttpChannel closeReason = "failure"; else if (receiver.isShutdown()) closeReason = "server close"; + else if (sender.isShutdown()) + closeReason = "client close"; if (closeReason == null) { @@ -157,7 +159,7 @@ public class HttpChannelOverHTTP extends HttpChannel } else { - // HTTP 1.1 or greater closes only if it has an explicit close. + // HTTP 1.1 closes only if it has an explicit close. if (responseHeaders.contains(HttpHeader.CONNECTION, HttpHeaderValue.CLOSE.asString())) closeReason = "http/1.1"; } diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpSenderOverHTTP.java b/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpSenderOverHTTP.java index c16b8162c04..1e06e6b9058 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpSenderOverHTTP.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/http/HttpSenderOverHTTP.java @@ -38,6 +38,7 @@ import org.eclipse.jetty.util.IteratingCallback; public class HttpSenderOverHTTP extends HttpSender { private final HttpGenerator generator = new HttpGenerator(); + private boolean shutdown; public HttpSenderOverHTTP(HttpChannelOverHTTP channel) { @@ -149,7 +150,12 @@ public class HttpSenderOverHTTP extends HttpSender { if (LOG.isDebugEnabled()) LOG.debug("Request shutdown output {}", getHttpExchange().getRequest()); - getHttpChannel().getHttpConnection().getEndPoint().shutdownOutput(); + shutdown = true; + } + + protected boolean isShutdown() + { + return shutdown; } @Override diff --git a/jetty-client/src/main/java/org/eclipse/jetty/client/util/DigestAuthentication.java b/jetty-client/src/main/java/org/eclipse/jetty/client/util/DigestAuthentication.java index ab8916a4cc6..83e098f6327 100644 --- a/jetty-client/src/main/java/org/eclipse/jetty/client/util/DigestAuthentication.java +++ b/jetty-client/src/main/java/org/eclipse/jetty/client/util/DigestAuthentication.java @@ -99,7 +99,10 @@ public class DigestAuthentication extends AbstractAuthentication clientQOP = "auth-int"; } - return new DigestResult(headerInfo.getHeader(), response.getContent(), getRealm(), user, password, algorithm, nonce, clientQOP, opaque); + String realm = getRealm(); + if (ANY_REALM.equals(realm)) + realm = headerInfo.getRealm(); + return new DigestResult(headerInfo.getHeader(), response.getContent(), realm, user, password, algorithm, nonce, clientQOP, opaque); } private Map parseParameters(String wwwAuthenticate) diff --git a/jetty-client/src/test/java/org/eclipse/jetty/client/ClientConnectionCloseTest.java b/jetty-client/src/test/java/org/eclipse/jetty/client/ClientConnectionCloseTest.java index ff7eb33b8c3..c3bb9dd0968 100644 --- a/jetty-client/src/test/java/org/eclipse/jetty/client/ClientConnectionCloseTest.java +++ b/jetty-client/src/test/java/org/eclipse/jetty/client/ClientConnectionCloseTest.java @@ -19,26 +19,26 @@ package org.eclipse.jetty.client; import java.io.IOException; +import java.io.InterruptedIOException; import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; -import java.util.concurrent.atomic.AtomicReference; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; import javax.servlet.ServletException; import javax.servlet.ServletInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import org.eclipse.jetty.client.api.ContentProvider; import org.eclipse.jetty.client.api.ContentResponse; +import org.eclipse.jetty.client.http.HttpConnectionOverHTTP; +import org.eclipse.jetty.client.http.HttpDestinationOverHTTP; import org.eclipse.jetty.client.util.DeferredContentProvider; import org.eclipse.jetty.client.util.StringContentProvider; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpHeaderValue; import org.eclipse.jetty.http.HttpStatus; -import org.eclipse.jetty.io.EndPoint; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.handler.AbstractHandler; -import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.util.ssl.SslContextFactory; import org.junit.Assert; import org.junit.Test; @@ -51,43 +51,16 @@ public class ClientConnectionCloseTest extends AbstractHttpClientServerTest } @Test - public void testClientConnectionCloseShutdownOutputWithoutRequestContent() throws Exception + public void test_ClientConnectionClose_ServerConnectionClose_ClientClosesAfterExchange() throws Exception { - testClientConnectionCloseShutdownOutput(null); - } - - @Test - public void testClientConnectionCloseShutdownOutputWithRequestContent() throws Exception - { - testClientConnectionCloseShutdownOutput(new StringContentProvider("data", StandardCharsets.UTF_8)); - } - - @Test - public void testClientConnectionCloseShutdownOutputWithChunkedRequestContent() throws Exception - { - DeferredContentProvider content = new DeferredContentProvider() - { - @Override - public long getLength() - { - return -1; - } - }; - content.offer(ByteBuffer.wrap("data".getBytes(StandardCharsets.UTF_8))); - content.close(); - testClientConnectionCloseShutdownOutput(content); - } - - private void testClientConnectionCloseShutdownOutput(ContentProvider content) throws Exception - { - AtomicReference ref = new AtomicReference<>(); + byte[] data = new byte[128 * 1024]; start(new AbstractHandler() { @Override public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { baseRequest.setHandled(true); - ref.set(baseRequest.getHttpChannel().getEndPoint()); + ServletInputStream input = request.getInputStream(); while (true) { @@ -95,28 +68,190 @@ public class ClientConnectionCloseTest extends AbstractHttpClientServerTest if (read < 0) break; } - response.setStatus(HttpStatus.OK_200); + + response.setContentLength(data.length); + response.getOutputStream().write(data); + + try + { + // Delay the server from sending the TCP FIN. + Thread.sleep(1000); + } + catch (InterruptedException x) + { + throw new InterruptedIOException(); + } } }); - ContentResponse response = client.newRequest("localhost", connector.getLocalPort()) + String host = "localhost"; + int port = connector.getLocalPort(); + + HttpDestinationOverHTTP destination = (HttpDestinationOverHTTP)client.getDestination(scheme, host, port); + DuplexConnectionPool connectionPool = (DuplexConnectionPool)destination.getConnectionPool(); + + ContentResponse response = client.newRequest(host, port) .scheme(scheme) - .path("/ctx/path") .header(HttpHeader.CONNECTION, HttpHeaderValue.CLOSE.asString()) - .content(content) + .content(new StringContentProvider("0")) + .onRequestSuccess(request -> + { + HttpConnectionOverHTTP connection = (HttpConnectionOverHTTP)connectionPool.getActiveConnections().iterator().next(); + Assert.assertFalse(connection.getEndPoint().isOutputShutdown()); + }) .send(); Assert.assertEquals(HttpStatus.OK_200, response.getStatus()); + Assert.assertArrayEquals(data, response.getContent()); + Assert.assertEquals(0, connectionPool.getConnectionCount()); + } - // Wait for the FIN to arrive to the server - Thread.sleep(1000); + @Test + public void test_ClientConnectionClose_ServerDoesNotRespond_ClientIdleTimeout() throws Exception + { + start(new AbstractHandler() + { + @Override + public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + { + baseRequest.setHandled(true); + request.startAsync(); + // Do not respond. + } + }); - // Do not read from the server because it will trigger - // the send of the TLS Close Message before the response. + String host = "localhost"; + int port = connector.getLocalPort(); - EndPoint serverEndPoint = ref.get(); - ByteBuffer buffer = BufferUtil.allocate(1); - int read = serverEndPoint.fill(buffer); - Assert.assertEquals(-1, read); + HttpDestinationOverHTTP destination = (HttpDestinationOverHTTP)client.getDestination(scheme, host, port); + DuplexConnectionPool connectionPool = (DuplexConnectionPool)destination.getConnectionPool(); + + CountDownLatch resultLatch = new CountDownLatch(1); + long idleTimeout = 1000; + client.newRequest(host, port) + .scheme(scheme) + .header(HttpHeader.CONNECTION, HttpHeaderValue.CLOSE.asString()) + .idleTimeout(idleTimeout, TimeUnit.MILLISECONDS) + .onRequestSuccess(request -> + { + HttpConnectionOverHTTP connection = (HttpConnectionOverHTTP)connectionPool.getActiveConnections().iterator().next(); + Assert.assertFalse(connection.getEndPoint().isOutputShutdown()); + }) + .send(result -> + { + if (result.isFailed()) + resultLatch.countDown(); + }); + + Assert.assertTrue(resultLatch.await(2 * idleTimeout, TimeUnit.MILLISECONDS)); + Assert.assertEquals(0, connectionPool.getConnectionCount()); + } + + @Test + public void test_ClientConnectionClose_ServerPartialResponse_ClientIdleTimeout() throws Exception + { + long idleTimeout = 1000; + start(new AbstractHandler() + { + @Override + public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + { + baseRequest.setHandled(true); + + ServletInputStream input = request.getInputStream(); + while (true) + { + int read = input.read(); + if (read < 0) + break; + } + + response.getOutputStream().print("Hello"); + response.flushBuffer(); + + try + { + Thread.sleep(2 * idleTimeout); + } + catch (InterruptedException x) + { + throw new InterruptedIOException(); + } + } + }); + + String host = "localhost"; + int port = connector.getLocalPort(); + + HttpDestinationOverHTTP destination = (HttpDestinationOverHTTP)client.getDestination(scheme, host, port); + DuplexConnectionPool connectionPool = (DuplexConnectionPool)destination.getConnectionPool(); + + DeferredContentProvider content = new DeferredContentProvider(ByteBuffer.allocate(8)); + CountDownLatch resultLatch = new CountDownLatch(1); + client.newRequest(host, port) + .scheme(scheme) + .header(HttpHeader.CONNECTION, HttpHeaderValue.CLOSE.asString()) + .content(content) + .idleTimeout(idleTimeout, TimeUnit.MILLISECONDS) + .onRequestSuccess(request -> + { + HttpConnectionOverHTTP connection = (HttpConnectionOverHTTP)connectionPool.getActiveConnections().iterator().next(); + Assert.assertFalse(connection.getEndPoint().isOutputShutdown()); + }) + .send(result -> + { + if (result.isFailed()) + resultLatch.countDown(); + }); + content.offer(ByteBuffer.allocate(8)); + content.close(); + + Assert.assertTrue(resultLatch.await(2 * idleTimeout, TimeUnit.MILLISECONDS)); + Assert.assertEquals(0, connectionPool.getConnectionCount()); + } + + @Test + public void test_ClientConnectionClose_ServerNoConnectionClose_ClientCloses() throws Exception + { + start(new AbstractHandler() + { + @Override + public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + { + baseRequest.setHandled(true); + response.setContentLength(0); + response.flushBuffer(); + + try + { + // Delay the server from sending the TCP FIN. + Thread.sleep(1000); + } + catch (InterruptedException x) + { + throw new InterruptedIOException(); + } + } + }); + + String host = "localhost"; + int port = connector.getLocalPort(); + + HttpDestinationOverHTTP destination = (HttpDestinationOverHTTP)client.getDestination(scheme, host, port); + DuplexConnectionPool connectionPool = (DuplexConnectionPool)destination.getConnectionPool(); + + ContentResponse response = client.newRequest(host, port) + .scheme(scheme) + .header(HttpHeader.CONNECTION, HttpHeaderValue.CLOSE.asString()) + .onRequestSuccess(request -> + { + HttpConnectionOverHTTP connection = (HttpConnectionOverHTTP)connectionPool.getActiveConnections().iterator().next(); + Assert.assertFalse(connection.getEndPoint().isOutputShutdown()); + }) + .onResponseHeaders(r -> r.getHeaders().remove(HttpHeader.CONNECTION)) + .send(); + + Assert.assertEquals(HttpStatus.OK_200, response.getStatus()); + Assert.assertEquals(0, connectionPool.getConnectionCount()); } } diff --git a/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientAuthenticationTest.java b/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientAuthenticationTest.java index a44a035f2bb..01820b32b04 100644 --- a/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientAuthenticationTest.java +++ b/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientAuthenticationTest.java @@ -135,6 +135,14 @@ public class HttpClientAuthenticationTest extends AbstractHttpClientServerTest test_Authentication(new DigestAuthentication(uri, realm, "digest", "digest")); } + @Test + public void test_DigestAnyRealm() throws Exception + { + startDigest(new EmptyServerHandler()); + URI uri = URI.create(scheme + "://localhost:" + connector.getLocalPort()); + test_Authentication(new DigestAuthentication(uri, Authentication.ANY_REALM, "digest", "digest")); + } + private void test_Authentication(Authentication authentication) throws Exception { AuthenticationStore authenticationStore = client.getAuthenticationStore(); diff --git a/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientTest.java b/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientTest.java index f55802177e8..b211bc0726e 100644 --- a/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientTest.java +++ b/jetty-client/src/test/java/org/eclipse/jetty/client/HttpClientTest.java @@ -18,6 +18,8 @@ package org.eclipse.jetty.client; +import static org.junit.Assert.assertThat; + import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -71,6 +73,7 @@ import org.eclipse.jetty.client.util.BytesContentProvider; import org.eclipse.jetty.client.util.DeferredContentProvider; import org.eclipse.jetty.client.util.FutureResponseListener; import org.eclipse.jetty.client.util.StringContentProvider; +import org.eclipse.jetty.http.BadMessageException; import org.eclipse.jetty.http.HttpField; import org.eclipse.jetty.http.HttpHeader; import org.eclipse.jetty.http.HttpHeaderValue; @@ -1289,13 +1292,29 @@ public class HttpClientTest extends AbstractHttpClientServerTest @Test public void testSmallContentDelimitedByEOFWithSlowRequestHTTP10() throws Exception { - testContentDelimitedByEOFWithSlowRequest(HttpVersion.HTTP_1_0, 1024); + try + { + testContentDelimitedByEOFWithSlowRequest(HttpVersion.HTTP_1_0, 1024); + } + catch(ExecutionException e) + { + assertThat(e.getCause(), Matchers.instanceOf(BadMessageException.class)); + assertThat(e.getCause().getMessage(), Matchers.containsString("Unknown content")); + } } @Test public void testBigContentDelimitedByEOFWithSlowRequestHTTP10() throws Exception { - testContentDelimitedByEOFWithSlowRequest(HttpVersion.HTTP_1_0, 128 * 1024); + try + { + testContentDelimitedByEOFWithSlowRequest(HttpVersion.HTTP_1_0, 128 * 1024); + } + catch(ExecutionException e) + { + assertThat(e.getCause(), Matchers.instanceOf(BadMessageException.class)); + assertThat(e.getCause().getMessage(), Matchers.containsString("Unknown content")); + } } @Test @@ -1563,8 +1582,7 @@ public class HttpClientTest extends AbstractHttpClientServerTest } @Test - public void testCopyRequest() - throws Exception + public void testCopyRequest() throws Exception { startClient(); @@ -1611,6 +1629,28 @@ public class HttpClientTest extends AbstractHttpClientServerTest .header("X-Custom-Header-2", "value")); } + @Test + public void testHostWithHTTP10() throws Exception + { + start(new AbstractHandler() + { + @Override + public void handle(String target, org.eclipse.jetty.server.Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + { + baseRequest.setHandled(true); + Assert.assertThat(request.getHeader("Host"), Matchers.notNullValue()); + } + }); + + ContentResponse response = client.newRequest("localhost", connector.getLocalPort()) + .scheme(scheme) + .version(HttpVersion.HTTP_1_0) + .timeout(5, TimeUnit.SECONDS) + .send(); + + Assert.assertEquals(200, response.getStatus()); + } + private void assertCopyRequest(Request original) { Request copy = client.copyRequest((HttpRequest) original, original.getURI()); diff --git a/jetty-client/src/test/java/org/eclipse/jetty/client/http/HttpSenderOverHTTPTest.java b/jetty-client/src/test/java/org/eclipse/jetty/client/http/HttpSenderOverHTTPTest.java index 301867fa748..d3c12183bca 100644 --- a/jetty-client/src/test/java/org/eclipse/jetty/client/http/HttpSenderOverHTTPTest.java +++ b/jetty-client/src/test/java/org/eclipse/jetty/client/http/HttpSenderOverHTTPTest.java @@ -36,6 +36,7 @@ import org.eclipse.jetty.io.ByteArrayEndPoint; import org.eclipse.jetty.toolchain.test.TestTracker; import org.eclipse.jetty.toolchain.test.annotation.Slow; import org.eclipse.jetty.util.Promise; +import org.hamcrest.Matchers; import org.junit.After; import org.junit.Assert; import org.junit.Before; @@ -258,7 +259,7 @@ public class HttpSenderOverHTTPTest String requestString = endPoint.takeOutputString(); Assert.assertTrue(requestString.startsWith("GET ")); - Assert.assertTrue(requestString.endsWith("\r\n\r\n" + content1 + content2)); + Assert.assertThat(requestString,Matchers.endsWith("\r\n\r\n" + content1 + content2)); Assert.assertTrue(headersLatch.await(5, TimeUnit.SECONDS)); Assert.assertTrue(successLatch.await(5, TimeUnit.SECONDS)); } diff --git a/jetty-client/src/test/java/org/eclipse/jetty/client/util/TypedContentProviderTest.java b/jetty-client/src/test/java/org/eclipse/jetty/client/util/TypedContentProviderTest.java index 62781ccad4e..7d8b80232a4 100644 --- a/jetty-client/src/test/java/org/eclipse/jetty/client/util/TypedContentProviderTest.java +++ b/jetty-client/src/test/java/org/eclipse/jetty/client/util/TypedContentProviderTest.java @@ -127,7 +127,7 @@ public class TypedContentProviderTest extends AbstractHttpClientServerTest { baseRequest.setHandled(true); Assert.assertEquals("GET", request.getMethod()); - Assert.assertNull(request.getContentType()); + Assert.assertNotNull(request.getContentType()); Assert.assertEquals(content, IO.toString(request.getInputStream())); } }); diff --git a/jetty-client/src/test/resources/jetty-logging.properties b/jetty-client/src/test/resources/jetty-logging.properties index 5f8794e83fa..a2296dfdf69 100644 --- a/jetty-client/src/test/resources/jetty-logging.properties +++ b/jetty-client/src/test/resources/jetty-logging.properties @@ -1,4 +1,5 @@ org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog #org.eclipse.jetty.LEVEL=DEBUG #org.eclipse.jetty.client.LEVEL=DEBUG -#org.eclipse.jetty.io.ChannelEndPoint.LEVEL=DEBUG \ No newline at end of file +#org.eclipse.jetty.io.ChannelEndPoint.LEVEL=DEBUG +#org.eclipse.jetty.http.LEVEL=DEBUG diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-logging-modules.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-logging-modules.adoc index f2a59ff228e..6462653a4f6 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/configuring-logging-modules.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/configuring-logging-modules.adoc @@ -27,9 +27,11 @@ Enabling these frameworks in the Jetty distribution is as easy as activating any [source, screen, subs="{sub-order}"] .... [my-base]$ java -jar ../start.jar --add-to-start=logging-jetty -INFO : logging-jetty initialized in ${jetty.base}/start.d/logging-jetty.ini -INFO : resources transitive -INFO : Base directory was modified +INFO : logging-jetty initialized in ${jetty.base}/start.d/logging-jetty.ini +INFO : resources transitively enabled +MKDIR : ${jetty.base}/resources +COPY : ${jetty.home}/modules/logging-jetty/resources/jetty-logging.properties to ${jetty.base}/resources/jetty-logging.properties +INFO : Base directory was modified .... As noted above, Jetty supports a wide array of logging technologies. @@ -78,7 +80,6 @@ Most other top level logging modules work in the same way: `logging-jcl`, `loggi Jetty uses the SLF4J api as a binding to provide logging information to additional frameworks such as Log4j or Logback. It can also be used on it's own to provide simple server logging. To enable the SLF4J framework, you need to activate the `logging-slf4j` module. -By default, log files will be stored in `${jetty.base}/logs`. [source, screen, subs="{sub-order}"] .... @@ -115,9 +116,9 @@ Proceed (y/N)? y INFO : slf4j-api transitively enabled INFO : logging-slf4j initialized in ${jetty.base}/start.d/logging-slf4j.ini MKDIR : ${jetty.base}/lib/slf4j -DOWNLOAD: http://central.maven.org/maven2/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar to ${jetty.base}/lib/slf4j/slf4j-api-1.7.21.jar +DOWNLD: http://central.maven.org/maven2/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar to ${jetty.base}/lib/slf4j/slf4j-api-1.7.21.jar INFO : Base directory was modified -ERROR : Module logging-slf4j requires a `slf4j-impl` module from one of [slf4j-simple-impl, slf4j-logback, slf4j-jul, slf4j-jcl, slf4j-log4j2, slf4j-log4j] +ERROR : Module logging-slf4j requires a module providing slf4j-impl from one of [slf4j-simple-impl, slf4j-logback, slf4j-jul, slf4j-log4j2, slf4j-log4j] ERROR : Unsatisfied module dependencies: logging-slf4j @@ -134,10 +135,9 @@ To enable the simple SLF4J implementation, we will also need to activate the `sl [my-base]$ java -jar ../start.jar --add-to-start=slf4j-simple-impl INFO : slf4j-simple-impl initialized in ${jetty.base}/start.d/slf4j-simple-impl.ini INFO : resources transitively enabled -DOWNLOAD: http://central.maven.org/maven2/org/slf4j/slf4j-simple/1.7.21/slf4j-simple-1.7.21.jar to ${jetty.base}/lib/slf4j/slf4j-simple-1.7.21.jar +DOWNLD: http://central.maven.org/maven2/org/slf4j/slf4j-simple/1.7.21/slf4j-simple-1.7.21.jar to ${jetty.base}/lib/slf4j/slf4j-simple-1.7.21.jar MKDIR : ${jetty.base}/resources -COPY : ${jetty.home}/modules/slf4j/simplelogger.properties to ${jetty.base}/resources/simplelogger.properties -MKDIR : ${jetty.base}/logs +COPY : ${jetty.home}/modules/slf4j-simple-impl/resources/simplelogger.properties to ${jetty.base}/resources/simplelogger.properties INFO : Base directory was modified [my-base]$ tree @@ -146,7 +146,6 @@ INFO : Base directory was modified │   └── slf4j │   ├── slf4j-api-1.7.21.jar │   └── slf4j-simple-1.7.21.jar -├── logs ├── resources │   └── simplelogger.properties └── start.d @@ -154,13 +153,15 @@ INFO : Base directory was modified └── slf4j-simple-impl.ini .... +Jetty is now configured to log using the SLF4J framework. +A standard SLF4J properties file is located in `${jetty.base}/resources/simplelogger.properties`. + [[example-logging-log4j]] ==== Logging with Log4j and Log4j2 It is possible to have the Jetty Server logging configured so that Log4j or Log4j2 controls the output of logging events produced by Jetty. This is accomplished by configuring Jetty for logging to http://logging.apache.org/log4j/[Apache Log4j] via http://slf4j.org/manual.html[Slf4j] and the http://slf4j.org/manual.html#swapping[Slf4j binding layer for Log4j]. Implementation of Log4j can be done by enabling the `logging-log4j` module. -By default, log files will be stored in `${jetty.base}/logs`. [source, screen, subs="{sub-order}"] .... @@ -204,13 +205,12 @@ INFO : resources transitively enabled INFO : slf4j-log4j transitively enabled INFO : logging-log4j initialized in ${jetty.base}/start.d/logging-log4j.ini MKDIR : ${jetty.base}/lib/slf4j -DOWNLOAD: http://central.maven.org/maven2/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar to ${jetty.base}/lib/slf4j/slf4j-api-1.7.21.jar -MKDIR : ${jetty.base}/resources -COPY : ${jetty.home}/modules/log4j/log4j.properties to ${jetty.base}/resources/log4j.properties +DOWNLD: http://central.maven.org/maven2/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar to ${jetty.base}/lib/slf4j/slf4j-api-1.7.21.jar MKDIR : ${jetty.base}/lib/log4j -DOWNLOAD: http://central.maven.org/maven2/log4j/log4j/1.2.17/log4j-1.2.17.jar to ${jetty.base}/lib/log4j/log4j-1.2.17.jar -MKDIR : ${jetty.base}/logs -DOWNLOAD: http://central.maven.org/maven2/org/slf4j/slf4j-log4j12/1.7.21/slf4j-log4j12-1.7.21.jar to ${jetty.base}/lib/slf4j/slf4j-log4j12-1.7.21.jar +COPY : /Users/chris/.m2/repository/log4j/log4j/1.2.17/log4j-1.2.17.jar to ${jetty.base}/lib/log4j/log4j-1.2.17.jar +MKDIR : ${jetty.base}/resources +COPY : ${jetty.home}/modules/log4j-impl/resources/log4j.xml to ${jetty.base}/resources/log4j.xml +DOWNLD: http://central.maven.org/maven2/org/slf4j/slf4j-log4j12/1.7.21/slf4j-log4j12-1.7.21.jar to ${jetty.base}/lib/slf4j/slf4j-log4j12-1.7.21.jar INFO : Base directory was modified [my-base]$ tree @@ -221,19 +221,20 @@ INFO : Base directory was modified │   └── slf4j │   ├── slf4j-api-1.7.21.jar │   └── slf4j-log4j12-1.7.21.jar -├── logs ├── resources -│   └── log4j.properties +│   └── log4j.xml └── start.d └── logging-log4j.ini .... -Or, to enable Log4j2, simply enable the `logging-log4j2` module. -By default, log files will be stored in `${jetty.base}/logs`. +Jetty is now configured to log using the Log4j framework. +A standard Log4j configuration file is located in `${jetty.base}/resources/log4j.xml`. + +Or, to set up Log4j2, enable the `logging-log4j2` module. [source, screen, subs="{sub-order}"] .... -[my-base]$ java -jar ../start.jar --add-to-start=logging-log4j2 +[my-base]$ java -jar ../start.jar --add-to-start=logging-log4j2 ALERT: There are enabled module(s) with licenses. The following 2 module(s): @@ -274,34 +275,32 @@ INFO : resources transitively enabled INFO : slf4j-log4j2 transitively enabled INFO : log4j2-impl transitively enabled MKDIR : ${jetty.base}/lib/slf4j -DOWNLOAD: http://central.maven.org/maven2/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar to ${jetty.base}/lib/slf4j/slf4j-api-1.7.21.jar -MKDIR : ${jetty.base}/lib/log4j -DOWNLOAD: http://central.maven.org/maven2/org/apache/logging/log4j/log4j-api/2.6.1/log4j-api-2.6.1.jar to ${jetty.base}/lib/log4j/log4j-api-2.6.1.jar -MKDIR : ${jetty.base}/resources -DOWNLOAD: http://central.maven.org/maven2/org/apache/logging/log4j/log4j-slf4j-impl/2.6.1/log4j-slf4j-impl-2.6.1.jar to ${jetty.base}/lib/log4j/log4j-slf4j-impl-2.6.1.jar +DOWNLD: http://central.maven.org/maven2/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar to ${jetty.base}/lib/slf4j/slf4j-api-1.7.21.jar MKDIR : ${jetty.base}/lib/log4j2 -DOWNLOAD: http://central.maven.org/maven2/org/apache/logging/log4j/log4j-core/2.6.1/log4j-core-2.6.1.jar to ${jetty.base}/lib/log4j2/log4j-core-2.6.1.jar -COPY : ${jetty.home}/modules/log4j2/log4j2.xml to ${jetty.base}/resources/log4j2.xml -MKDIR : ${jetty.base}/logs +DOWNLD: http://central.maven.org/maven2/org/apache/logging/log4j/log4j-api/2.6.1/log4j-api-2.6.1.jar to ${jetty.base}/lib/log4j2/log4j-api-2.6.1.jar +MKDIR : ${jetty.base}/resources +DOWNLD: http://central.maven.org/maven2/org/apache/logging/log4j/log4j-slf4j-impl/2.6.1/log4j-slf4j-impl-2.6.1.jar to ${jetty.base}/lib/log4j2/log4j-slf4j-impl-2.6.1.jar +DOWNLD: http://central.maven.org/maven2/org/apache/logging/log4j/log4j-core/2.6.1/log4j-core-2.6.1.jar to ${jetty.base}/lib/log4j2/log4j-core-2.6.1.jar +COPY : ${jetty.home}/modules/log4j2-impl/resources/log4j2.xml to ${jetty.base}/resources/log4j2.xml INFO : Base directory was modified [my-base]$ tree . ├── lib -│   ├── log4j -│   │   ├── log4j-api-2.6.1.jar -│   │   └── log4j-slf4j-impl-2.6.1.jar │   ├── log4j2 -│   │   └── log4j-core-2.6.1.jar +│   │   ├── log4j-api-2.6.1.jar +│   │   ├── log4j-core-2.6.1.jar +│   │   └── log4j-slf4j-impl-2.6.1.jar │   └── slf4j │   └── slf4j-api-1.7.21.jar -├── logs ├── resources │   └── log4j2.xml └── start.d └── logging-log4j2.ini .... +At this point Jetty is configured so that the Jetty server itself will log using Log4j2, using the Log4j2 configuration found in `{$jetty.base}/resources/log4j2.xml`. + [[example-logging-logback]] ==== Logging with Logback @@ -309,7 +308,6 @@ It is possible to have the Jetty Server logging configured so that Logback contr This is accomplished by configuring Jetty for logging to `Logback`, which uses http://slf4j.org/manual.html[Slf4j] and the http://logback.qos.ch/[Logback Implementation for Slf4j]. To set up Jetty logging via Logback, enable the `logging-logback` module. -By default, log files will be stored in `${jetty.base}/logs`. [source, screen, subs="{sub-order}"] .... @@ -362,13 +360,12 @@ INFO : slf4j-logback transitively enabled INFO : logging-logback initialized in ${jetty.base}/start.d/logging-logback.ini INFO : resources transitively enabled MKDIR : ${jetty.base}/lib/slf4j -DOWNLOAD: http://central.maven.org/maven2/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar to ${jetty.base}/lib/slf4j/slf4j-api-1.7.21.jar +DOWNLD: http://central.maven.org/maven2/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar to ${jetty.base}/lib/slf4j/slf4j-api-1.7.21.jar MKDIR : ${jetty.base}/lib/logback -DOWNLOAD: http://central.maven.org/maven2/ch/qos/logback/logback-core/1.1.7/logback-core-1.1.7.jar to ${jetty.base}/lib/logback/logback-core-1.1.7.jar +DOWNLD: http://central.maven.org/maven2/ch/qos/logback/logback-core/1.1.7/logback-core-1.1.7.jar to ${jetty.base}/lib/logback/logback-core-1.1.7.jar MKDIR : ${jetty.base}/resources -COPY : ${jetty.home}/modules/logback/logback.xml to ${jetty.base}/resources/logback.xml -MKDIR : ${jetty.base}/logs -DOWNLOAD: http://central.maven.org/maven2/ch/qos/logback/logback-classic/1.1.7/logback-classic-1.1.7.jar to ${jetty.base}/lib/logback/logback-classic-1.1.7.jar +COPY : ${jetty.home}/modules/logback-impl/resources/logback.xml to ${jetty.base}/resources/logback.xml +DOWNLD: http://central.maven.org/maven2/ch/qos/logback/logback-classic/1.1.7/logback-classic-1.1.7.jar to ${jetty.base}/lib/logback/logback-classic-1.1.7.jar INFO : Base directory was modified [my-base]$ tree @@ -379,7 +376,6 @@ INFO : Base directory was modified │   │   └── logback-core-1.1.7.jar │   └── slf4j │   └── slf4j-api-1.7.21.jar -├── logs ├── resources │   └── logback.xml └── start.d @@ -387,7 +383,6 @@ INFO : Base directory was modified .... At this point Jetty is configured so that the Jetty server itself will log using Logback, using the Logback configuration found in `{$jetty.base}/resources/logback.xml`. -Log files will be stored in `${jetty.base}/logs`. ==== Logging with Java Util Logging @@ -395,8 +390,7 @@ Log files will be stored in `${jetty.base}/logs`. ===== Java Util Logging with SLF4J It is possible to have the Jetty Server logging configured so that `java.util.logging` controls the output of logging events produced by Jetty. -This example demonstrates how to configuring Jetty for logging to `java.util.logging` via http://slf4j.org/manual.html[Slf4j] and the http://slf4j.org/manual.html#swapping[Slf4j binding layer for java.util.logging]. -By default, log files will be stored in `${jetty.base}/logs`. +This example demonstrates how to configuring Jetty for logging to `java.util.logging` via http://slf4j.org/manual.html[SLF4J] as a binding layer. [source, screen, subs="{sub-order}"] .... @@ -436,12 +430,10 @@ INFO : slf4j-jul transitively enabled INFO : logging-jul initialized in ${jetty.base}/start.d/logging-jul.ini INFO : resources transitively enabled MKDIR : ${jetty.base}/etc -COPY : ${jetty.home}/modules/jul-impl/java-util-logging.properties to ${jetty.base}/etc/java-util-logging.properties -MKDIR : ${jetty.base}/logs +COPY : ${jetty.home}/modules/jul-impl/etc/java-util-logging.properties to ${jetty.base}/etc/java-util-logging.properties MKDIR : ${jetty.base}/lib/slf4j -DOWNLOAD: http://central.maven.org/maven2/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar to ${jetty.base}/lib/slf4j/slf4j-api-1.7.21.jar -DOWNLOAD: http://central.maven.org/maven2/org/slf4j/slf4j-jdk14/1.7.21/slf4j-jdk14-1.7.21.jar to ${jetty.base}/lib/slf4j/slf4j-jdk14-1.7.21.jar -MKDIR : ${jetty.base}/resources +DOWNLD: http://central.maven.org/maven2/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar to ${jetty.base}/lib/slf4j/slf4j-api-1.7.21.jar +DOWNLD: http://central.maven.org/maven2/org/slf4j/slf4j-jdk14/1.7.21/slf4j-jdk14-1.7.21.jar to ${jetty.base}/lib/slf4j/slf4j-jdk14-1.7.21.jar INFO : Base directory was modified [my-base]$ tree @@ -452,76 +444,49 @@ INFO : Base directory was modified │   └── slf4j │   ├── slf4j-api-1.7.21.jar │   └── slf4j-jdk14-1.7.21.jar -├── logs -├── resources └── start.d └── logging-jul.ini .... -[[example-logging-java-commons-logging]] -==== Logging with Java Commons Logging -Jetty provides support of the Java Commons Logging (jcl) through the `logging-jcl` module, using Slf4j as a binding. -This is enabled by activating the `logging-jcl` module. -By default, log files will be stored in `${jetty.base}/logs`. +Jetty is now configured to log using the JUL framework. +A standard JUL properties file is located in `${jetty.base}/etc/java-util-logging.properties`. + +==== Capturing Console Output + +By default, enabling the above modules will output log information to the console. +Included in the distribution is the `console-capture` module, which can be used in lieu of additional configuration to the selected logging module to capture this output to a `logs` directory in your `${jetty.base}`. +To enable this functionality, activate the `console-capture` module. [source, screen, subs="{sub-order}"] .... -[my-base]$ java -jar ../start.jar --add-to-start=logging-jcl - -ALERT: There are enabled module(s) with licenses. -The following 2 module(s): - + contains software not provided by the Eclipse Foundation! - + contains software not covered by the Eclipse Public License! - + has not been audited for compliance with its license - - Module: jcl-impl - + Log4j is released under the Apache 2.0 license. - + http://www.apache.org/licenses/LICENSE-2.0.html - - Module: slf4j-api - + SLF4J is distributed under the MIT License. - + Copyright (c) 2004-2013 QOS.ch - + All rights reserved. - + Permission is hereby granted, free of charge, to any person obtaining - + a copy of this software and associated documentation files (the - + "Software"), to deal in the Software without restriction, including - + without limitation the rights to use, copy, modify, merge, publish, - + distribute, sublicense, and/or sell copies of the Software, and to - + permit persons to whom the Software is furnished to do so, subject to - + the following conditions: - + The above copyright notice and this permission notice shall be - + included in all copies or substantial portions of the Software. - + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, - + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF - + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND - + NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE - + LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION - + OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION - + WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Proceed (y/N)? y -INFO : slf4j-api transitively enabled -INFO : jcl-impl transitively enabled -INFO : resources transitively enabled -INFO : slf4j-jcl transitively enabled -INFO : logging-jcl initialized in ${jetty.base}/start.d/logging-jcl.ini -DOWNLOAD: http://central.maven.org/maven2/org/slf4j/slf4j-api/1.7.21/slf4j-api-1.7.21.jar to ${jetty.base}/lib/slf4j/slf4j-api-1.7.21.jar -DOWNLOAD: http://central.maven.org/maven2/commons-logging/commons-logging/1.1.3/commons-logging-1.1.3.jar to ${jetty.base}/lib/jcl/commons-logging-1.1.3.jar -MKDIR: ${jetty.base}/logs -DOWNLOAD: http://central.maven.org/maven2/org/slf4j/slf4j-jcl/1.7.21/slf4j-jcl-1.7.21.jar to ${jetty.base}/lib/slf4j/slf4j-jcl-1.7.21.jar -INFO : Base directory was modified +[my-base]$ java -jar ../start.jar --add-to-start=console-capture +INFO : console-capture initialized in ${jetty.base}/start.d/console-capture.ini +MKDIR : ${jetty.base}/logs +INFO : Base directory was modified [my-base]$ tree . -├── lib -│   ├── jcl -│   │   └── commons-logging-1.1.3.jar -│   └── slf4j -│   ├── slf4j-api-1.7.21.jar -│   └── slf4j-jcl-1.7.21.jar ├── logs -├── resources -│   └── commons-logging.properties └── start.d - └── logging-jcl.ini + └── console-capture.ini +.... + +As an example, here is the output from Logback before using the `console-capture` module: + +[source, screen, subs="{sub-order}"] +.... +[my-base]$ java -jar ../start.jar +419 [main] INFO org.eclipse.jetty.util.log - Logging initialized @508ms to org.eclipse.jetty.util.log.Slf4jLog +540 [main] INFO org.eclipse.jetty.server.Server - jetty-9.4.0-SNAPSHOT +575 [main] INFO o.e.jetty.server.AbstractConnector - Started ServerConnector@3c0ecd4b{HTTP/1.1,[http/1.1]}{0.0.0.0:8080} +575 [main] INFO org.eclipse.jetty.server.Server - Started @668ms +.... + +After enabling `console-capture`, the output is as follows, which displays the location the log is being saved to: + +[source, screen, subs="{sub-order}"] +.... +[my-base]$ java -jar ../start.jar +151 [main] INFO org.eclipse.jetty.util.log - Logging initialized @238ms to org.eclipse.jetty.util.log.Slf4jLog +196 [main] INFO org.eclipse.jetty.util.log - Console stderr/stdout captured to /installs/jetty-distribution/mybase/logs/2016_10_21.jetty.log .... diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc index a5af4795221..a750f94a66c 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/default-logging-with-stderrlog.adoc @@ -23,21 +23,39 @@ If you do nothing to configure a separate logging framework, Jetty will default to using an internal `org.eclipse.jetty.util.log.StdErrLog` implementation. This will output all logging events to STDERR (aka `System.err`). -Simply use Jetty and `StdErrLog` based logging is output to the console. +Simply use Jetty and `StdErrLog`-based logging is output to the console. -Included in the Jetty distribution is a logging module that is capable of performing simple capturing of all STDOUT (`System.out`) and STDERR (`System.err`) output to a file that is rotated daily. +Included in the Jetty distribution is a logging module named `console-capture` that is capable of performing simple capturing of all STDOUT (`System.out`) and STDERR (`System.err`) output to a file that is rotated daily. -To enable on this feature via the command line: +To enable this feature, simply activate the `console-capture` module on the command line: + +[source, screen, subs="{sub-order}"] +.... +[my-base]$ java -jar ../start.jar --add-to-start=console-capture +INFO : console-capture initialized in ${jetty.base}/start.d/console-capture.ini +MKDIR : ${jetty.base}/logs +INFO : Base directory was modified + +[my-base]$ tree +. +├── logs +└── start.d + └── console-capture.ini +.... + +The default configuration for logging output will create a file `${jetty.base}/logs/yyyy_mm_dd.stderrout.log` which allows configuration of the output directory by setting the `jetty.logs` property. + +Just enabling the `console-capture` will simply output the values of STDERR and STDOUT to a log file. +To customize the log further, a module named `logging-jetty` is available to provides a default properties file to configure. +As with `console-capture`, you activate the `logging-jetty` on the command line. [source, screen, subs="{sub-order}"] .... [my-base]$ java -jar ../start.jar --add-to-start=logging-jetty INFO : logging-jetty initialized in ${jetty.base}/start.d/logging-jetty.ini -INFO : console-capture transitively enabled, ini template available with --add-to-start=console-capture INFO : resources transitively enabled MKDIR : ${jetty.base}/resources -COPY : ${jetty.home}/modules/logging-jetty/jetty-logging.properties to ${jetty.base}/resources/jetty-logging.properties -MKDIR : ${jetty.base}/logs +COPY : ${jetty.home}/modules/logging-jetty/resources/jetty-logging.properties to ${jetty.base}/resources/jetty-logging.properties INFO : Base directory was modified [my-base]$ tree @@ -46,26 +64,31 @@ INFO : Base directory was modified ├── resources │   └── jetty-logging.properties └── start.d + ├── console-capture.ini └── logging-jetty.ini .... -The default configuration for logging output will create a file `${jetty.base}/logs/yyyy_mm_dd.stderrout.log` which allows configuration of the output directory by setting the `jetty.logs` property. - -For more advanced logging configurations, please consider use of a separate logging library. - -The recommended way to configure `StdErrLog` is to create a `${jetty.base}/resources/jetty-logging.properties` file, specify the log implementation to `StdErrLog` and then setup logging levels. +Once activated, you can find the properties file at `${jetty.base}/resources/jetty-logging.properties`. +By default, the following parameters are defined. +To change them, un-comment the line and substitute your naming scheme and configuration choices. [source, properties, subs="{sub-order}"] .... -# Configure Jetty for StdErrLog Logging -org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StrErrLog -# Overall Logging Level is INFO -org.eclipse.jetty.LEVEL=INFO -# Detail Logging for WebSocket -org.eclipse.jetty.websocket.LEVEL=DEBUG +## Force jetty logging implementation +#org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog + +## Set logging levels from: ALL, DEBUG, INFO, WARN, OFF +#org.eclipse.jetty.LEVEL=INFO +#com.example.LEVEL=INFO + +## Hide stacks traces in logs? +#com.example.STACKS=false + +## Show the source file of a log location? +#com.example.SOURCE=false .... -There are a number of properties that can be defined in the configuration that will affect the behavior of `StdErrLog`. +There are a number of properties that can be defined in the configuration that will affect the behavior of StdErr logging with `console-capture`. `.LEVEL=`:: Sets the logging level for all loggers within the `name` specified to the level, which can be (in increasing order of restriction) `ALL`, `DEBUG`, `INFO`, `WARN`, `OFF`. @@ -95,22 +118,20 @@ There are a number of properties that can be defined in the configuration that w + [source, screen, subs="{sub-order}"] .... -2014-06-03 14:36:16.013:INFO:oejs.Server:main: jetty-9.2.0.v20140526 -2014-06-03 14:36:16.028:INFO:oejdp.ScanningAppProvider:main: Deployment monitor [file:/opt/jetty/demo-base/webapps/] at interval 1 -2014-06-03 14:36:16.051:INFO:oejsh.ContextHandler:main: Started o.e.j.s.h.MovedContextHandler@7d256e50{/oldContextPath,null,AVAILABLE} -2014-06-03 14:36:17.880:INFO:oejs.ServerConnector:main: Started ServerConnector@34f2d11a{HTTP/1.1}{0.0.0.0:8080} -2014-06-03 14:36:17.888:INFO:oejs.Server:main: Started @257ms +2016-10-21 15:31:01.248:INFO::main: Logging initialized @332ms to org.eclipse.jetty.util.log.StdErrLog +2016-10-21 15:31:01.370:INFO:oejs.Server:main: jetty-9.4.0-SNAPSHOT +2016-10-21 15:31:01.400:INFO:oejs.AbstractConnector:main: Started ServerConnector@2c330fbc{HTTP/1.1,[http/1.1]}{0.0.0.0:8080} +2016-10-21 15:31:01.400:INFO:oejs.Server:main: Started @485ms .... + * Example when set to true: + [source, screen, subs="{sub-order}"] .... -2014-06-03 14:38:19.019:INFO:org.eclipse.jetty.server.Server:main: jetty-9.2.0.v20140526 -2014-06-03 14:38:19.032:INFO:org.eclipse.jetty.deploy.providers.ScanningAppProvider:main: Deployment monitor [file:/opt/jetty/demo-base/webapps/] at interval 1 -2014-06-03 14:38:19.054:INFO:org.eclipse.jetty.server.handler.ContextHandler:main: Started o.e.j.s.h.MovedContextHandler@246d8660{/oldContextPath,null,AVAILABLE} -2014-06-03 14:38:20.715:INFO:org.eclipse.jetty.server.ServerConnector:main: Started ServerConnector@59f625be{HTTP/1.1}{0.0.0.0:8080} -2014-06-03 14:38:20.723:INFO:org.eclipse.jetty.server.Server:main: Started @243ms +2016-10-21 15:31:35.020:INFO::main: Logging initialized @340ms to org.eclipse.jetty.util.log.StdErrLog +2016-10-21 15:31:35.144:INFO:org.eclipse.jetty.server.Server:main: jetty-9.4.0-SNAPSHOT +2016-10-21 15:31:35.174:INFO:org.eclipse.jetty.server.AbstractConnector:main: Started ServerConnector@edf4efb{HTTP/1.1,[http/1.1]}{0.0.0.0:8080} +2016-10-21 15:31:35.175:INFO:org.eclipse.jetty.server.Server:main: Started @495ms .... [[deprecated-parameters]] diff --git a/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc b/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc index 2c4600b2c69..27b0a0874d3 100644 --- a/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/logging/example-logback-centralized-logging.adoc @@ -15,9 +15,9 @@ // ======================================================================== [[example-logging-logback-centralized]] -=== Example: Centralized Logging with Logback +=== Centralized Logging using Logback -The term _Centralized Logging_ refers to a forced logging configuration for the Jetty Server and all web applications that are deployed on the server. +The term _Centralized Logging_ refers to a forced logging configuration for the Jetty Server and all web applications that are deployed on the server. It routes all logging events from the web applications to a single configuration on the Server side. The example below shows how to accomplish this with Jetty and Slf4j, using `Logback` to manage the final writing of logs to disk. @@ -30,7 +30,7 @@ ____ This configuration is essentially the multiple logger configuration with added configuration to the deployers to force a `WebAppClassLoader` change to use the server classpath over the webapps classpath for the logger specific classes. -The technique used by this configuration is to provide an link:{JDURL}org/eclipse/jetty/deploy/AppLifeCycle.Binding.html[AppLifeCycle.Binding] against the link:{JDURL}/org/eclipse/jetty/deploy/AppLifeCycle.html[`"deploying"`node] that modifies the link:{JDURL}/org/eclipse/jetty/webapp/WebAppContext.html#addSystemClass(java.lang.String)[WebAppContext.addSystemClass(String)] for the common logging classes. +The technique used by this configuration is to provide an link:{JDURL}org/eclipse/jetty/deploy/AppLifeCycle.Binding.html[AppLifeCycle.Binding] against the link:{JDURL}/org/eclipse/jetty/deploy/AppLifeCycle.html[`"deploying"`node] that modifies the link:{JDURL}/org/eclipse/jetty/webapp/WebAppContext.html#addSystemClass(java.lang.String)[WebAppContext.addSystemClass(String)] for the common logging classes. See https://github.com/jetty-project/jetty-webapp-logging/blob/master/src/main/java/org/eclipse/jetty/webapp/logging/CentralizedWebAppLoggingBinding.java[org.eclipse.jetty.logging.CentralizedWebAppLoggingBinding] for actual implementation. A convenient replacement `logging` module has been created to bootstrap your `${jetty.base}` directory for capturing all Jetty server logging from multiple logging frameworks into a single logging output file managed by Logback. diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/chapter.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/chapter.adoc index cf8e60419dc..ee80d385f01 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/chapter.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/chapter.adoc @@ -24,6 +24,7 @@ If you need a session manager that can work in a clustered scenario with multipl Jetty also offers more niche session managers that leverage backends such as MongoDB, Inifinispan, or even Google's Cloud Data Store. include::session-hierarchy.adoc[] +include::sessions-details.adoc[] include::session-configuration-file-system.adoc[] include::session-configuration-jdbc.adoc[] include::session-configuration-mongodb.adoc[] diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc index 62d64b5f601..ccfbad946f2 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-configuration-gcloud.adoc @@ -44,7 +44,9 @@ The Google deployment tools will automatically configure the project and authent ==== Configuring Indexes for Session Data -Regardless of whether you're running inside or outside google infrastructure you will need to upload a file that defines some indexes that are needed by the GCloud datastore session data store. +Using some special, composite indexes can speed up session search operations, although it may make write operations slower. +By default, indexes will not be used. +In order to use them, you will need to manually upload a file that defines the indexes. This file is named `index.yaml` and you can find it in your distribution in `${jetty.base}/etc/sessions/gcloud/index.yaml`. //TODO - Add index.yaml properties? Test with new 9.4.x. It needs uploaded to Google as part of config diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/session-hierarchy.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/session-hierarchy.adoc index 7142a78da0c..91d6f3e345d 100644 --- a/jetty-documentation/src/main/asciidoc/administration/sessions/session-hierarchy.adoc +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/session-hierarchy.adoc @@ -46,7 +46,7 @@ There is only one (1) `SessionDataStore` per `SessionCache`. // Null cache, memcache, non-sticky load-balancer // in-memory caching -Visually the Session Hierarchy can be represented like this: +Visually the session architecture can be represented like this: image::images/SessionsHierarchy.png[] diff --git a/jetty-documentation/src/main/asciidoc/administration/sessions/sessions-details.adoc b/jetty-documentation/src/main/asciidoc/administration/sessions/sessions-details.adoc new file mode 100644 index 00000000000..693a2706cf6 --- /dev/null +++ b/jetty-documentation/src/main/asciidoc/administration/sessions/sessions-details.adoc @@ -0,0 +1,131 @@ +// ======================================================================== +// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd. +// ======================================================================== +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== + +[[sessions-details]] +=== Session Configuration and Use Cases + +==== Configuration + +===== SessionIdManager + +There is a maximum of 1 SessionIdManager per jetty Server instance. Its purpose is to generate fresh, unique session ids and to coordinate the re-use of session ids amongst co-operating contexts. + +Unlike in previous versions of jetty, the SessionIdManager is agnostic with respect to the type of clustering technology chosen. + +Jetty provides a default implementation - the DefaultSessionIdManager - which should meet most users' needs. +If you do not explicitly enable one of the session modules, or otherwise configure a SessionIdManager, the DefaultSessionIdManager will be used. + +If the DefaultSessionIdManager does not meet your needs, you can extend the org.eclipse.jetty.server.session.AbstractSessionIdManager or do a fresh implementation of the org.eclipse.jetty.server.session.SessionIdManager interface. + +===== HouseKeeper + +There is a maximum of 1 HouseKeeper per SessionIdManager. Its purpose is to periodically poll the SessionHandlers to clean out expired sessions. + +By default the HouseKeeper will poll the SessionHandlers every 10 mins to find and delete expired sessions, although this interval is configurable. + + +===== SessionCache + +There is 1 SessionCache per context. Its purpose is to provide an L1 cache of Session objects. +Having a working set of Session objects in memory allows multiple simultaneous requests for the same session to share the same Session object. + +Jetty provides 2 SessionCache implementations: the DefaultSessionCache and the NullSessionCache. +The DefaultSessionCache retains Session objects in memory in a cache and has a number of configuration options to control cache behaviour. +It is the default that is used if no other SessionCache has been configured. +It is suitable for non-clustered and clustered deployments with a sticky load balancer, as well as clustered deployments with a non-sticky load balancer, with some caveats. +The NullSessionCache does not actually cache any objects: each request uses a fresh Session object. +It is suitable for clustered deployments without a sticky load balancer and non-clustered deployments when purely minimal support for sessions is needed. + +SessionCaches always write out a Session to the SessionDataStore whenever the last request for the Session exits. + +They can also be configured to do an immediate, eager write of a freshly created session. +This can be useful if you are likely to experience multiple, near simultaneous requests referencing the same session, eg with HTTP2 and you don't have a sticky load balancer. +Alternatively, if the eager write is not done, application paths which create and then invalidate a session within a single request never incur the cost of writing to persistent storage. + +Additionally, if the EVICT_ON_INACTIVITY eviction policy is in use, you can configure the DefaultSessionCache to force a write of the Session to the SessionDataStore just before the Session is evicted. + +===== SessionDataStore + +There is 1 SessionDataStore per context. Its purpose is to handle all persistance related operations on sessions. + +The common characteristics for all SessionDataStores are whether or not they support passivation, and the length of the grace period. + +Supporting passivation means that session data is serialized. +Some persistence mechanisms serialize, such as JDBC, GCloud Datastore etc, whereas others may store an object in shared memory eg Infinispan when configured with a local cache. + +Whether or not a clustering technology entails passivation controls whether or not the session passivation/activation listeners will be called. + +The grace period is an interval, configured in seconds, that attempts to deal with the non-transactional nature of sessions with regard to finding sessions that have expired. +Due to the lack of transactionality, in a clustered configuration, even with a sticky load balancer, it is always possible that a Session is live on a node but has not yet been updated in the persistent store. +When SessionDataStores search their persistant store to find sessions that have expired, they typically perform a few sequential searches: +. the first verifies the expiration of a list of candidate session ids suggested by the SessionCache +. the second finds sessions in the store that have expired which were last live on the current node +. the third finds sessions that expired a "while" ago, irrespective of on which node they were last used: the definition of "a while" is based on the grace period. + + +===== CachingSessionDataStore + +The CachingSessionDataStore is a special type of SessionDataStore that inserts an L2 cache of SessionData - the SessionDataMap - in front of a delegate SessionDataStore. +The SessionDataMap is preferentially consulted before the actual SessionDataStore on reads. +This can improve the performance of slow stores. + +At the time of writing, jetty provides one implementation of the this L2 cache based on Memcached, the MemcachedSessionDataMap. + + +==== Use Cases + +===== Clustering with a Sticky Load Balancer + +Preferably, your cluster will utilize a sticky load balancer. +This will route requests for the same session to the same jetty instance. +In this case, the DefaultSessionCache can be used to keep in-use Session objects in memory. +You can fine-tune the cache by controlling how long Session objects remain in memory with the eviction policy settings. + +If you have a large number of Sessions or very large Session objects, then you might want to manage your memory allocation by controlling the amount of time Session objects spend in the cache. +The EVICT_ON_SESSION_EXIT eviction policy will remove a Session object from the cache as soon as the last simultaneous request referencing it exits. +Alternatively, the EVICT_ON_INACTIVITY policy will remove a Session object from the cache after a configurable amount of time has passed without a request referencing it. + +If your Sessions are very long lived and infrequently referenced, you might use the EVICT_ON_INACTIVITY_POLICY to control the size of the cache. + +If your Sessions are small, or relatively few or stable in number or they are read-mostly, then you might select the NEVER_EVICT policy. +With this policy, Session objects will remain in the cache until they either expire or are explicitly invalidated. + +If you have a high likelihood of simultaneous requests for the same session object, then the EVICT_ON_SESSION_EXIT policy will ensure the Session object stays in the cache as long as it is needed. + + +===== Clustering without a Sticky Load Balancer + +Without a sticky load balancer requests for the same session may arrive on any node in the cluster. +This means it is likely that the copy of the Session object in any SessionCache is likely to be out-of-date, as the Session was probably last accessed on a different node. +In this case, your choices are to use either the NullSessionCache or to de-tuned the DefaultSessionCache. +If you use the NullSessionCache all Session object caching is avoided. +This means that every time a request references a session it must be brought in from persistent storage. +It also means that there can be no sharing of Session objects for multiple requests for the same session: each will have their own Session object. +Furthermore, the outcome of session writes are indeterminate because the Servlet Specification does not mandate ACID transactions for sessions. + +If you use the DefaultSessionCache, there is a risk that the caches on some nodes will contain out-of-date session information as simultaneous requests for the same session are scattered over the cluster. +To mitigate this somewhat you can use the EVICT_ON_SESSION_EXIT eviction policy: this will ensure that the Session is removed from the cache as soon as the last simultaneous request for it exits. +Again, due to the lack of session transactionality, the ordering outcome of write operations cannot be guaranteed. +As the Session is cached while at least one request is accessing it, it is possible for multiple simultaneous requests to share the same Session object. + + +===== Handling corrupted or unloadable session data + +For various reasons it might not be possible for the SessionDataStore to re-read a stored session. +One scenario is that the session stores a serialized object in it's attributes, and after a redeployment there in an incompatible class change. +Using the setter SessionCache.setRemoveUnloadableSessions(true) will allow the SessionDataStore to delete the unreadable session from persistent storage. +This can be useful from preventing the scavenger from continually erroring on the same expired, but unrestorable session. + diff --git a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc index 55642c8e228..5b1551b59bd 100644 --- a/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc +++ b/jetty-documentation/src/main/asciidoc/configuring/connectors/configuring-connectors.adoc @@ -131,8 +131,8 @@ Jetty attempts to gently close all TCP/IP connections with proper half close sem [[jetty-connectors-http-configuration]] ==== HTTP Configuration -The link:{JDURL}/org/eclipse/jetty/server/HttpConfiguration.html[HttpConfiguration] class holds the configuration for link:{JDURL}/org/eclipse/jetty/server/HttpChannel.html[`HTTPChannel`]s, which you can create 1:1 with each HTTP connection or 1:n on a multiplexed HTTP/2 connection. -Thus a `HTTPConfiguration` object is injected into both the HTTP and HTTP/2 connection factories. +The link:{JDURL}/org/eclipse/jetty/server/HttpConfiguration.html[`HttpConfiguration`] class holds the configuration for link:{JDURL}/org/eclipse/jetty/server/HttpChannel.html[`HttpChannel`]s, which you can create 1:1 with each HTTP connection or 1:n on a multiplexed HTTP/2 connection. +Thus a `HttpConfiguration` object is injected into both the HTTP and HTTP/2 connection factories. To avoid duplicate configuration, the standard Jetty distribution creates the common `HttpConfiguration` instance in link:{SRCDIR}/jetty-server/src/main/config/etc/jetty.xml[`jetty.xml`], which is a `Ref` element then used in link:{SRCDIR}/jetty-server/src/main/config/etc/jetty-http.xml[`jetty-http.xml`], link:{SRCDIR}/jetty-server/src/main/config/etc/jetty-https.xml[`jetty-https.xml`] and in link:{SRCDIR}/jetty-http2/http2-server/src/main/config/etc/jetty-http2.xml[`jetty-http2.xml`]. A typical configuration of link:{JDURL}/org/eclipse/jetty/server/HttpConfiguration.html[HttpConfiguration] is: @@ -171,6 +171,9 @@ This example HttpConfiguration may be used by reference to the ID "`httpConfig`" ---- +This same `httpConfig` is referenced by the link:{JDURL}/org/eclipse/jetty/server/handler/SecuredRedirectHandler.html[`SecuredRedirectHandler`] when redirecting secure requests. +Please note that if your `httpConfig` does not include a `secureScheme` or `securePort` or there is no `HttpConfiguration` present these types of secured requests will be returned a `403` error. + For SSL based connectors (in `jetty-https.xml` and `jetty-http2.xml`), the common "`httpConfig`" instance is used as the basis to create an SSL specific configuration with ID "`sslHttpConfig`": [source, xml, subs="{sub-order}"] diff --git a/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc b/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc index 3c57ca7fde8..b4e6adb6100 100644 --- a/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc +++ b/jetty-documentation/src/main/asciidoc/development/frameworks/osgi.adoc @@ -19,19 +19,16 @@ ==== Introduction -The Jetty OSGi infrastructure provides a Jetty container inside an OSGi -container. Traditional JavaEE webapps can be deployed, in addition to -Jetty ContextHandlers, along with OSGi web bundles. In addition, the -infrastructure also supports the OSGi HttpService interface. +The Jetty OSGi infrastructure provides a Jetty container inside an OSGi container. +Traditional JavaEE webapps can be deployed, in addition to Jetty `ContextHandlers`, along with OSGi web bundles. +In addition, the infrastructure also supports the OSGi `HttpService` interface. ==== General Setup -All of the Jetty jars contain manifest entries appropriate to ensure -that they can be deployed into an OSGi container as bundles. You will -need to install some jetty jars into your OSGi container. You can always -find the jetty jars either in the maven central repository, or you can -download a distribution of jetty. Here's the absolute minimal set of -jetty jars: +All of the Jetty jars contain manifest entries appropriate to ensure that they can be deployed into an OSGi container as bundles. +You will need to install some jetty jars into your OSGi container. +You can always find the Jetty jars either in the Maven Central repository, or you can link:https://www.eclipse.org/jetty/download.html[download] a distribution of Jetty. +Here's the absolute minimal set of Jetty jars: .Bundle Name Mapping [cols=",",options="header",] @@ -51,61 +48,47 @@ jetty jars: ____ [NOTE] - -We recommend that you also deploy the -link:#osgi-annotations[annotation-related] jars also, as increasingly -the Servlet Specification relies on annotations for functionality. +We recommend that you also deploy the link:#osgi-annotations[annotation-related] jars also, as the Servlet Specification increasingly relies on annotations for functionality. ____ -You will also need the**OSGi Event Management service** and the **OSGi -Configuration Management service**. If your OSGi container does not -automatically make these available, you will need to add them in a way -appropriate to your container. +You will also need the **OSGi Event Management service** and the **OSGi Configuration Management service**. +If your OSGi container does not automatically make these available, you will need to add them in a way appropriate to your container. ==== The Jetty OSGi Container ===== The jetty-osgi-boot jar -Now that you have the basic set of Jetty jars installed, you can install -the -http://central.maven.org/maven2/org/eclipse/jetty/osgi/jetty-osgi-boot/[jetty-osgi-boot.jar] -bundle, downloadable from the maven central repo -http://central.maven.org/maven2/org/eclipse/jetty/osgi/jetty-osgi-boot/[here.] +Now that you have the basic set of Jetty jars installed, you can install the http://central.maven.org/maven2/org/eclipse/jetty/osgi/jetty-osgi-boot/[jetty-osgi-boot.jar] bundle, downloadable from the maven central repo http://central.maven.org/maven2/org/eclipse/jetty/osgi/jetty-osgi-boot/[here.] -This bundle will instantiate and make available the Jetty OSGi container -when it is started. If this bundle is not auto-started upon installation -into your OSGi container, you should start it manually using a command -appropriate for your container. +This bundle will instantiate and make available the Jetty OSGi container when it is started. +If this bundle is not auto-started upon installation into your OSGi container, you should start it manually using a command appropriate for your container. [[customize-jetty-container]] ===== Customizing the Jetty Container -Before going ahead with the install, you may want to customize the Jetty -container. In general this is done by a combination of System properties -and the usual jetty xml configuration files. The way you define the -System properties will depend on which OSGi container you are using, so -ensure that you are familiar with how to set them for your environment. -In the following examples, we will assume that the OSGi container allows -us to set System properties as simple name=value pairs. +Before going ahead with the install, you may want to customize the Jetty container. +In general this is done by a combination of System properties and the usual Jetty xml configuration files. +The way you define the System properties will depend on which OSGi container you are using, so ensure that you are familiar with how to set them for your environment. +In the following examples, we will assume that the OSGi container allows us to set System properties as simple `name=value` pairs. The available System properties are: jetty.http.port:: - If not specified, this defaults to the usual jetty port of 8080. +If not specified, this defaults to the usual jetty port of 8080. jetty.home:: - Either this property _or_ the *jetty.home.bundle* _must_ be specified. - This property should point to a file system location that has an - `etc/` directory containing xml files to configure the Jetty container - on startup. For example: - + +Either this property _or_ the *jetty.home.bundle* _must_ be specified. +This property should point to a file system location that has an `etc/` directory containing xml files to configure the Jetty container on startup. +For example: ++ [source, plain, subs="{sub-order}"] ---- jetty.home=/opt/custom/jetty - + ---- - + - Where `/opt/custom/jetty` contains: - + + ++ +Where `/opt/custom/jetty` contains: ++ [source, plain, subs="{sub-order}"] ---- @@ -113,27 +96,23 @@ etc/jetty.xml etc/jetty-selector.xml etc/jetty-deployer.xml etc/jetty-special.xml - - ---- + jetty.home.bundle:: - Either this property _or_ the *jetty.home* property must be specified. - This property should specify the symbolic name of a bundle which - contains a directory called `jettyhome/`. The` - jettyhome/` directory should have a subdirectory called - `etc/` that contains the xml files to be applied to Jetty on startup. - The jetty-osgi-boot.jar contains a` - jettyhome/` directory with a default set of xml - configuration files. Here's how you would specify it: - + +Either this property _or_ the *jetty.home* property must be specified. +This property should specify the symbolic name of a bundle which contains a directory called `jettyhome/`. +The `jettyhome/` directory should have a subdirectory called `etc/` that contains the xml files to be applied to Jetty on startup. +The jetty-osgi-boot.jar contains a `jettyhome/` directory with a default set of xml configuration files. +Here's how you would specify it: ++ [source, plain, subs="{sub-order}"] ---- jetty.home.bundle=org.eclipse.jetty.osgi.boot ---- - + - Here's a partial listing of that jar that shows you the names of the - xml files contained within it: - + + ++ +Here's a partial listing of that jar that shows you the names of the xml files contained within it: ++ [source, plain, subs="{sub-order}"] ---- META-INF/MANIFEST.MF @@ -141,81 +120,59 @@ jettyhome/etc/jetty.xml jettyhome/etc/jetty-deployer.xml jettyhome/etc/jetty-http.xml ---- + jetty.etc.config.urls:: - This specifies the paths of the xml files that are to be used. If not - specified, they default to: - + +This specifies the paths of the xml files that are to be used. +If not specified, they default to: ++ [source, plain, subs="{sub-order}"] ---- etc/jetty.xml,etc/jetty-http.xml,etc/jetty-deployer.xml ---- - + - Note that the paths can either be relative or absolute, or a mixture. - If the path is relative, it is resolved against either *jetty.home* or - **jetty.home.bundle**, whichever was specified. You can use this - ability to mix and match jetty configuration files to add - functionality, such as adding in a https connector. Here's an example - of adding a https connector, using the relevant files from the - jetty-distribution: - + + ++ +Note that the paths can either be relative or absolute, or a mixture. +If the path is relative, it is resolved against either *jetty.home* or **jetty.home.bundle**, whichever was specified. +You can use this ability to mix and match jetty configuration files to add functionality, such as adding in a https connector. +Here's an example of adding a HTTPS connector, using the relevant files from the jetty-distribution: ++ .... etc/jetty.xml, etc/jetty-http.xml, /opt/jetty/etc/jetty-ssl.xml, /opt/jetty/etc/jetty-https.xml, etc/jetty-deployer.xml .... - + - Note that regardless of whether you set the *jetty.home* or - *jetty.home.bundle* property, when Jetty executes the configuration - files, it will set an appropriate value for *jetty.home* so that - references in xml files to will work. Be - careful, however, if you are mixing and matching relative and absolute - configuration file paths: the value of *jetty.home* is determined from - the resolved location of the _relative_ files only. ++ + +Note that regardless of whether you set the *jetty.home* or *jetty.home.bundle* property, when Jetty executes the configuration files, it will set an appropriate value for *jetty.home* so that references in xml files to `` will work. +Be careful, however, if you are mixing and matching relative and absolute configuration file paths: the value of *jetty.home* is determined from the resolved location of the _relative_ files only. ===== The Jetty Container as an OSGi Service -You can now go ahead and deploy the jetty-osgi-boot.jar into your OSGi -container. A Jetty Server instance will be created, the xml config files -applied to it, and then published as an OSGi service. Normally, you will -not need to interact with this service instance, however you can -retrieve a reference to it using the usual OSGi API: +You can now go ahead and deploy the jetty-osgi-boot.jar into your OSGi container. +A Jetty server instance will be created, the xml config files applied to it, and then published as an OSGi service. +Normally, you will not need to interact with this service instance, however you can retrieve a reference to it using the usual OSGi API: [source, java, subs="{sub-order}"] ---- - org.osgi.framework.BundleContext bc; org.osgi.framework.ServiceReference ref = bc.getServiceReference("org.eclipse.jetty.server.Server"); - - ---- -The Server service has a couple of properties associated with it that -you can retrieve using the -org.osgi.framework.ServiceReference.getProperty(String) method: +The Server service has a couple of properties associated with it that you can retrieve using the `org.osgi.framework.ServiceReference.getProperty(String)` method: managedServerName:: - The Jetty Server instance created by the jetty-osgi-boot.jar will be - called "defaultJettyServer" +The Jetty Server instance created by the jetty-osgi-boot.jar will be called "defaultJettyServer" jetty.etc.config.urls:: - The list of xml files resolved from either *jetty.home* - or**jetty.home.bundle**/jettyhome +The list of xml files resolved from either *jetty.home* or **jetty.home.bundle**/jettyhome ===== Adding More Jetty Servers -As we have seen in the previous section, the jetty-osgi-boot code will -create an org.eclipse.jetty.server.Server instance, apply the xml -configuration files specified by *jetty.etc.config.urls* System property -to it, and then register it as an OSGi Service. The name associated with -this default instance is "defaultJettyServer". +As we have seen in the previous section, the jetty-osgi-boot code will create an `org.eclipse.jetty.server.Server` instance, apply the xml configuration files specified by *jetty.etc.config.urls* System property to it, and then register it as an OSGi Service. +The name associated with this default instance is `defaultJettyServer`. -You can create other Server instances, register them as OSGi Services, -and the jetty-osgi-boot code will notice them, and configure them so -that they can deploy ContextHandlers and webapp bundles. When you deploy -webapps or ContextHandlers as bundles or Services (see sections below) -you can target them to be deployed to a particular server instance via +You can create other Server instances, register them as OSGi Services, and the jetty-osgi-boot code will notice them, and configure them so that they can deploy `ContextHandlers` and webapp bundles. +When you deploy webapps or `ContextHandlers` as bundles or Services (see sections below) you can target them to be deployed to a particular server instance via the Server's name. -Here's an example of how to create a new Server instance and register it -with OSGi so that the jetty-osgi-boot code will find it and configure it -so it can be a deployment target: +Here's an example of how to create a new Server instance and register it with OSGi so that the jetty-osgi-boot code will find it and configure it so it can be a deployment target: [source, java, subs="{sub-order}"] ---- @@ -224,7 +181,7 @@ public class Activator implements BundleActivator public void start(BundleContext context) throws Exception { - + Server server = new Server(); //do any setup on Server in here String serverName = "fooServer"; @@ -234,17 +191,14 @@ public class Activator implements BundleActivator serverProps.put("jetty.http.port", "9999"); //let Jetty apply some configuration files to the Server instance serverProps.put("jetty.etc.config.urls", "file:/opt/jetty/etc/jetty.xml,file:/opt/jetty/etc/jetty-selector.xml,file:/opt/jetty/etc/jetty-deployer.xml"); - //register as an OSGi Service for Jetty to find + //register as an OSGi Service for Jetty to find context.registerService(Server.class.getName(), server, serverProps); - + } } ---- -Now that we have created a new Server called "fooServer", we can deploy -webapps and ContextHandlers as Bundles or Services to it (see below for -more information on this). Here's an example of deploying a webapp as a -Service and targetting it to the "fooServer" Server we created above: +Now that we have created a new Server called "fooServer", we can deploy webapps and `ContextHandlers` as Bundles or Services to it (see below for more information on this). Here's an example of deploying a webapp as a Service and targeting it to the "fooServer" Server we created above: [source, java, subs="{sub-order}"] ---- @@ -253,7 +207,7 @@ public class Activator implements BundleActivator public void start(BundleContext context) throws Exception { - + //Create a webapp context as a Service and target it at the "fooServer" Server instance WebAppContext webapp = new WebAppContext(); Dictionary props = new Hashtable(); @@ -267,125 +221,93 @@ public class Activator implements BundleActivator ==== Deploying Bundles as Webapps -The Jetty OSGi container listens for the installation of bundles, and -will automatically attempt to deploy any that appear to be webapps. +The Jetty OSGi container listens for the installation of bundles, and will automatically attempt to deploy any that appear to be webapps. -Any of the following criteria are sufficient for Jetty to deploy the -bundle as a webapp: +Any of the following criteria are sufficient for Jetty to deploy the bundle as a webapp: Bundle contains a WEB-INF/web.xml file:: - If the bundle contains a web descriptor, then it is automatically - deployed. This is an easy way to deploy classic JavaEE webapps. -Bundle MANIFEST contains Jetty-WarFolderPath (for releases prior to -jetty-9.3) or Jetty-WarResourcePath:: - This is the location within the bundle of the webapp resources. - Typically this would be used if the bundle is not a pure webapp, but - rather the webapp is a component of the bundle. Here's an example of a - bundle where the resources of the webapp are not located at the root - of the bundle, but rather inside the subdirectory `web/` : - + - `MANIFEST`: - + +If the bundle contains a web descriptor, then it is automatically deployed. +This is an easy way to deploy classic JavaEE webapps. +Bundle MANIFEST contains Jetty-WarFolderPath (for releases prior tojetty-9.3) or Jetty-WarResourcePath:: +This is the location within the bundle of the webapp resources. +Typically this would be used if the bundle is not a pure webapp, but rather the webapp is a component of the bundle. +Here's an example of a bundle where the resources of the webapp are not located at the root of the bundle, but rather inside the subdirectory `web/` : ++ +`MANIFEST`: ++ [source, plain, subs="{sub-order}"] ---- - Bundle-Name: Web Jetty-WarResourcePath: web Import-Package: javax.servlet;version="3.1", javax.servlet.resources;version="3.1" Bundle-SymbolicName: com.acme.sample.web - - ---- - + - Bundle contents: - + + ++ +Bundle contents: ++ [source, plain, subs="{sub-order}"] ---- - META-INF/MANIFEST.MF web/index.html web/foo.html web/WEB-INF/web.xml com/acme/sample/web/MyStuff.class com/acme/sample/web/MyOtherStuff.class - - ---- Bundle MANIFEST contains Web-ContextPath:: - This header can be used in conjunction with either of the two - preceding headers to control the context path to which the webapp is - deployed, or alone to identify that the bundle's contents should be - published as a webapp. This header is part of the RFC-66 specification - for using webapps with OSGi. Here's an eample based on the previous - one where we use the Web-ContextPath header to set its deployment - context path to be "/sample" : - + - `MANIFEST`: - + +This header can be used in conjunction with either of the two preceding headers to control the context path to which the webapp is deployed, or alone to identify that the bundle's contents should be published as a webapp. +This header is part of the RFC-66 specification for using webapps with OSGi. +Here's an example based on the previous one where we use the `Web-ContextPath` header to set its deployment context path to be "/sample" : + ++ +`MANIFEST`: ++ [source, plain, subs="{sub-order}"] ---- - Bundle-Name: Web Jetty-WarResourcePath: web Web-ContextPath: /sample Import-Package: javax.servlet;version="3.1", javax.servlet.resources;version="3.1" Bundle-SymbolicName: com.acme.sample.web - - ---- You can also define extra headers in your bundle MANIFEST that help customize the web app to be deployed: Jetty-defaultWebXmlFilePath:: - The location of a webdefault.xml file to apply to the webapp. The - location can be either absolute (either absolute path or file: url), - or relative (in which case it is interpreted as relative to the bundle - root). Defaults to the webdefault.xml file built into the Jetty OSGi - container. +The location of a `webdefault.xml` file to apply to the webapp. +The location can be either absolute (either absolute path or file: url), or relative (in which case it is interpreted as relative to the bundle root). +Defaults to the `webdefault.xml` file built into the Jetty OSGi container. Jetty-WebXmlFilePath:: - The location of the web.xml file. The location can be either absolute - (either absolute path or file: url), or relative (in which case it is - interpreted as relative to the bundle root). Defaults to - WEB-INF/web.xml +The location of the `web.xml` file. +The location can be either absolute (either absolute path or file: url), or relative (in which case it is interpreted as relative to the bundle root). +Defaults to `WEB-INF/web.xml` Jetty-extraClassPath:: - A classpath of additional items to add to the webapp's classloader. +A classpath of additional items to add to the webapp's classloader. Jetty-bundleInstall:: - The path to the base folder that overrides the computed bundle - installation - mostly useful for those OSGi frameworks that unpack - bundles by default. +The path to the base folder that overrides the computed bundle installation - mostly useful for those OSGi frameworks that unpack bundles by default. Require-TldBundle:: - A comma separated list of bundle symbolic names of bundles containing - TLDs that this webapp depends upon. +A comma separated list of bundle symbolic names of bundles containing TLDs that this webapp depends upon. managedServerName:: - The name of the Server instance to which to deploy this webapp bundle. - If not specified, defaults to the default Server instance called - "defaultJettyServer". +The name of the Server instance to which to deploy this webapp bundle. +If not specified, defaults to the default Server instance called "defaultJettyServer". Jetty-WarFragmentResourcePath:: - The path within a fragment hosted by the web-bundle that contains - static resources for the webapp. The path is appended to the base - resource for the webapp (see Jetty-WarResourcePath). +The path within a fragment hosted by the web-bundle that contains static resources for the webapp. +The path is appended to the base resource for the webapp (see Jetty-WarResourcePath). Jetty-WarPrependFragmentResourcePath:: - The path within a fragment hosted by the web-bundle that contains - static resources for the webapp.The path is prepended to the base - resource for the webapp (see Jetty-WarResourcePath). +The path within a fragment hosted by the web-bundle that contains static resources for the webapp. +The path is prepended to the base resource for the webapp (see Jetty-WarResourcePath). Jetty-ContextFilePath:: - A comma separated list of paths within the webapp bundle to Jetty - context files that will be applied to the webapp. Alternatively you - may include a single Jetty context file called - "jetty-webapp-context.xml" in the webapp bundle's META-INF directory - and it will be automatically applied to the webapp. +A comma separated list of paths within the webapp bundle to Jetty context files that will be applied to the webapp. +Alternatively you may include a single Jetty context file called `jetty-webapp-context.xml` in the webapp bundle's META-INF directory and it will be automatically applied to the webapp. ===== Determining the Context Path for a Webapp Bundle -As we have seen in the previous section, if the bundle `MANIFEST` -contains the RFC-66 header **Web-ContextPath**, Jetty will use that as -the context path. If the MANIFEST does not contain that header, then -Jetty will concoct a context path based on the last element of the -bundle's location (by calling Bundle.getLocation()) after stripping off -any file extensions. +As we have seen in the previous section, if the bundle `MANIFEST` contains the RFC-66 header **Web-ContextPath**, Jetty will use that as the context path. +If the `MANIFEST` does not contain that header, then Jetty will concoct a context path based on the last element of the bundle's location (by calling `Bundle.getLocation()`) after stripping off any file extensions. For example, suppose we have a bundle whose location is: @@ -403,15 +325,13 @@ The corresponding synthesized context path would be: ===== Extra Properties Available for Webapp Bundles -You can further customize your webapp by including a jetty context xml -file that is applied to the webapp. This xml file must be placed in -`META-INF` of the bundle, and must be called `jetty-webapp-context.xml`. +You can further customize your webapp by including a Jetty context xml file that is applied to the webapp. +This xml file must be placed in `META-INF` of the bundle, and must be called `jetty-webapp-context.xml`. Here's an example of a webapp bundle listing containing such a file: [source, plain, subs="{sub-order}"] ---- - META-INF/MANIFEST.MF META-INF/jetty-webapp-context.xml web/index.html @@ -419,14 +339,12 @@ web/foo.html web/WEB-INF/web.xml com/acme/sample/web/MyStuff.class com/acme/sample/web/MyOtherStuff.class - - ---- -Here's an example of the contents of a META-INF/jetty-webapp-context.xml -file: +Here's an example of the contents of a `META-INF/jetty-webapp-context.xml` file: -.... +[source, xml, subs="{sub-order}"] +---- @@ -434,100 +352,77 @@ file: META-INF/webdefault.xml -.... +---- As you can see, it is a normal context xml file used to set up a webapp. -There are, however, some additional useful properties that can be -referenced +There are, however, some additional useful properties that can be referenced Server:: - This is a reference to the Jetty org.eclipse.jetty.server.Server - instance to which the webapp being configured in the context xml file - will be deployed. +This is a reference to the Jetty `org.eclipse.jetty.server.Server` instance to which the webapp being configured in the context xml file will be deployed. bundle.root:: - This is a reference to the org.eclipse.jetty.util.resource.Resource - that represents the location of the Bundle. Note that this could be - either a directory in the file system if the OSGi container - automatically unpacks bundles, or it may be a jar:file: url if the - bundle remains packed. +This is a reference to the `org.eclipse.jetty.util.resource.Resource` that represents the location of the Bundle. +Note that this could be either a directory in the file system if the OSGi container automatically unpacks bundles, or it may be a jar:file: url if the bundle remains packed. ==== Deploying Bundles as Jetty ContextHandlers -In addition to deploying webapps, the Jetty OSGi container listens for -the installation of bundles that are not heavyweight webapps, but rather -use the flexible Jetty-specific concept of ContextHandlers. +In addition to deploying webapps, the Jetty OSGi container listens for the installation of bundles that are not heavyweight webapps, but rather use the flexible Jetty-specific concept of `ContextHandlers`. -The following is the criteria used to decide if a bundle can be deployed -as a ContextHandler: +The following is the criteria used to decide if a bundle can be deployed as a `ContextHandler`: Bundle MANIFEST contains Jetty-ContextFilePath:: - A comma separated list of names of context files - each one of which - represents a ContextHandler that should be deployed by Jetty. The - context files can be inside the bundle, external to the bundle - somewhere on the file system, or external to the bundle in the - *jetty.home* directory. - + - A context file that is inside the bundle: - + +A comma separated list of names of context files - each one of which represents a ContextHandler that should be deployed by Jetty. +The context files can be inside the bundle, external to the bundle somewhere on the file system, or external to the bundle in the *jetty.home* directory. ++ +A context file that is inside the bundle: ++ [source, plain, subs="{sub-order}"] ---- Jetty-ContextFilePath: ./a/b/c/d/foo.xml ---- - + - A context file that is on the file system: - + ++ +A context file that is on the file system: ++ [source, plain, subs="{sub-order}"] ---- Jetty-ContextFilePath: /opt/app/contexts/foo.xml ---- - + - A context file that is relative to jetty.home: - + ++ +A context file that is relative to jetty.home: ++ [source, plain, subs="{sub-order}"] ---- Jetty-ContextFilePath: contexts/foo.xml ---- - + - A number of different context files: - + ++ +A number of different context files: ++ [source, plain, subs="{sub-order}"] ---- Jetty-ContextFilePath: ./a/b/c/d/foo.xml,/opt/app/contexts/foo.xml,contexts/foo.xml ---- -Other MANIFEST properties that can be used to configure the deployment -of the ContextHandler: +Other `MANIFEST` properties that can be used to configure the deployment of the `ContextHandler`: managedServerName:: - The name of the Server instance to which to deploy this webapp bundle. - If not specified, defaults to the default Server instance called - "defaultJettyServer". +The name of the Server instance to which to deploy this webapp bundle. +If not specified, defaults to the default Server instance called "defaultJettyServer". ===== Determining the Context Path for a ContextHandler Bundle -Usually, the context path for the ContextHandler will be set by the -context xml file. However, you can override any path set in the context -xml file by using the *Web-ContextPath* header in the `MANIFEST`. +Usually, the context path for the ContextHandler will be set by the context xml file. +However, you can override any path set in the context xml file by using the *Web-ContextPath* header in the `MANIFEST`. ===== Extra Properties Available for Context Xml Files -Before the Jetty OSGi container applies a context xml file found in a -Jetty-ContextFilePath MANIFEST header, it sets a few useful properties -that can be referred to within the xml file: +Before the Jetty OSGi container applies a context xml file found in a *Jetty-ContextFilePath* `MANIFEST` header, it sets a few useful propertiesthat can be referred to within the xml file: Server:: - This is a reference to the Jetty org.eclipse.jetty.server.Server - instance to which the ContextHandler being configured in the context - xml file will be deployed. +This is a reference to the Jetty `org.eclipse.jetty.server.Server` instance to which the `ContextHandler` being configured in the context xml file will be deployed. bundle.root:: - This is a reference to the org.eclipse.jetty.util.resource.Resource - that represents the location of the Bundle (obtained by calling - Bundle.getLocation()). Note that this could be either a directory in - the file system if the OSGi container automatically unpacks bundles, - or it may be a jar:file: url if the bundle remains packed. +This is a reference to the `org.eclipse.jetty.util.resource.Resource` that represents the location of the Bundle (obtained by calling `Bundle.getLocation()`). +Note that this could be either a directory in the file system if the OSGi container automatically unpacks bundles, or it may be a jar:file: url if the bundle remains packed. -Here's an example of a context xml file that makes use of these -properties: +Here's an example of a context xml file that makes use of these properties: [source, xml, subs="{sub-order}"] ---- @@ -537,34 +432,24 @@ include::{SRCDIR}/jetty-osgi/test-jetty-osgi-context/src/main/context/acme.xml[] [[services-as-webapps]] ==== Deploying Services as Webapps -In addition to listening for bundles whose format or `MANIFEST` entries -define a webapp or ContextHandler for to be deployed, the Jetty OSGi -container also listens for the registration of OSGi services that are -instances of org.eclipse.jetty.webapp.WebAppContext. So you may -programmatically create a WebAppContext, register it as a service, and -have Jetty pick it up and deploy it. +In addition to listening for bundles whose format or `MANIFEST` entries define a webapp or `ContextHandler` for to be deployed, the Jetty OSGi container also listens for the registration of OSGi services that are instances of `org.eclipse.jetty.webapp.WebAppContext`. +So you may programmatically create a `WebAppContext`, register it as a service, and have Jetty pick it up and deploy it. -Here's an example of doing that with a simple bundle that serves static -content, and an org.osgi.framework.BundleActivator that instantiates the -WebAppContext: +Here's an example of doing that with a simple bundle that serves static content, and an `org.osgi.framework.BundleActivator` that instantiates the `WebAppContext`: The bundle contents: [source, plain, subs="{sub-order}"] ---- - META-INF/MANIFEST.MF index.html com/acme/osgi/Activator.class - - ---- The `MANIFEST.MF`: [source, plain, subs="{sub-order}"] ---- - Bundle-Classpath: . Bundle-Name: Jetty OSGi Test WebApp DynamicImport-Package: org.eclipse.jetty.*;version="[9.0,10.0)" @@ -579,15 +464,12 @@ Import-Package: org.eclipse.jetty.server.handler;version="[9.0,10)", org.osgi.util.tracker;version= "1.3.0", org.xml.sax,org.xml.sax.helpers Bundle-SymbolicName: com.acme.testwebapp - - ---- The Activator code: [source, java, subs="{sub-order}"] ---- - public void start(BundleContext context) throws Exception { WebAppContext webapp = new WebAppContext(); @@ -596,86 +478,60 @@ public void start(BundleContext context) throws Exception props.put("contextPath","/acme"); context.registerService(ContextHandler.class.getName(),webapp,props); } - - ---- -The above setup is sufficient for Jetty to recognize and deploy the -WebAppContext at /acme. +The above setup is sufficient for Jetty to recognize and deploy the `WebAppContext` at /acme. -As the example shows, you can use OSGi Service properties in order to -communicate extra configuration information to Jetty: +As the example shows, you can use OSGi Service properties in order to communicate extra configuration information to Jetty: -Jetty-WarFolderPath (for releases prior to 9.3) or -Jetty-WarResourcePath:: - The location within the bundle of the root of the static resources for - the webapp +Jetty-WarFolderPath (for releases prior to 9.3) or Jetty-WarResourcePath:: +The location within the bundle of the root of the static resources for the webapp Web-ContextPath:: - The context path at which to deploy the webapp. +The context path at which to deploy the webapp. Jetty-defaultWebXmlFilePath:: - The location within the bundle of a webdefault.xml file to apply to - the webapp. Defaults to that of the Jetty OSGi container. +The location within the bundle of a `webdefault.xml` file to apply to the webapp. +Defaults to that of the Jetty OSGi container. Jetty-WebXmlFilePath:: - The location within the bundle of the web.xml file. Defaults to - WEB-INF/web.xml +The location within the bundle of the `web.xml` file. +Defaults to `WEB-INF/web.xml` Jetty-extraClassPath:: - A classpath of additional items to add to the webapp's classloader. +A classpath of additional items to add to the webapp's classloader. Jetty-bundleInstall:: - The path to the base folder that overrides the computed bundle - installation - mostly useful for those OSGi frameworks that unpack - bundles by default. +The path to the base folder that overrides the computed bundle installation - mostly useful for those OSGi frameworks that unpack bundles by default. Require-TldBundle:: - A comma separated list of bundle symbolic names of bundles containing - TLDs that this webapp depends upon. +A comma separated list of bundle symbolic names of bundles containing TLDs that this webapp depends upon. managedServerName:: - The name of the Server instance to which to deploy this webapp. If not - specified, defaults to the default Server instance called - "defaultJettyServer". +The name of the Server instance to which to deploy this webapp. +If not specified, defaults to the default Server instance called "defaultJettyServer". Jetty-WarFragmentResourcePath:: - The path within a fragment hosted by the web-bundle that contains - static resources for the webapp. The path is appended to the base - resource for the webapp (see Jetty-WarResourcePath). +The path within a fragment hosted by the web-bundle that contains static resources for the webapp. +The path is appended to the base resource for the webapp (see Jetty-WarResourcePath). Jetty-WarPrependFragmentResourcePath:: - The path within a fragment hosted by the web-bundle that contains - static resources for the webapp.The path is prepended to the base - resource for the webapp (see Jetty-WarResourcePath). +The path within a fragment hosted by the web-bundle that contains static resources for the webapp. +The path is prepended to the base resource for the webapp (see Jetty-WarResourcePath). ==== Deploying Services as ContextHandlers -Similarly to WebAppContexts, the Jetty OSGi container can detect the -registration of an OSGi Service that represents a ContextHandler and -ensure that it is deployed. The ContextHandler can either be fully -configured before it is registered as an OSGi service - in which case -the Jetty OSGi container will merely deploy it - or the ContextHandler -can be partially configured, with the Jetty OSGi container completing -the configuration via a context xml file and properties associated with -the Service. +Similarly to WebApp`Contexts, the Jetty OSGi container can detect the registration of an OSGi Service that represents a `ContextHandler` and ensure that it is deployed. +The `ContextHandler` can either be fully configured before it is registered as an OSGi service - in which case the Jetty OSGi container will merely deploy it - or the `ContextHandler` can be partially configured, with the Jetty OSGi container completing the configuration via a context xml file and properties associated with the Service. -Here's an example of doing that with a simple bundle that serves static -content with an org.osgi.framework.BundleActivator that instantiates a -ContextHandler and registers it as an OSGi Service, passing in -properties that define a context xml file and context path for Jetty to -apply upon deployment: +Here's an example of doing that with a simple bundle that serves static content with an `org.osgi.framework.BundleActivator` that instantiates a `ContextHandler` and registers it as an OSGi Service, passing in properties that define a context xml file and context path for Jetty to apply upon deployment: The bundle contents: [source, plain, subs="{sub-order}"] ---- - META-INF/MANIFEST.MF static/index.html acme.xml com/acme/osgi/Activator.class com/acme/osgi/Activator$1.class - - ---- The `MANIFEST`: [source, plain, subs="{sub-order}"] ---- - Bundle-Classpath: . Bundle-Name: Jetty OSGi Test Context DynamicImport-Package: org.eclipse.jetty.*;version="[9.0,10.0)" @@ -691,15 +547,12 @@ Import-Package: javax.servlet;version="2.6.0", org.osgi.util.tracker;version="1.3.0", org.xml.sax,org.xml.sax.helpers Bundle-SymbolicName: com.acme.testcontext - - ---- The Activator code: [source, java, subs="{sub-order}"] ---- - public void start(final BundleContext context) throws Exception { ContextHandler ch = new ContextHandler(); @@ -714,17 +567,15 @@ public void start(final BundleContext context) throws Exception @Override public void contextDestroyed(ServletContextEvent sce) { - System.err.println("Context is destroyed!"); + System.err.println("Context is destroyed!"); } - + }); Dictionary props = new Hashtable(); props.put("Web-ContextPath","/acme"); props.put("Jetty-ContextFilePath", "acme.xml"); context.registerService(ContextHandler.class.getName(),ch,props); } - - ---- The contents of the `acme.xml` context file: @@ -737,64 +588,43 @@ include::{SRCDIR}/jetty-osgi/test-jetty-osgi-context/src/main/context/acme.xml[] You may also use the following OSGi Service properties: managedServerName:: - The name of the Server instance to which to deploy this webapp. If not - specified, defaults to the default Server instance called - "defaultJettyServer". +The name of the Server instance to which to deploy this webapp. +If not specified, defaults to the default Server instance called "defaultJettyServer". ===== Extra Properties Available for Context Xml Files -Before the Jetty OSGi container applies a context xml file found in a -Jetty-ContextFilePath property, it sets a few useful properties that can -be referred to within the xml file: +Before the Jetty OSGi container applies a context xml file found in a `Jetty-ContextFilePath` property, it sets a few useful properties that can be referred to within the xml file: Server:: - This is a reference to the Jetty org.eclipse.jetty.server.Server - instance to which the ContextHandler being configured in the context - xml file will be deployed. +This is a reference to the Jetty `org.eclipse.jetty.server.Server` instance to which the `ContextHandler` being configured in the context xml file will be deployed. bundle.root:: - This is a reference to the org.eclipse.jetty.util.resource.Resource - that represents the location of the Bundle publishing the - ContextHandler as a Service(obtained by calling Bundle.getLocation()). - Note that this could be either a directory in the file system if the - OSGi container automatically unpacks bundles, or it may be a jar:file: - url if the bundle remains packed. +This is a reference to the `org.eclipse.jetty.util.resource.Resource` that represents the location of the Bundle publishing the `ContextHandler` as a Service (obtained by calling `Bundle.getLocation()`). +Note that this could be either a directory in the file system if the OSGi container automatically unpacks bundles, or it may be a jar:file: url if the bundle remains packed. -In the example above, you can see both of these properties being used in -the context xml file. +In the example above, you can see both of these properties being used in the context xml file. ==== Support for the OSGi Service Platform Enterprise Specification -The Jetty OSGi container implements several aspects of the Enterprise -Specification v4.2 for the WebAppContexts and ContextHandlers that it -deploys from either bundles or OSGi services as outlined in foregoing -sections. +The Jetty OSGi container implements several aspects of the Enterprise Specification v4.2 for the `WebAppContexts` and `ContextHandlers` that it deploys from either bundles or OSGi services as outlined in foregoing sections. ===== Context Attributes -For each WebAppContext or ContextHandler, the following context -attribute is set, as required by section__128.6.1 Bundle Context__ pg -427: +For each `WebAppContext` or `ContextHandler`, the following context attribute is set, as required by section __128.6.1 Bundle Context__ page 427: osgi-bundleContext:: - The value of this attribute is the BundleContext representing the - Bundle associated with the WebAppContext or ContextHandler. +The value of this attribute is the `BundleContext` representing the Bundle associated with the `WebAppContext` or `ContextHandler`. ===== Service Attributes -As required by the specification section _128.3.4 Publishing the Servlet -Context_ pg 421, each WebAppContext and ContextHandler deployed by the -Jetty OSGi container is also published as an OSGi service (unless it has -been already - see sections 1.6 and 1.7). The following properties are -associated with these services: +As required by the specification section _128.3.4 Publishing the Servlet Context_ page 421, each `WebAppContext` and `ContextHandler` deployed by the Jetty OSGi container is also published as an OSGi service (unless it has been already - see sections 1.6 and 1.7). +The following properties are associated with these services: osgi.web.symbolicname:: - The symbolic name of the Bundle associated with the WebAppContext or - ContextHandler +The symbolic name of the Bundle associated with the `WebAppContext` or `ContextHandler` osgi.web.version:: - The Bundle-Version header from the Bundle associated with the - WebAppContext or ContextHandler +The Bundle-Version header from the Bundle associated with the `WebAppContext` or `ContextHandler` osgi.web.contextpath:: - The context path of the WebAppContext or ContextHandler +The context path of the `WebAppContext` or `ContextHandler` ===== OSGi Events @@ -802,32 +632,23 @@ As required by the specification section _128.5 Events_ pg 426, the following OSGi Event Admin events will be posted: org/osgi/service/web/DEPLOYING:: - The Jetty OSGi container is about to deploy a WebAppContext or - ContextHandler +The Jetty OSGi container is about to deploy a `WebAppContext` or `ContextHandler` org/osgi/service/web/DEPLOYED:: - The Jetty OSGi container has finished deploying a WebAppContext or - ContextHandler and it is in service +The Jetty OSGi container has finished deploying a `WebAppContext` or `ContextHandler` and it is in service org/osgi/service/web/UNDEPLOYING:: - The Jetty OSGi container is about to undeploy a WebAppContext or - ContextHandler +The Jetty OSGi container is about to undeploy a `WebAppContext` or `ContextHandler` org/osgi/service/web/UNDEPLOYED:: - The Jetty OSGi container has finished undeploying a WebAppContext or - ContextHandler and it is no longer in service +The Jetty OSGi container has finished undeploying a `WebAppContext` or `ContextHandler` and it is no longer in service org/osgi/service/web/FAILED:: - The Jetty OSGi container failed to deploy a WebAppContext or - ContextHandler +The Jetty OSGi container failed to deploy a `WebAppContext` or `ContextHandler` ==== Using JSPs ===== Setup -In order to use JSPs with your webapps and bundles you will need to -install the JSP and JSTL jars and their dependencies into your OSGi -container. Some you will find in the Jetty distribution, whereas others -you will need to download from -http://central.maven.org/maven2/org/eclipse/jetty/orbit/[Maven central]. -Here is the list of recommended jars (NOTE the version numbers may -change in future): +In order to use JSPs with your webapps and bundles you will need to install the JSP and JSTL jars and their dependencies into your OSGi container. +Some you will find in the Jetty distribution, whereas others you will need to download from http://central.maven.org/maven2/org/eclipse/jetty/orbit/[Maven central]. +Here is the list of recommended jars (NOTE the version numbers may change in future): .Jars Required for JSP [cols=",,",options="header",] @@ -855,22 +676,14 @@ central] ____ [NOTE] -1. As of jetty-9.2.3 the jetty-osgi-boot-jsp bundle changed to using -Apache Jasper as the JSP implementation. Prior to this the Glassfish -Jasper implementation was used, which had a different set of -dependencies - pay careful attention to the jars listed both at the top -of this page and in this section, as deployment of other jars can cause -incomplete or incorrect package resolution in the OSGi container. -2. The order of deployment is important. Deploy these bundles in the -order shown or you may experience strange failures in the compilation of -jsps. This can be hard to diagnose but is almost always caused by the -ServletContainerInitializer in the org.eclipse.jetty.apache-jsp bundle -for the jsp container not being invoked due to incorrect startup of the -annotation jars. +1. As of Jetty 9.2.3 the jetty-osgi-boot-jsp bundle changed to using Apache Jasper as the JSP implementation. +Prior to this the Glassfish Jasper implementation was used, which had a different set of dependencies - pay careful attention to the jars listed both at the top of this page and in this section, as deployment of other jars can cause incomplete or incorrect package resolution in the OSGi container. +2. The order of deployment is important. +Deploy these bundles in the order shown or you may experience strange failures in the compilation of jsps. +This can be hard to diagnose but is almost always caused by the `ServletContainerInitializer` in the `org.eclipse.jetty.apache-jsp` bundle for the jsp container not being invoked due to incorrect startup of the annotation jars. ____ -For the JSTL library, we recommend the use of the implementation from -Glassfish, as it has fewer dependencies: +For the JSTL library, we recommend the use of the implementation from Glassfish, as it has fewer dependencies: .Jars Required for Glassfish JSTL [cols=",,",options="header",] @@ -885,9 +698,7 @@ Glassfish, as it has fewer dependencies: |org.glassfish.web.javax.servlet.jsp.jstl |Distribution lib/jsp |======================================================================= -However, if you wish, you may use the JSTL implementation from Apache -instead, although you will need to source some dependency jars with -suitable OSGi manifests: +However, if you wish, you may use the JSTL implementation from Apache instead, although you will need to source some dependency jars with suitable OSGi manifests: .Jars Required for Apache JSTL [cols=",,",options="header",] @@ -912,36 +723,24 @@ Orbit] ===== The jetty-osgi-boot-jsp jar -To be able to use JSPs you will need to also install the -http://central.maven.org/maven2/org/eclipse/jetty/osgi/jetty-osgi-boot-jsp/[jetty-osgi-boot-jsp.jar] -into your OSGi container. This jar can be obtained from maven central -http://central.maven.org/maven2/org/eclipse/jetty/osgi/jetty-osgi-boot-jsp/[here]. +To be able to use JSPs you will need to also install the http://central.maven.org/maven2/org/eclipse/jetty/osgi/jetty-osgi-boot-jsp/[jetty-osgi-boot-jsp.jar] into your OSGi container. +This jar can be obtained from maven central http://central.maven.org/maven2/org/eclipse/jetty/osgi/jetty-osgi-boot-jsp/[here]. -This bundle acts as a fragment extension to the jetty-osgi-boot.jar and -adds in support for using JSP. +This bundle acts as a fragment extension to the jetty-osgi-boot.jar and adds in support for using JSP. ====== Using TagLibs -The Jetty JSP OSGi container will make available the JSTL tag library to -all webapps. If you only use this tag library, then your webapp will -work without any further modification. +The Jetty JSP OSGi container will make available the JSTL tag library to all webapps. +If you only use this tag library, then your webapp will work without any further modification. -However, if you make use of other taglibs, you will need to ensure that -they are installed into the OSGi container, and also define some System -properties and/or MANIFEST headers in your webapp. This is necessary -because the classloading regime used by the OSGi container is very -different than that used by JSP containers, and the MANIFEST of a normal -webapp does not contain enough information for the OSGi environment to -allow a JSP container to find and resolve TLDs referenced in the -webapp's .jsp files. +However, if you make use of other taglibs, you will need to ensure that they are installed into the OSGi container, and also define some System properties and/or `MANIFEST` headers in your webapp. +This is necessary because the classloading regime used by the OSGi container is very different than that used by JSP containers, and the `MANIFEST` of a normal webapp does not contain enough information for the OSGi environment to allow a JSP container to find and resolve TLDs referenced in the webapp's .jsp files. -Firstly, lets look at an example of a web bundle's modified MANIFEST -file so you get an idea of what is required. This example is a web -bundle that uses the Spring servlet framework: +Firstly, lets look at an example of a web bundle's modified `MANIFEST` file so you get an idea of what is required. +This example is a web bundle that uses the Spring servlet framework: [source, plain, subs="{sub-order}"] ---- - Bundle-SymbolicName: com.acme.sample Bundle-Name: WebSample Web-ContextPath: taglibs @@ -954,67 +753,41 @@ Import-Package: org.eclipse.virgo.web.dm;version="[3.0.0,4.0.0)",org.s annotation;version="[2.5.6,4.0.0)",org.springframework.web.context;ve rsion="[2.5.6,4.0.0)",org.springframework.web.servlet;version="[2.5.6 ,4.0.0)",org.springframework.web.servlet.view;version="[2.5.6,4.0.0)" - - ---- -The *Require-TldBundle* header tells the Jetty OSGi container that this -bundle contains TLDs that need to be passed over to the JSP container -for processing. The *Import-Bundle* header ensures that the -implementation classes for these TLDs will be available to the webapp on -the OSGi classpath. +The *Require-TldBundle* header tells the Jetty OSGi container that this bundle contains TLDs that need to be passed over to the JSP container for processing. +The *Import-Bundle* header ensures that the implementation classes for these TLDs will be available to the webapp on the OSGi classpath. -The format of the *Require-TldBundle* header is a comma separated list -of one or more symbolic names of bundles containing TLDs. +The format of the *Require-TldBundle* header is a comma separated list of one or more symbolic names of bundles containing TLDs. ====== Container Path Taglibs -Some TLD jars are required to be found on the Jetty OSGi container's -classpath, rather than considered part of the web bundle's classpath. -For example, this is true of JSTL and Java Server Faces. The Jetty OSGi -container takes care of JSTL for you, but you can control which other -jars are considered as part of the container's classpath by using the -System property **org.eclipse.jetty.osgi.tldbundles**: +Some TLD jars are required to be found on the Jetty OSGi container's classpath, rather than considered part of the web bundle's classpath. +For example, this is true of JSTL and Java Server Faces. +The Jetty OSGi container takes care of JSTL for you, but you can control which other jars are considered as part of the container's classpath by using the System property **org.eclipse.jetty.osgi.tldbundles**: org.eclipse.jetty.osgi.tldbundles:: - System property defined on the OSGi environment that is a comma - separated list of symbolic names of bundles containing taglibs that - will be treated as if they are on the container's classpath for web - bundles. For example: - + +System property defined on the OSGi environment that is a comma separated list of symbolic names of bundles containing taglibs that will be treated as if they are on the container's classpath for web bundles. +For example: ++ [source, plain, subs="{sub-order}"] ---- org.eclipse.jetty.osgi.tldbundles=com.acme.special.tags,com.foo.web,org.bar.web.framework ---- - + - You will still need to define the *Import-Bundle* header in the - MANIFEST file for the web bundle to ensure that the TLD bundles are on - the OSGi classpath. ++ +You will still need to define the *Import-Bundle* header in the `MANIFEST` file for the web bundle to ensure that the TLD bundles are on the OSGi classpath. -Alternatively or additionally, you can define a pattern as a context -attribute that will match symbolic bundle names in the OSGi environment -containing TLDs that should be considered as discovered from the -container's classpath. +Alternatively or additionally, you can define a pattern as a context attribute that will match symbolic bundle names in the OSGi environment containing TLDs that should be considered as discovered from the container's classpath. org.eclipse.jetty.server.webapp.containerIncludeBundlePattern:: - This pattern must be specified as a context attribute of the - WebAppContext representing the web bundle. Unless you are deploying - your own WebAppContext (see link:#services-as-webapps[Deploying - Services as Webapps]), you won't have a reference to the WebAppContext - to do this. In that case, it can be specified on the - org.eclipse.jetty.deploy.DeploymentManager, where it will be applied - to _every_ webapp deployed by the Jetty OSGi container. The - jetty-osgi-boot.jar contains the default - jettyhome/etc/jetty-deploy.xml file where the DeploymentManager is - defined. To set the pattern, you will need to provide your own etc - files - see the section on link:#customize-jetty-container[customizing - the jetty container] for how to do this. Here's how the - jetty-deploy.xml file would look if we defined a pattern that matched - all bundle symbolic names ending in "tag" and "web": - + +This pattern must be specified as a context attribute of the `WebAppContext` representing the web bundle. +Unless you are deploying your own `WebAppContext` (see link:#services-as-webapps[Deploying Services as Webapps]), you won't have a reference to the `WebAppContext` to do this. +In that case, it can be specified on the `org.eclipse.jetty.deploy.DeploymentManager`, where it will be applied to _every_ webapp deployed by the Jetty OSGi container. +The `jetty-osgi-boot.jar` contains the default `jettyhome/etc/jetty-deploy.xml` file where the `DeploymentManager` is defined. +To set the pattern, you will need to provide your own etc files - see the section on link:#customize-jetty-container[customizing the jetty container] for how to do this. Here's how the `jetty-deploy.xml` file would look if we defined a pattern that matched all bundle symbolic names ending in "tag" and "web": ++ [source, xml, subs="{sub-order}"] ---- - @@ -1032,20 +805,15 @@ org.eclipse.jetty.server.webapp.containerIncludeBundlePattern:: - - ---- - + - Again, you will still need to define suitable *Import-Bundle* headers - in your web bundle MANIFEST to ensure that bundles matching the - pattern are available on the OSGi class path. ++ +Again, you will still need to define suitable *Import-Bundle* headers in your web bundle `MANIFEST` to ensure that bundles matching the pattern are available on the OSGi class path. [[osgi-annotations]] ==== Using Annotations/ServletContainerInitializers -Annotations are very much part of the Servlet 3.0 and 3.1 -specifications. In order to use them with Jetty in OSGi, you will need -to deploy some extra jars into your OSGi container: +Annotations are very much part of the Servlet 3.0 and 3.1 specifications. +In order to use them with Jetty in OSGi, you will need to deploy some extra jars into your OSGi container: .Jars Required for Annotations [cols=",,",options="header",] @@ -1090,66 +858,41 @@ org.eclipse.jetty.orbit:javax.mail.glassfish-1.4.1.v201005082020.jar)^*^ ____ [IMPORTANT] -If you wish to use JSPs you will need to deploy these annotation-related -jars. +If you wish to use JSPs you will need to deploy these annotation-related jars. ____ ____ [NOTE] -You may be able to deploy later versions or other providers of these -specifications, however these particular versions are known to have -correct manifests and have been tested and known to work with OSGi +You may be able to deploy later versions or other providers of these specifications, however these particular versions are known to have correct manifests and have been tested and known to work with OSGi. ____ -Even if your webapp itself does not not use annotations, you may need to -deploy these jars because your webapp depends on a Jetty module or a 3rd -party library that uses a -http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContainerInitializer.html[javax.servlet.ServletContainerInitializer]. -This interface requires annotation support. It is implemented by -providers of code that extend the capabilities of the container. An -example of this is the Jetty JSR356 Websocket implementation, although -it is being used increasingly commonly in popular libraries like -link:http://projects.spring.io/spring-framework/[Spring], link:https://jersey.java.net/[Jersey] -and JSP containers. +Even if your webapp itself does not not use annotations, you may need to deploy these jars because your webapp depends on a Jetty module or a 3rd party library that uses a http://docs.oracle.com/javaee/6/api/javax/servlet/ServletContainerInitializer.html[javax.servlet.ServletContainerInitializer]. +This interface requires annotation support. +It is implemented by providers of code that extend the capabilities of the container. +An xample of this is the Jetty JSR356 Websocket implementation, although it is being used increasingly commonly in popular libraries like link:http://projects.spring.io/spring-framework/[Spring], link:https://jersey.java.net/[Jersey] and JSP containers. -To find ServletContainerInitializers on the classpath, Jetty uses the -Java -http://docs.oracle.com/javase/7/docs/api/java/util/ServiceLoader.html[ServiceLoader] -mechanism. For this to function in OSGi, you will need an OSGi R5 -compatible container, and have support for the -http://blog.osgi.org/2013/02/javautilserviceloader-in-osgi.html[Service -Loader Mediator]. Jetty has been tested with -thehttp://aries.apache.org/modules/spi-fly.html[Aries SpiFly]module, -which is the reference implementation of the Service Loader Mediator, -and is listed in the jars above. +To find `ServletContainerInitializers` on the classpath, Jetty uses the Java http://docs.oracle.com/javase/7/docs/api/java/util/ServiceLoader.html[`ServiceLoader`] +mechanism. +For this to function in OSGi, you will need an OSGi R5 compatible container, and have support for the http://blog.osgi.org/2013/02/javautilserviceloader-in-osgi.html[Service Loader Mediator]. +Jetty has been tested with the http://aries.apache.org/modules/spi-fly.html[Aries SpiFly] module,which is the reference implementation of the Service Loader Mediator, and is listed in the jars above. ==== OSGi Containers ===== Felix -The Jetty OSGi integration has been successfully tested against -http://felix.apache.org/[Felix] 5.0.0. +The Jetty OSGi integration has been successfully tested against http://felix.apache.org/[Felix] 5.0.0. -You will require the following extra Felix services, available as -separately downloadable jars: +You will require the following extra Felix services, available as separately downloadable jars: -* http://felix.apache.org/documentation/subprojects/apache-felix-config-admin.html[Felix -Configuration Admin Service] -* http://felix.apache.org/documentation/subprojects/apache-felix-event-admin.html[Felix -Event Admin Service] +* http://felix.apache.org/documentation/subprojects/apache-felix-config-admin.html[Felix Configuration Admin Service] +* http://felix.apache.org/documentation/subprojects/apache-felix-event-admin.html[Felix Event Admin Service] -Unfortunately, as of Felix 4.x there is a difficultly with the -resolution of the javax.transaction package. +Unfortunately, as of Felix 4.x there is a difficultly with the resolution of the `javax.transaction` package. A link:http://mail-archives.apache.org/mod_mbox/felix-users/201211.mbox/%3CCAPr=90M+5vYjPqAvyTU+gYHr64y_FosBYELeUYcU_rFEJF3Cxw@mail.gmail.com%3E[description of the problem] and hint to solving it is described [http://mail-archives.apache.org/mod_mbox/felix-users/201211.mbox/%3CCAPr=90M+5vYjPqAvyTU+gYHr64y_FosBYELeUYcU_rFEJF3Cxw@mail.gmail.com%3E[here]]. -The simplest solution for this is to extract the `default.properties` -file from the `felix.jar, change the declaration of the javax.sql and - javax.transaction packages` and set the changed lines as the value -of the `org.osgi.framework.system.packages` property in the -`conf/config.properties` file. +The simplest solution for this is to extract the `default.properties` file from the `felix.jar`, change the declaration of the `javax.sql` and `javax.transaction` packages and set the changed lines as the value of the `org.osgi.framework.system.packages` property in the `conf/config.properties` file. -The `default.properties` file defines the default -`org.osgi.framework.system.packages` property like this: +The `default.properties` file defines the default `org.osgi.framework.system.packages` property like this: [source,properties] ---- @@ -1171,13 +914,9 @@ org.osgi.framework.system.packages=org.osgi.framework; version=1.7.0, \ ${jre-${java.specification.version}} ---- -The last line must be substituted for one of the definitions further -down in the file that is suitable for the jvm you are using. +The last line must be substituted for one of the definitions further down in the file that is suitable for the jvm you are using. -You will take these lines and copy them into the -`conf/config.properties` file, after having replaced the line -$\{jre-$\{java.specification.version}} with all of the lines relevant to -your version of the jvm. +You will take these lines and copy them into the `conf/config.properties` file, after having replaced the line `$\{jre-$\{java.specification.version}}` with all of the lines relevant to your version of the jvm. For example, for a 1.7 jvm, you will find this property definition: @@ -1339,19 +1078,16 @@ jre-1.7=, \ org.xml.sax;version="0.0.0.1_007_JavaSE" ---- -Remove the definition for the `javax.transaction` packages, and remove -the `uses:=` clause for the `javax.sql` packages (but leaving the -`version` clause). Concatenate all the lines together. You'll wind up -with something like this in your `conf/config.properties` file: +Remove the definition for the `javax.transaction` packages, and remove the `uses:=` clause for the `javax.sql` packages (but leaving the `version` clause). Concatenate all the lines together. +You'll wind up with something like this in your `conf/config.properties` file: [source,properties] ---- org.osgi.framework.system.packages=org.osgi.framework;version=1.7.0, org.osgi.framework.hooks.bundle;version=1.1.0, org.osgi.framework.hooks.resolver;version=1.0.0, org.osgi.framework.hooks.service;version=1.1.0, org.osgi.framework.hooks.weaving;version=1.0.0, org.osgi.framework.launch;version=1.1.0, org.osgi.framework.namespace;version=1.0.0, org.osgi.framework.startlevel;version=1.0.0, org.osgi.framework.wiring;version=1.1.0, org.osgi.resource;version=1.0.0, org.osgi.service.packageadmin; version=1.2.0, org.osgi.service.startlevel; version=1.1.0, org.osgi.service.url;version=1.0.0, org.osgi.util.tracker;version=1.5.1 javax.accessibility;uses:="javax.swing.text";version="0.0.0.1_007_JavaSE", javax.activation;version="0.0.0.1_007_JavaSE", javax.activity;version="0.0.0.1_007_JavaSE", javax.annotation.processing;uses:="javax.tools,javax.lang.model,javax.lang.model.element,javax.lang.model.util";version="0.0.0.1_007_JavaSE", javax.annotation;version="0.0.0.1_007_JavaSE", javax.crypto.interfaces;uses:="javax.crypto.spec,javax.crypto";version="0.0.0.1_007_JavaSE", javax.crypto.spec;uses:="javax.crypto";version="0.0.0.1_007_JavaSE", javax.crypto;uses:="javax.crypto.spec";version="0.0.0.1_007_JavaSE", javax.imageio.event;uses:="javax.imageio";version="0.0.0.1_007_JavaSE", javax.imageio.metadata;uses:="org.w3c.dom,javax.imageio";version="0.0.0.1_007_JavaSE", javax.imageio.plugins.bmp;uses:="javax.imageio";version="0.0.0.1_007_JavaSE", javax.imageio.plugins.jpeg;uses:="javax.imageio";version="0.0.0.1_007_JavaSE", javax.imageio.spi;uses:="javax.imageio.stream,javax.imageio,javax.imageio.metadata";version="0.0.0.1_007_JavaSE", javax.imageio.stream;uses:="javax.imageio";version="0.0.0.1_007_JavaSE", javax.imageio;uses:="javax.imageio.metadata,javax.imageio.stream,javax.imageio.spi,javax.imageio.event";version="0.0.0.1_007_JavaSE", javax.jws.soap;version="0.0.0.1_007_JavaSE", javax.jws;version="0.0.0.1_007_JavaSE", javax.lang.model.element;uses:="javax.lang.model.type,javax.lang.model";version="0.0.0.1_007_JavaSE", javax.lang.model.type;uses:="javax.lang.model.element,javax.lang.model";version="0.0.0.1_007_JavaSE", javax.lang.model.util;uses:="javax.lang.model,javax.lang.model.element,javax.annotation.processing,javax.lang.model.type";version="0.0.0.1_007_JavaSE", javax.lang.model;version="0.0.0.1_007_JavaSE", javax.management.loading;uses:="javax.management";version="0.0.0.1_007_JavaSE", javax.management.modelmbean;uses:="javax.management,javax.management.loading";version="0.0.0.1_007_JavaSE", javax.management.monitor;uses:="javax.management";version="0.0.0.1_007_JavaSE", javax.management.openmbean;uses:="javax.management";version="0.0.0.1_007_JavaSE", javax.management.relation;uses:="javax.management";version="0.0.0.1_007_JavaSE", javax.management.remote.rmi;uses:="javax.management.remote,javax.security.auth,javax.management,javax.management.loading,javax.naming,javax.rmi.ssl,org.omg.CORBA,org.omg.CORBA_2_3.portable,org.omg.CORBA.portable,javax.rmi.CORBA,javax.rmi";version="0.0.0.1_007_JavaSE", javax.management.remote;uses:="javax.security.auth,javax.management";version="0.0.0.1_007_JavaSE", javax.management.timer;uses:="javax.management";version="0.0.0.1_007_JavaSE", javax.management;uses:="javax.management.loading,javax.management.openmbean";version="0.0.0.1_007_JavaSE", javax.naming.directory;uses:="javax.naming";version="0.0.0.1_007_JavaSE", javax.naming.event;uses:="javax.naming,javax.naming.directory";version="0.0.0.1_007_JavaSE", javax.naming.ldap;uses:="javax.naming,javax.naming.directory,javax.net.ssl,javax.naming.event";version="0.0.0.1_007_JavaSE", javax.naming.spi;uses:="javax.naming,javax.naming.directory";version="0.0.0.1_007_JavaSE", javax.naming;uses:="javax.naming.spi";version="0.0.0.1_007_JavaSE", javax.net.ssl;uses:="javax.security.cert,javax.security.auth.x500,javax.net";version="0.0.0.1_007_JavaSE", javax.net;version="0.0.0.1_007_JavaSE", javax.print.attribute.standard;uses:="javax.print.attribute";version="0.0.0.1_007_JavaSE", javax.print.attribute;version="0.0.0.1_007_JavaSE", javax.print.event;uses:="javax.print,javax.print.attribute";version="0.0.0.1_007_JavaSE", javax.print;uses:="javax.print.attribute,javax.print.event,javax.print.attribute.standard";version="0.0.0.1_007_JavaSE", javax.rmi.CORBA;uses:="org.omg.CORBA,org.omg.CORBA_2_3.portable,org.omg.CORBA.portable,org.omg.SendingContext";version="0.0.0.1_007_JavaSE", javax.rmi.ssl;uses:="javax.net,javax.net.ssl";version="0.0.0.1_007_JavaSE", javax.rmi;uses:="org.omg.CORBA,javax.rmi.CORBA";version="0.0.0.1_007_JavaSE", javax.script;version="0.0.0.1_007_JavaSE", javax.security.auth.callback;version="0.0.0.1_007_JavaSE", javax.security.auth.kerberos;uses:="javax.security.auth,javax.crypto";version="0.0.0.1_007_JavaSE", javax.security.auth.login;uses:="javax.security.auth,javax.security.auth.callback";version="0.0.0.1_007_JavaSE", javax.security.auth.spi;uses:="javax.security.auth.callback,javax.security.auth.login,javax.security.auth";version="0.0.0.1_007_JavaSE", javax.security.auth.x500;uses:="javax.security.auth";version="0.0.0.1_007_JavaSE", javax.security.auth;version="0.0.0.1_007_JavaSE", javax.security.cert;version="0.0.0.1_007_JavaSE", javax.security.sasl;uses:="javax.security.auth.callback";version="0.0.0.1_007_JavaSE", javax.sound.midi.spi;uses:="javax.sound.midi";version="0.0.0.1_007_JavaSE", javax.sound.midi;uses:="javax.sound.midi.spi";version="0.0.0.1_007_JavaSE", javax.sound.sampled.spi;uses:="javax.sound.sampled";version="0.0.0.1_007_JavaSE", javax.sound.sampled;uses:="javax.sound.sampled.spi";version="0.0.0.1_007_JavaSE", javax.sql.rowset.serial;version="0.0.0.1_007_JavaSE", javax.sql.rowset.spi;version="0.0.0.1_007_JavaSE", javax.sql.rowset;version="0.0.0.1_007_JavaSE", javax.sql;version="0.0.0.1_007_JavaSE", javax.swing.border;uses:="javax.swing";version="0.0.0.1_007_JavaSE", javax.swing.colorchooser;uses:="javax.swing,javax.swing.border,javax.swing.event,javax.swing.text";version="0.0.0.1_007_JavaSE", javax.swing.event;uses:="javax.swing,javax.swing.text,javax.swing.table,javax.swing.tree,javax.swing.undo";version="0.0.0.1_007_JavaSE", javax.swing.filechooser;uses:="javax.swing";version="0.0.0.1_007_JavaSE", javax.swing.plaf.basic;uses:="javax.swing.border,javax.swing,javax.swing.plaf,javax.swing.text,javax.swing.event,javax.swing.colorchooser,javax.accessibility,javax.swing.filechooser,javax.swing.text.html,javax.sound.sampled,javax.swing.table,javax.swing.plaf.synth,javax.swing.tree";version="0.0.0.1_007_JavaSE", javax.swing.plaf.metal;uses:="javax.swing.plaf,javax.swing,javax.swing.border,javax.swing.text,javax.swing.plaf.basic,javax.swing.filechooser,javax.swing.event,javax.swing.tree";version="0.0.0.1_007_JavaSE", javax.swing.plaf.multi;uses:="javax.accessibility,javax.swing,javax.swing.plaf,javax.swing.filechooser,javax.swing.text,javax.swing.tree";version="0.0.0.1_007_JavaSE", javax.swing.plaf.nimbus;uses:="javax.swing,javax.swing.plaf,javax.swing.border,javax.swing.plaf.synth";version="0.0.0.1_007_JavaSE", javax.swing.plaf.synth;uses:="javax.swing,javax.swing.plaf,javax.swing.text,javax.swing.border,javax.swing.plaf.basic,javax.swing.colorchooser,javax.swing.event,javax.xml.parsers,org.xml.sax,org.xml.sax.helpers,javax.swing.table,javax.swing.tree";version="0.0.0.1_007_JavaSE", javax.swing.plaf;uses:="javax.swing,javax.swing.border,javax.accessibility,javax.swing.filechooser,javax.swing.text,javax.swing.tree";version="0.0.0.1_007_JavaSE", javax.swing.table;uses:="javax.swing.event,javax.swing.plaf,javax.swing.border,javax.swing,javax.accessibility";version="0.0.0.1_007_JavaSE", javax.swing.text.html.parser;uses:="javax.swing.text,javax.swing.text.html";version="0.0.0.1_007_JavaSE", javax.swing.text.html;uses:="javax.swing.event,javax.swing.text,javax.accessibility,javax.swing,javax.swing.plaf,javax.swing.border,javax.swing.undo";version="0.0.0.1_007_JavaSE", javax.swing.text.rtf;uses:="javax.swing.text";version="0.0.0.1_007_JavaSE", javax.swing.text;uses:="javax.swing.event,javax.swing.tree,javax.swing.undo,javax.swing,javax.swing.plaf,javax.swing.plaf.basic,javax.print,javax.print.attribute,javax.accessibility,javax.swing.text.html";version="0.0.0.1_007_JavaSE", javax.swing.tree;uses:="javax.swing.event,javax.swing,javax.swing.border,javax.swing.plaf,javax.swing.plaf.basic";version="0.0.0.1_007_JavaSE", javax.swing.undo;uses:="javax.swing,javax.swing.event";version="0.0.0.1_007_JavaSE", javax.swing;uses:="javax.swing.event,javax.accessibility,javax.swing.text,javax.swing.plaf,javax.swing.border,javax.swing.tree,javax.swing.table,javax.swing.colorchooser,javax.swing.plaf.basic,javax.swing.text.html,javax.swing.filechooser,javax.print,javax.print.attribute,javax.swing.plaf.metal";version="0.0.0.1_007_JavaSE", javax.tools;uses:="javax.lang.model.element,javax.annotation.processing,javax.lang.model";version="0.0.0.1_007_JavaSE", javax.xml.bind.annotation.adapters;uses:="javax.xml.bind";version="0.0.0.1_007_JavaSE", javax.xml.bind.annotation;uses:="javax.xml.transform,javax.xml.bind,javax.xml.parsers,javax.xml.transform.dom,org.w3c.dom";version="0.0.0.1_007_JavaSE", javax.xml.bind.attachment;uses:="javax.activation";version="0.0.0.1_007_JavaSE", javax.xml.bind.helpers;uses:="javax.xml.bind.annotation.adapters,javax.xml.transform.dom,org.w3c.dom,org.xml.sax,javax.xml.bind.attachment,javax.xml.stream,javax.xml.transform,javax.xml.transform.stream,javax.xml.validation,javax.xml.transform.sax,javax.xml.bind,javax.xml.parsers";version="0.0.0.1_007_JavaSE", javax.xml.bind.util;uses:="javax.xml.transform.sax,javax.xml.bind,org.xml.sax,org.xml.sax.ext,org.xml.sax.helpers";version="0.0.0.1_007_JavaSE", javax.xml.bind;uses:="javax.xml.validation,javax.xml.namespace,javax.xml.datatype,javax.xml.transform,javax.xml.bind.annotation,javax.xml.transform.stream,org.w3c.dom,javax.xml.bind.attachment,javax.xml.stream,javax.xml.bind.annotation.adapters,org.xml.sax";version="0.0.0.1_007_JavaSE", javax.xml.crypto.dom;uses:="javax.xml.crypto,org.w3c.dom";version="0.0.0.1_007_JavaSE", javax.xml.crypto.dsig.dom;uses:="javax.xml.crypto.dsig,javax.xml.crypto,org.w3c.dom,javax.xml.crypto.dom";version="0.0.0.1_007_JavaSE", javax.xml.crypto.dsig.keyinfo;uses:="javax.xml.crypto";version="0.0.0.1_007_JavaSE", javax.xml.crypto.dsig.spec;uses:="javax.xml.crypto";version="0.0.0.1_007_JavaSE", javax.xml.crypto.dsig;uses:="javax.xml.crypto,javax.xml.crypto.dsig.spec,javax.xml.crypto.dsig.keyinfo";version="0.0.0.1_007_JavaSE", javax.xml.crypto;uses:="javax.xml.crypto.dsig.keyinfo";version="0.0.0.1_007_JavaSE", javax.xml.datatype;uses:="javax.xml.namespace";version="0.0.0.1_007_JavaSE", javax.xml.namespace;version="0.0.0.1_007_JavaSE", javax.xml.parsers;uses:="javax.xml.validation,org.w3c.dom,org.xml.sax,org.xml.sax.helpers";version="0.0.0.1_007_JavaSE", javax.xml.soap;uses:="javax.activation,javax.xml.namespace,org.w3c.dom,javax.xml.transform.dom,javax.xml.transform";version="0.0.0.1_007_JavaSE", javax.xml.stream.events;uses:="javax.xml.namespace,javax.xml.stream";version="0.0.0.1_007_JavaSE", javax.xml.stream.util;uses:="javax.xml.stream,javax.xml.stream.events,javax.xml.namespace";version="0.0.0.1_007_JavaSE", javax.xml.stream;uses:="javax.xml.stream.events,javax.xml.namespace,javax.xml.stream.util,javax.xml.transform";version="0.0.0.1_007_JavaSE", javax.xml.transform.dom;uses:="javax.xml.transform,org.w3c.dom";version="0.0.0.1_007_JavaSE", javax.xml.transform.sax;uses:="org.xml.sax.ext,javax.xml.transform,org.xml.sax,javax.xml.transform.stream";version="0.0.0.1_007_JavaSE", javax.xml.transform.stax;uses:="javax.xml.stream,javax.xml.transform,javax.xml.stream.events";version="0.0.0.1_007_JavaSE", javax.xml.transform.stream;uses:="javax.xml.transform";version="0.0.0.1_007_JavaSE", javax.xml.transform;version="0.0.0.1_007_JavaSE", javax.xml.validation;uses:="org.w3c.dom.ls,javax.xml.transform,javax.xml.transform.stream,org.xml.sax,org.w3c.dom";version="0.0.0.1_007_JavaSE", javax.xml.ws.handler.soap;uses:="javax.xml.ws.handler,javax.xml.namespace,javax.xml.soap,javax.xml.bind";version="0.0.0.1_007_JavaSE", javax.xml.ws.handler;uses:="javax.xml.ws,javax.xml.namespace";version="0.0.0.1_007_JavaSE", javax.xml.ws.http;uses:="javax.xml.ws";version="0.0.0.1_007_JavaSE", javax.xml.ws.soap;uses:="javax.xml.ws.spi,javax.xml.ws,javax.xml.soap";version="0.0.0.1_007_JavaSE", javax.xml.ws.spi.http;version="0.0.0.1_007_JavaSE", javax.xml.ws.spi;uses:="javax.xml.ws,javax.xml.ws.wsaddressing,javax.xml.transform,org.w3c.dom,javax.xml.namespace,javax.xml.ws.handler,javax.xml.bind";version="0.0.0.1_007_JavaSE", javax.xml.ws.wsaddressing;uses:="javax.xml.bind.annotation,javax.xml.namespace,org.w3c.dom,javax.xml.transform,javax.xml.bind,javax.xml.ws,javax.xml.ws.spi";version="0.0.0.1_007_JavaSE", javax.xml.ws;uses:="javax.xml.ws.handler,javax.xml.ws.spi,javax.xml.ws.spi.http,javax.xml.transform,org.w3c.dom,javax.xml.bind.annotation,javax.xml.transform.stream,javax.xml.bind,javax.xml.namespace";version="0.0.0.1_007_JavaSE", javax.xml.xpath;uses:="org.xml.sax,javax.xml.namespace";version="0.0.0.1_007_JavaSE", javax.xml;version="0.0.0.1_007_JavaSE", org.ietf.jgss;version="0.0.0.1_007_JavaSE", org.omg.CORBA.DynAnyPackage;uses:="org.omg.CORBA";version="0.0.0.1_007_JavaSE", org.omg.CORBA.ORBPackage;uses:="org.omg.CORBA";version="0.0.0.1_007_JavaSE", org.omg.CORBA.TypeCodePackage;uses:="org.omg.CORBA";version="0.0.0.1_007_JavaSE", org.omg.CORBA.portable;uses:="org.omg.CORBA,org.omg.CORBA_2_3.portable";version="0.0.0.1_007_JavaSE", org.omg.CORBA;uses:="org.omg.CORBA.portable,org.omg.CORBA.DynAnyPackage,org.omg.CORBA.ORBPackage,org.omg.CORBA_2_3.portable,org.omg.CORBA.TypeCodePackage";version="0.0.0.1_007_JavaSE", org.omg.CORBA_2_3.portable;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_007_JavaSE", org.omg.CORBA_2_3;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_007_JavaSE", org.omg.CosNaming.NamingContextExtPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_007_JavaSE", org.omg.CosNaming.NamingContextPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable,org.omg.CosNaming";version="0.0.0.1_007_JavaSE", org.omg.CosNaming;uses:="org.omg.CORBA.portable,org.omg.CORBA,org.omg.PortableServer,org.omg.CosNaming.NamingContextPackage,org.omg.CosNaming.NamingContextExtPackage";version="0.0.0.1_007_JavaSE", org.omg.Dynamic;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_007_JavaSE", org.omg.DynamicAny.DynAnyFactoryPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_007_JavaSE", org.omg.DynamicAny.DynAnyPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_007_JavaSE", org.omg.DynamicAny;uses:="org.omg.CORBA,org.omg.CORBA.portable,org.omg.DynamicAny.DynAnyFactoryPackage,org.omg.DynamicAny.DynAnyPackage";version="0.0.0.1_007_JavaSE", org.omg.IOP.CodecFactoryPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_007_JavaSE", org.omg.IOP.CodecPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_007_JavaSE", org.omg.IOP;uses:="org.omg.CORBA,org.omg.CORBA.portable,org.omg.IOP.CodecFactoryPackage,org.omg.IOP.CodecPackage";version="0.0.0.1_007_JavaSE", org.omg.Messaging;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_007_JavaSE", org.omg.PortableInterceptor.ORBInitInfoPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_007_JavaSE", org.omg.PortableInterceptor;uses:="org.omg.CORBA,org.omg.CORBA.portable,org.omg.IOP,org.omg.PortableInterceptor.ORBInitInfoPackage,org.omg.CORBA_2_3.portable,org.omg.Dynamic";version="0.0.0.1_007_JavaSE", org.omg.PortableServer.CurrentPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_007_JavaSE", org.omg.PortableServer.POAManagerPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_007_JavaSE", org.omg.PortableServer.POAPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_007_JavaSE", org.omg.PortableServer.ServantLocatorPackage;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_007_JavaSE", org.omg.PortableServer.portable;uses:="org.omg.CORBA,org.omg.PortableServer";version="0.0.0.1_007_JavaSE", org.omg.PortableServer;uses:="org.omg.CORBA,org.omg.CORBA.portable,org.omg.PortableServer.CurrentPackage,org.omg.PortableServer.POAManagerPackage,org.omg.PortableServer.POAPackage,org.omg.PortableServer.portable,org.omg.CORBA_2_3,org.omg.PortableServer.ServantLocatorPackage";version="0.0.0.1_007_JavaSE", org.omg.SendingContext;uses:="org.omg.CORBA,org.omg.CORBA.portable";version="0.0.0.1_007_JavaSE", org.omg.stub.java.rmi;uses:="javax.rmi.CORBA";version="0.0.0.1_007_JavaSE", org.w3c.dom.bootstrap;uses:="org.w3c.dom";version="0.0.0.1_007_JavaSE", org.w3c.dom.events;uses:="org.w3c.dom,org.w3c.dom.views";version="0.0.0.1_007_JavaSE", org.w3c.dom.ls;uses:="org.w3c.dom,org.w3c.dom.events,org.w3c.dom.traversal";version="0.0.0.1_007_JavaSE", org.w3c.dom;version="0.0.0.1_007_JavaSE", org.xml.sax.ext;uses:="org.xml.sax,org.xml.sax.helpers";version="0.0.0.1_007_JavaSE", org.xml.sax.helpers;uses:="org.xml.sax";version="0.0.0.1_007_JavaSE", org.xml.sax;version="0.0.0.1_007_JavaSE" ---- -You should now be able to start Felix, and deploy all the jars listed on -this page. You should see output similar to this on the console, using -the `felix:lb` command: +You should now be able to start Felix, and deploy all the jars listed on this page. +You should see output similar to this on the console, using the `felix:lb` command: .... ID|State |Level|Name @@ -1397,8 +1133,7 @@ the `felix:lb` command: ===== Eclipse -The jetty OSGi integration has been successfully tested against -https://www.eclipse.org/equinox/[Equinox] Mars RC1. +The Jetty OSGi integration has been successfully tested against https://www.eclipse.org/equinox/[Equinox] Mars RC1. Ensure that these services are present: @@ -1407,16 +1142,12 @@ Ensure that these services are present: ====== Eclipse Update Site -There is a list of Eclipse P2 sites for the jetty releases maintained at -http://download.eclipse.org/jetty/updates/jetty-bundles-9.x/ +There is a list of Eclipse P2 sites for the jetty releases maintained at http://download.eclipse.org/jetty/updates/jetty-bundles-9.x/ -Each P2 repo has one big feature group that defines most of the jetty -jars. *Beware: No 3rd party dependency jars are included, so you will -need to have installed the dependencies listed previously in this -document.* +Each P2 repo has one big feature group that defines most of the Jetty jars. +*Beware: No 3rd party dependency jars are included, so you will need to have installed the dependencies listed previously in this document.* -In addition, as the feature group includes websocket, you will need to -download and have installed the javax.websocket-api jar: +In addition, as the feature group includes websocket, you will need to download and have installed the `javax.websocket-api` jar: .Extra Jars Required for Websocket [cols=",,",options="header",] diff --git a/jetty-documentation/src/main/asciidoc/reference/part.adoc b/jetty-documentation/src/main/asciidoc/reference/part.adoc index baea4ef2518..651d5cbef6c 100644 --- a/jetty-documentation/src/main/asciidoc/reference/part.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/part.adoc @@ -24,3 +24,4 @@ include::jetty-xml/chapter.adoc[] include::troubleshooting/chapter.adoc[] include::debugging/chapter.adoc[] include::contributing/chapter.adoc[] +include::upgrading/chapter.adoc[] diff --git a/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc b/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc index 0ae8623900b..2f4d130a14c 100644 --- a/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc +++ b/jetty-documentation/src/main/asciidoc/reference/upgrading/upgrading-9.3-to-9.4.adoc @@ -24,14 +24,24 @@ https://wiki.debian.org/LSBInitScripts[LSB tags]. You can safely replace Jetty 9.3's `jetty.sh` with 9.4's. -==== Modules No Longer Available +==== Removed Classes + +`ConcurrentArrayQueue` was removed from use in Jetty 9.3 and the class has been removed entirely as part of Jetty 9.4. + +==== Module Changes in Jetty 9.4 [cols="1,1", options="header"] |=== | 9.3 Module | 9.4 Module -| logging | console-capture +| `logging` | `console-capture` +| `infinispan` | `session-store-infinispan-embedded` or `session-store-infinispan-remote` +| `jdbc-sessions` | `session-store-jdbc` +| `gcloud-memcached-sessions`, `gcloud-session-idmgr` and `gcloud-sessions` | `session-store-gcloud` and `session-store-cache` +| `nosql` | `session-store-mongo` |=== +===== Logging Modules + The module `logging` is no longer available in Jetty 9.4. The logging module structure present in Jetty 9.3 has been replaced with @@ -45,7 +55,7 @@ If you have a Jetty 9.3 installation, and you have both `$jetty.base/modules/logging.mod` and `$jetty.base/etc/jetty-logging.xml`, then this module is local to your `$jetty.base` setup and will be used by Jetty 9.4 as before. -No changes required on your part. +No changes are required for your implementation. If either `$jetty.base/modules/logging.mod` or `$jetty.base/etc/jetty-logging.xml` are missing, then you were relying on those present in `$jetty.home`, @@ -55,23 +65,191 @@ The Jetty 9.3 `logging` module has been renamed to `console-capture` in Jetty 9. You need to open your Jetty 9.3 `start.ini` and replace the references to the `logging` modules with `console-capture`. -For example: +For example, in an existing 9.3 `start.ini` file the module declaration for logging would look like this: -.start.ini +[source, screen, subs="{sub-order}"] ---- --module=logging jetty.logging.retainDays=7 ---- -should be replaced by: +In 9.4, it should be replaced by: -.start.ini +[source, screen, subs="{sub-order}"] ---- --module=console-capture jetty.console-capture.retainDays=7 ---- -The properties that may be present in your Jetty 9.3's `start.ini`, such as -`jetty.logging.retainDays` will still be working in Jetty 9.4, but a warning -will be printed at Jetty 9.4 startup, saying to replace them with correspondent -`jetty.console-capture.*` properties such as `jetty.console-capture.retainDays`. +The properties that may be present in your Jetty 9.3's `start.ini`, such as `jetty.logging.retainDays` will still be working in Jetty 9.4, but a warning will be printed at Jetty 9.4 startup, saying to replace them with correspondent `jetty.console-capture.*` properties such as `jetty.console-capture.retainDays`. + +For information on logging modules in the Jetty 9.4 architecture please see the section on link:#configuring-logging-modules[configuring logging modules.] + +===== Session Management + +Session management received a significant overhaul in Jetty 9.4. +Session functionality has been refactored to promote code-reuse, easier configuration and easier customization. +Whereas previously users needed to edit xml configuration files, in Jetty 9.4 all session behavior is controlled by properties that are exposed by the various session modules. +Users now configure session management by selecting a composition of session modules. + +====== Change Overview + +SessionIdManager:: Previously there was a different class of SessionIdManager - with different configuration options - depending upon which type of clustering technology chosen. +In Jetty 9.4, there is only one type, the link:{JDURL}/org/eclipse/jetty/server/session/DefaultSessionIdManager.html[org.eclipse.jetty.server.session.DefaultSessionIdManager]. + +SessionManager:: Previously, there was a different class of SessionManager depending upon which the type of clustering technology chosen. +In Jetty 9.4 we have removed the SessionManager class and split its functionality into different, more easily extensible and composable classes: +General setters::: +All of the common setup of sessions such as the maxInactiveInterval and session cookie-related configuration has been moved to the link:{JDURL}/org/eclipse/jetty/server/session/SessionHandler.html[org.eclipse.jetty.server.session.SessionHandler] +[cols="1,1", options="header"] +|=== +| 9.3 SessionManager | 9.4 SessionHandler +| setMaxInactiveInterval(sec) | setMaxInactiveInterval(sec) +| setSessionCookie(String) | setSessionCookie(String) +| setRefreshCookieAge(sec) | setRefreshCookieAge(sec) +| setSecureRequestOnly(boolean) | setSecureRequestOnly(boolean +| setSessionIdPathParameterName(String) | setSessionIdPathParameterName(String) +| setSessionTrackingModes(Set) | setSessionTrackingModes(Set) +| setHttpOnly(boolean) | setHttpOnly(boolean) +| setUsingCookies(boolean) | setUsingCookies(boolean) +| setCheckingRemoteSessionIdEncoding(boolean) | setCheckingRemoteSessionIdEncoding(boolean) +|=== + +Persistence::: +In Jetty 9.3 SessionManagers (and sometimes SessionIdManagers) implemented the persistence mechanism. +In Jetty 9.4 we have moved this functionality into the link:{JDURL}/org/eclipse/jetty/server/session/SessionDataStore.html[org.eclipse.jetty.server.session.SessionDataStore]. + +Session cache::: +In Jetty 9.3 the SessionManager held a map of session objects in memory. +In Jetty 9.4 this has been moved into the new link:{JDURL}/org/eclipse/jetty/server/session/SessionCache.html[org.eclipse.jetty.server.session.SessionCache] interface. + + +For more information, please refer to the documentation on link:#jetty-sessions-architecture[Jetty Session Architecture.] + +====== Default + +As with earlier versions of Jetty, if you do not explicitly configure any session modules, the default session infrastructure will be enabled. +In previous versions of Jetty this was referred to as "hash" session management. +The new default provides similar features to the old hash session management: + * a session scavenger thread that runs every 10mins and removes expired sessions + * a session id manager that generates unique session ids and handles session id sharing during context forwarding + * an in-memory cache of session objects. +Requests for the same session in the same context share the same session object. +Session objects remain in the cache until they expire or are explicitly invalidated. + +If you wish to configure the default setup further, enable the `session-cache-default` module. + +Compatibility + +As Session objects do not persist beyond a server restart, there are no compatibility issues. + + +====== Filesystem + +In earlier versions of Jetty, persisting sessions to the local filesystem was an option of the "hash" session manager. +In Jetty 9.4 this has been refactored to its own configurable module `session-store-file`. + +Compatibility + +Sessions stored to files by earlier versions of jetty are not compatible with jetty-9.4 sessions. +Here is a comparison of file formats, note that the file contents are listed in order of file output: + +[cols="1,1", options="header"] +|=== +| 9.3 | 9.4 +| File name: sessionid | File name: expirytime_contextpath_vhost_sessionid +| sessionid (utf) | sessionid (utf) +| | contextpath (uft) +| | vhost (utf) +| nodeid (utf) | lastnode (utlf) +| createtime (long) | createtime (long) +| accessed (long) | accessed (long) +| | lastaccessed (long) +| | cookiesettime (long) +| | expiry (long) +| requests (int) | +| | maxInactive (long) +| attributes size (int) | attributes size (int) +| attributes serialized (obj) | attributes serialized (obj) +| maxInactive (long) | +|=== + + +====== JDBC + +As with earlier versions of Jetty, sessions may be persisted to a relational database. +Enable the `session-store-jdbc` module. + +Compatibility + +Sessions stored to the database by earlier versions of jetty are not compatible with jetty-9.4 sessions. +The incompatibility is minor: in jetty-9.4 the `rowid` primary key column is no longer used, and the primary key is a composite of `(sessionid,contextpath,vhost)` columns. + +====== NoSQL + +As with earlier versions of Jetty, sessions may be persisted to a document database. +Jetty supports the Mongo document database. +Enable the `session-store-mongo` module. + + +Compatibility + +Sessions stored to mongo by earlier versions of jetty are not compatible with jetty-9.4 sessions. +The key for each subdocument that represents the session information for a context is different between jetty-9.3 and 9.4: + +[cols="1,1", options="header"] +|=== +| 9.3 | 9.4 +|Each context key is: vhost+context+path, where empty vhosts="::" and root context = "*" and / is replaced by _ +|Each context key is: vhost:contextpath, where empty vhosts="0_0_0_0" and root context = "" and / replaced by _ +| eg "::/contextA" | eg " 0_0_0_0:_contextA" +|=== + + +====== Infinispan + +As with earlier versions of Jetty, sessions may be clustered via Infinispan to either an in-process or remote infinispan instance. +Enable the `session-store-infinispan` module. + +Compatibility + +Sessions stored in infinispan by jetty-9.3 are incompatible with jetty-9.4. +In jetty-9.3 the serialized object stored to represent the session data was `org.eclipse.jetty.session.infinispan.SerializableSessionData`. +In jetty-9.4 the serialized object is `org.eclipse.jetty.serer.session.SessionData`. + +====== GCloud Datastore + +As with earlier versions of Jetty, sessions may be persisted to Google's GCloud Datastore. +Enable the `session-store-gcloud` module. + + +Compatibility + +Sessions stored into gcloud datastore by jetty-9.3 are incompatible with jetty-9.4, although the incompatibility is trivial: the name of the session id entity property has changed: + +[cols="1,1", options="header"] +|=== +|9.3 | 9.4 +|Kind: GCloudSession | Kind: GCloudSession +|key: contextpath_vhost_sessionid | key: contextpath_vhost_sessionid +|*"clusterId": sessionId* | *"id" : sessionId* +|"contextPath" : contextpath | "contextPath": contextpath +|"vhost" :vhost | "vhost": vhost +|"accessed":accesstime | "accessed": accesstime +|"lastAccessed": lastaccesstime | "lastAccessed": lastaccesstime +|"createTime": createtime | "createTime": createtime +|"cookieSetTime": cookiesettime | "cookieSetTime": cookiesettime +|"lastNode": lastnode | "lastNode": lastnode +|"expiry": expiry | "expiry": expiry +|"maxInactive": maxInactive | "maxInactive": maxInactive +|"attributes": blob | "attributes": blob +|=== + +====== GCloud Datastore with Memcached + +As with earlier versions of Jetty, sessions can be both persisted to Google's GCloud Datastore, and cached into Memcached for faster access. +Enable the `session-store-gcloud` and `session-store-cache` modules. + +Compatibility + +Sessions stored into memcached by earlier versions of jetty are incompatible with jetty-9.4. Previous versions of jetty stored `org.eclipse.jetty.gcloud.memcached.session.SerializableSessionData` whereas jetty-9.4 stores `org.eclipse.jetty.server.session.SessionData`. diff --git a/jetty-fcgi/fcgi-server/src/main/java/org/eclipse/jetty/fcgi/server/HttpTransportOverFCGI.java b/jetty-fcgi/fcgi-server/src/main/java/org/eclipse/jetty/fcgi/server/HttpTransportOverFCGI.java index 65e1712d841..9bb82f80941 100644 --- a/jetty-fcgi/fcgi-server/src/main/java/org/eclipse/jetty/fcgi/server/HttpTransportOverFCGI.java +++ b/jetty-fcgi/fcgi-server/src/main/java/org/eclipse/jetty/fcgi/server/HttpTransportOverFCGI.java @@ -30,9 +30,12 @@ import org.eclipse.jetty.io.ByteBufferPool; import org.eclipse.jetty.server.HttpTransport; import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.util.Callback; +import org.eclipse.jetty.util.log.Log; +import org.eclipse.jetty.util.log.Logger; public class HttpTransportOverFCGI implements HttpTransport { + private static final Logger LOG = Log.getLogger(HttpTransportOverFCGI.class); private final ServerGenerator generator; private final Flusher flusher; private final int request; @@ -97,6 +100,8 @@ public class HttpTransportOverFCGI implements HttpTransport private void commit(MetaData.Response info, boolean head, ByteBuffer content, boolean lastContent, Callback callback) { + if (LOG.isDebugEnabled()) + LOG.debug("commit {} {} l={}",this,info,lastContent); boolean shutdown = this.shutdown = info.getFields().contains(HttpHeader.CONNECTION, HttpHeaderValue.CLOSE.asString()); if (head) @@ -137,7 +142,10 @@ public class HttpTransportOverFCGI implements HttpTransport @Override public void abort(Throwable failure) { + if (LOG.isDebugEnabled()) + LOG.debug("abort {} {}",this,failure); aborted = true; + flusher.shutdown(); } @Override diff --git a/jetty-fcgi/fcgi-server/src/test/java/org/eclipse/jetty/fcgi/server/HttpClientTest.java b/jetty-fcgi/fcgi-server/src/test/java/org/eclipse/jetty/fcgi/server/HttpClientTest.java index 5bf58b4ef9e..ec650db38ee 100644 --- a/jetty-fcgi/fcgi-server/src/test/java/org/eclipse/jetty/fcgi/server/HttpClientTest.java +++ b/jetty-fcgi/fcgi-server/src/test/java/org/eclipse/jetty/fcgi/server/HttpClientTest.java @@ -608,7 +608,7 @@ public class HttpClientTest extends AbstractHttpClientServerTest { client.newRequest("localhost", connector.getLocalPort()) .scheme(scheme) - .timeout(5, TimeUnit.SECONDS) + .timeout(60, TimeUnit.SECONDS) .send(); Assert.fail(); } diff --git a/jetty-gcloud/jetty-gcloud-session-manager/src/main/config/modules/gcloud-datastore.mod b/jetty-gcloud/jetty-gcloud-session-manager/src/main/config/modules/gcloud-datastore.mod index ef41e952f9c..82ae530c008 100644 --- a/jetty-gcloud/jetty-gcloud-session-manager/src/main/config/modules/gcloud-datastore.mod +++ b/jetty-gcloud/jetty-gcloud-session-manager/src/main/config/modules/gcloud-datastore.mod @@ -8,68 +8,50 @@ gcloud [depends] gcloud jcl-slf4j -jul-slf4j +jul-impl [files] -maven://com.google.cloud/google-cloud-datastore/0.4.0|lib/gcloud/google-cloud-datastore-0.4.0.jar -maven://com.google.cloud/google-cloud-core/0.4.0|lib/gcloud/google-cloud-core-0.4.0.jar -maven://com.google.auth/google-auth-library-credentials/0.3.1|lib/gcloud/google-auth-library-credentials-0.3.1.jar -maven://com.google.auth/google-auth-library-oauth2-http/0.3.1|lib/gcloud/google-auth-library-oauth2-http-0.3.1.jar -maven://com.google.http-client/google-http-client-jackson2/1.19.0|lib/gcloud/google-http-client-jackson2-1.19.0.jar -maven://com.fasterxml.jackson.core/jackson-core/2.1.3|lib/gcloud/jackson-core-2.1.3.jar -maven://com.google.http-client/google-http-client/1.21.0|lib/gcloud/google-http-client-1.21.0.jar -maven://com.google.code.findbugs/jsr305/1.3.9|lib/gcloud/jsr305-1.3.9.jar -maven://org.apache.httpcomponents/httpclient/4.0.1|lib/gcloud/httpclient-4.0.1.jar -maven://org.apache.httpcomponents/httpcore/4.0.1|lib/gcloud/httpcore-4.0.1.jar -maven://commons-codec/commons-codec/1.3|lib/gcloud/commons-codec-1.3.jar -maven://com.google.oauth-client/google-oauth-client/1.21.0|lib/gcloud/google-oauth-client-1.21.0.jar -maven://com.google.guava/guava/19.0|lib/gcloud/guava-19.0.jar -maven://com.google.api-client/google-api-client-appengine/1.21.0|lib/gcloud/google-api-client-appengine-1.21.0.jar -maven://com.google.oauth-client/google-oauth-client-appengine/1.21.0|lib/gcloud/google-oauth-client-appengine-1.21.0.jar -maven://com.google.oauth-client/google-oauth-client-servlet/1.21.0|lib/gcloud/google-oauth-client-servlet-1.21.0.jar -maven://com.google.http-client/google-http-client-jdo/1.21.0|lib/gcloud/google-http-client-jdo-1.21.0.jar -maven://com.google.api-client/google-api-client-servlet/1.21.0|lib/gcloud/google-api-client-servlet-1.21.0.jar -maven://javax.jdo/jdo2-api/2.3-eb|lib/gcloud/jdo2-api-2.3-eb.jar -maven://javax.transaction/transaction-api/1.1|lib/gcloud/transaction-api-1.1.jar -maven://com.google.http-client/google-http-client-appengine/1.21.0|lib/gcloud/google-http-client-appengine-1.21.0.jar -maven://com.google.http-client/google-http-client-jackson/1.21.0|lib/gcloud/google-http-client-jackson-1.21.0.jar -maven://org.codehaus.jackson/jackson-core-asl/1.9.11|lib/gcloud/jackson-core-asl-1.9.11.jar -maven://joda-time/joda-time/2.9.2|lib/gcloud/joda-time-2.9.2.jar -maven://org.json/json/20151123|lib/gcloud/json-20151123.jar -maven://com.google.protobuf/protobuf-java/3.0.0|lib/gcloud/protobuf-java-3.0.0.jar -maven://com.google.api/gax/0.0.18|lib/gcloud/gax-0.0.18.jar -maven://com.google.auto.value/auto-value/1.1|lib/gcloud/auto-value-1.1.jar -maven://io.grpc/grpc-all/1.0.1|lib/gcloud/grpc-all-1.0.1.jar -maven://io.grpc/grpc-auth/1.0.1|lib/gcloud/grpc-auth-1.0.1.jar -maven://io.grpc/grpc-context/1.0.1|lib/gcloud/grpc-context-1.0.1.jar -maven://io.grpc/grpc-protobuf/1.0.1|lib/gcloud/grpc-protobuf-1.0.1.jar -maven://com.google.protobuf/protobuf-java-util/3.0.0|lib/gcloud/protobuf-java-util-3.0.0.jar -maven://com.google.code.gson/gson/2.3|lib/gcloud/gson-2.3.jar -maven://io.grpc/grpc-netty/1.0.1|lib/gcloud/grpc-netty-1.0.1.jar -maven://io.netty/netty-codec-http2/4.1.3.Final|lib/gcloud/netty-codec-http2-4.1.3.jar -maven://io.netty/netty-codec-http/4.1.3.Final|lib/gcloud/netty-codec-http-4.1.3.Final.jar -maven://io.netty/netty-codec/4.1.3.Final|lib/gcloud/netty-codec-4.1.3.Final.jar -maven://io.netty/netty-handler/4.1.3.Final|lib/gcloud/netty-handler-4.1.3.Final.jar -maven://io.netty/netty-buffer/4.1.3.Final|lib/gcloud/netty-buffer-4.1.3.Final.jar -maven://io.netty/netty-common/4.1.3.Final|lib/gcloud/netty-common-4.1.3.Final.jar -maven://io.netty/netty-transport/4.1.3.Final|lib/gcloud/netty-transport-4.1.3.Final.jar -maven://io.netty/netty-resolver/4.1.3.Final|lib/gcloud/netty-resolver-4.1.3.Final.jar -maven://io.grpc/grpc-stub/1.0.1|lib/gcloud/grpc-stub-1.0.1.jar -maven://io.grpc/grpc-protobuf-nano/1.0.1|lib/gcloud/grpc-protobuf-nano-1.0.1.jar -maven://com.google.protobuf.nano/protobuf-javanano/3.0.0-alpha-5|lib/gcloud/protobuf-javanano/3.0.0-alpha-5.jar -maven://io.grpc/grpc-core/1.0.1|lib/gcloud/grpc-core-1.0.1.jar -maven://io.grpc/grpc-okhttp/1.0.1|lib/gcloud/grpc-okhttp-1.0.1.jar -maven://com.squareup.okio/okio/1.6.0|lib/gcloud/okio-1.6.0.jar -maven://com.squareup.okhttp/okhttp/2.5.0|lib/gcloud/okhttp-2.5.0.jar -maven://io.grpc/grpc-protobuf-lite/1.0.1|lib/gcloud/grpc-protobuf-lite-1.0.1.jar -maven://com.google.protobuf/protobuf-lite/3.0.1|lib/gcloud/protobuf-lite-3.0.1.jar -maven://com.google.inject/guice/4.0|lib/gcloud/guice-4.0.jar -maven://javax.inject/javax.inject/1|lib/gcloud/javax.inject-1.jar maven://aopalliance/aopalliance/1.0|lib/gcloud/aopalliance-1.0.jar +maven://com.fasterxml.jackson.core/jackson-core/2.1.3|lib/gcloud/jackson-core-2.1.3.jar +maven://com.google.api-client/google-api-client-appengine/1.21.0|lib/gcloud/google-api-client-appengine-1.21.0.jar +maven://com.google.api-client/google-api-client/1.20.0|lib/gcloud/google-api-client-1.20.0.jar +maven://com.google.api-client/google-api-client-servlet/1.21.0|lib/gcloud/google-api-client-servlet-1.21.0.jar +maven://com.google.api/gax/0.0.21|lib/gcloud/gax-0.0.21.jar maven://com.google.api.grpc/grpc-google-common-protos/0.1.0|lib/gcloud/grpc-google-common-protos-0.1.0.jar maven://com.google.api.grpc/grpc-google-iam-v1/0.1.0|lib/gcloud/grpc-google-iam-v1-0.1.0.jar -maven://com.google.cloud.datastore/datastore-v1-protos/1.2.0|lib/gcloud/datastore-v1-protos-1.2.0.jar -maven://com.google.cloud.datastore/datastore-v1-proto-client/1.2.0|lib/gcloud/datastore-v1-proto-client-1.2.0.jar +maven://com.google.auth/google-auth-library-credentials/0.3.1|lib/gcloud/google-auth-library-credentials-0.3.1.jar +maven://com.google.auth/google-auth-library-oauth2-http/0.3.1|lib/gcloud/google-auth-library-oauth2-http-0.3.1.jar +maven://com.google.auto.value/auto-value/1.2|lib/gcloud/auto-value-1.2.jar +maven://com.google.cloud.datastore/datastore-v1-proto-client/1.3.0|lib/gcloud/datastore-v1-proto-client-1.3.0.jar +maven://com.google.cloud.datastore/datastore-v1-protos/1.3.0|lib/gcloud/datastore-v1-protos-1.3.0.jar +maven://com.google.cloud/google-cloud-core/0.5.1|lib/gcloud/google-cloud-core-0.5.0.jar +maven://com.google.cloud/google-cloud-datastore/0.5.1|lib/gcloud/google-cloud-datastore-0.5.1.jar +maven://com.google.code.findbugs/jsr305/1.3.9|lib/gcloud/jsr305-1.3.9.jar +maven://com.google.code.gson/gson/2.3|lib/gcloud/gson-2.3.jar +maven://com.google.guava/guava/19.0|lib/gcloud/guava-19.0.jar +maven://com.google.http-client/google-http-client-appengine/1.21.0|lib/gcloud/google-http-client-appengine-1.21.0.jar +maven://com.google.http-client/google-http-client-jackson2/1.19.0|lib/gcloud/google-http-client-jackson2-1.19.0.jar +maven://com.google.http-client/google-http-client-jackson/1.21.0|lib/gcloud/google-http-client-jackson-1.21.0.jar +maven://com.google.http-client/google-http-client/1.21.0|lib/gcloud/google-http-client-1.21.0.jar +maven://com.google.http-client/google-http-client-jdo/1.21.0|lib/gcloud/google-http-client-jdo-1.21.0.jar maven://com.google.http-client/google-http-client-protobuf/1.20.0|lib/gcloud/google-http-client-protobuf-1.20.0.jar -maven://com.google.api-client/google-api-client/1.20.0|lib/gcloud/google-api-client/1.20.0 +maven://com.google.inject/guice/4.0|lib/gcloud/guice-4.0.jar +maven://com.google.oauth-client/google-oauth-client-appengine/1.21.0|lib/gcloud/google-oauth-client-appengine-1.21.0.jar +maven://com.google.oauth-client/google-oauth-client/1.21.0|lib/gcloud/google-oauth-client-1.21.0.jar +maven://com.google.oauth-client/google-oauth-client-servlet/1.21.0|lib/gcloud/google-oauth-client-servlet-1.21.0.jar +maven://com.google.protobuf/protobuf-java/3.0.0|lib/gcloud/protobuf-java-3.0.0.jar +maven://com.google.protobuf/protobuf-java-util/3.0.0|lib/gcloud/protobuf-java-util-3.0.0.jar +maven://commons-codec/commons-codec/1.3|lib/gcloud/commons-codec-1.3.jar +maven://io.grpc/grpc-context/1.0.1|lib/gcloud/grpc-context-1.0.1.jar +maven://io.grpc/grpc-core/1.0.1|lib/gcloud/grpc-core-1.0.1.jar +maven://io.grpc/grpc-protobuf/1.0.1|lib/gcloud/grpc-protobuf-1.0.1.jar +maven://io.grpc/grpc-protobuf-lite/1.0.1|lib/gcloud/grpc-protobuf-lite-1.0.1.jar +maven://javax.inject/javax.inject/1|lib/gcloud/javax.inject-1.jar +maven://javax.jdo/jdo2-api/2.3-eb|lib/gcloud/jdo2-api-2.3-eb.jar +maven://javax.transaction/transaction-api/1.1|lib/gcloud/transaction-api-1.1.jar +maven://joda-time/joda-time/2.9.2|lib/gcloud/joda-time-2.9.2.jar +maven://org.apache.httpcomponents/httpclient/4.0.1|lib/gcloud/httpclient-4.0.1.jar +maven://org.apache.httpcomponents/httpcore/4.0.1|lib/gcloud/httpcore-4.0.1.jar +maven://org.codehaus.jackson/jackson-core-asl/1.9.11|lib/gcloud/jackson-core-asl-1.9.11.jar +maven://org.json/json/20151123|lib/gcloud/json-20151123.jar diff --git a/jetty-gcloud/pom.xml b/jetty-gcloud/pom.xml index 686c3925a64..4fa844de3a4 100644 --- a/jetty-gcloud/pom.xml +++ b/jetty-gcloud/pom.xml @@ -13,7 +13,7 @@ Jetty :: GCloud - 0.4.0 + 0.5.1 diff --git a/jetty-http-spi/pom.xml b/jetty-http-spi/pom.xml index 21dc977daf7..74541269b0d 100644 --- a/jetty-http-spi/pom.xml +++ b/jetty-http-spi/pom.xml @@ -101,6 +101,13 @@ + + org.jacoco + jacoco-maven-plugin + + true + + diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java index b03133a96b4..0961ca8fe02 100644 --- a/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/HttpGenerator.java @@ -18,16 +18,18 @@ package org.eclipse.jetty.http; +import static org.eclipse.jetty.http.HttpStatus.INTERNAL_SERVER_ERROR_500; + import java.io.IOException; import java.nio.BufferOverflowException; import java.nio.ByteBuffer; import java.util.Arrays; -import java.util.HashSet; -import java.util.Set; import org.eclipse.jetty.http.HttpTokens.EndOfContent; +import org.eclipse.jetty.util.ArrayTrie; import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.util.StringUtil; +import org.eclipse.jetty.util.Trie; import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Logger; @@ -46,11 +48,10 @@ public class HttpGenerator public final static boolean __STRICT=Boolean.getBoolean("org.eclipse.jetty.http.HttpGenerator.STRICT"); private final static byte[] __colon_space = new byte[] {':',' '}; - private final static HttpHeaderValue[] CLOSE = {HttpHeaderValue.CLOSE}; public static final MetaData.Response CONTINUE_100_INFO = new MetaData.Response(HttpVersion.HTTP_1_1,100,null,null,-1); public static final MetaData.Response PROGRESS_102_INFO = new MetaData.Response(HttpVersion.HTTP_1_1,102,null,null,-1); public final static MetaData.Response RESPONSE_500_INFO = - new MetaData.Response(HttpVersion.HTTP_1_1,HttpStatus.INTERNAL_SERVER_ERROR_500,null,new HttpFields(){{put(HttpHeader.CONNECTION,HttpHeaderValue.CLOSE);}},0); + new MetaData.Response(HttpVersion.HTTP_1_1,INTERNAL_SERVER_ERROR_500,null,new HttpFields(){{put(HttpHeader.CONNECTION,HttpHeaderValue.CLOSE);}},0); // states public enum State { START, COMMITTED, COMPLETING, COMPLETING_1XX, END } @@ -63,13 +64,18 @@ public class HttpGenerator private EndOfContent _endOfContent = EndOfContent.UNKNOWN_CONTENT; private long _contentPrepared = 0; - private boolean _noContent = false; + private boolean _noContentResponse = false; private Boolean _persistent = null; private final int _send; private final static int SEND_SERVER = 0x01; private final static int SEND_XPOWEREDBY = 0x02; - private final static Set __assumedContentMethods = new HashSet<>(Arrays.asList(new String[]{HttpMethod.POST.asString(),HttpMethod.PUT.asString()})); + private final static Trie __assumedContentMethods = new ArrayTrie<>(8); + static + { + __assumedContentMethods.put(HttpMethod.POST.asString(),Boolean.TRUE); + __assumedContentMethods.put(HttpMethod.PUT.asString(),Boolean.TRUE); + } /* ------------------------------------------------------------------------------- */ public static void setJettyVersion(String serverVersion) @@ -101,7 +107,7 @@ public class HttpGenerator { _state = State.START; _endOfContent = EndOfContent.UNKNOWN_CONTENT; - _noContent=false; + _noContentResponse=false; _persistent = null; _contentPrepared = 0; _needCRLF = false; @@ -160,7 +166,7 @@ public class HttpGenerator /* ------------------------------------------------------------ */ public boolean isNoContent() { - return _noContent; + return _noContentResponse; } /* ------------------------------------------------------------ */ @@ -214,7 +220,7 @@ public class HttpGenerator // If we have not been told our persistence, set the default if (_persistent==null) { - _persistent=info.getVersion().ordinal() > HttpVersion.HTTP_1_0.ordinal(); + _persistent=info.getHttpVersion().ordinal() > HttpVersion.HTTP_1_0.ordinal(); if (!_persistent && HttpMethod.CONNECT.is(info.getMethod())) _persistent=true; } @@ -226,8 +232,8 @@ public class HttpGenerator // generate ResponseLine generateRequestLine(info,header); - if (info.getVersion()==HttpVersion.HTTP_0_9) - throw new BadMessageException(500,"HTTP/0.9 not supported"); + if (info.getHttpVersion()==HttpVersion.HTTP_0_9) + throw new BadMessageException(INTERNAL_SERVER_ERROR_500,"HTTP/0.9 not supported"); generateHeaders(info,header,content,last); @@ -252,10 +258,17 @@ public class HttpGenerator return Result.FLUSH; } + catch(BadMessageException e) + { + throw e; + } + catch(BufferOverflowException e) + { + throw new BadMessageException(INTERNAL_SERVER_ERROR_500,"Request header too large",e); + } catch(Exception e) { - String message= (e instanceof BufferOverflowException)?"Request header too large":e.getMessage(); - throw new BadMessageException(500,message,e); + throw new BadMessageException(INTERNAL_SERVER_ERROR_500,e.getMessage(),e); } finally { @@ -342,9 +355,9 @@ public class HttpGenerator { if (info==null) return Result.NEED_INFO; - HttpVersion version=info.getVersion(); + HttpVersion version=info.getHttpVersion(); if (version==null) - throw new BadMessageException(500,"No version"); + throw new BadMessageException(INTERNAL_SERVER_ERROR_500,"No version"); switch(version) { case HTTP_1_0: @@ -381,7 +394,7 @@ public class HttpGenerator int status=info.getStatus(); if (status>=100 && status<200 ) { - _noContent=true; + _noContentResponse=true; if (status!=HttpStatus.SWITCHING_PROTOCOLS_101 ) { @@ -392,7 +405,7 @@ public class HttpGenerator } else if (status==HttpStatus.NO_CONTENT_204 || status==HttpStatus.NOT_MODIFIED_304) { - _noContent=true; + _noContentResponse=true; } generateHeaders(info,header,content,last); @@ -407,10 +420,17 @@ public class HttpGenerator } _state = last?State.COMPLETING:State.COMMITTED; } + catch(BadMessageException e) + { + throw e; + } + catch(BufferOverflowException e) + { + throw new BadMessageException(INTERNAL_SERVER_ERROR_500,"Request header too large",e); + } catch(Exception e) { - String message= (e instanceof BufferOverflowException)?"Response header too large":e.getMessage(); - throw new BadMessageException(500,message,e); + throw new BadMessageException(INTERNAL_SERVER_ERROR_500,e.getMessage(),e); } finally { @@ -523,7 +543,7 @@ public class HttpGenerator header.put((byte)' '); header.put(StringUtil.getBytes(request.getURIString())); header.put((byte)' '); - header.put(request.getVersion().toBytes()); + header.put(request.getHttpVersion().toBytes()); header.put(HttpTokens.CRLF); } @@ -578,22 +598,29 @@ public class HttpGenerator } /* ------------------------------------------------------------ */ - private void generateHeaders(MetaData _info,ByteBuffer header,ByteBuffer content,boolean last) + private void generateHeaders(MetaData info,ByteBuffer header,ByteBuffer content,boolean last) { - final MetaData.Request request=(_info instanceof MetaData.Request)?(MetaData.Request)_info:null; - final MetaData.Response response=(_info instanceof MetaData.Response)?(MetaData.Response)_info:null; - + final MetaData.Request request=(info instanceof MetaData.Request)?(MetaData.Request)info:null; + final MetaData.Response response=(info instanceof MetaData.Response)?(MetaData.Response)info:null; + + if (LOG.isDebugEnabled()) + { + LOG.debug("generateHeaders {} last={} content={}",info,last,BufferUtil.toDetailString(content)); + LOG.debug(info.getFields().toString()); + } + // default field values int send=_send; HttpField transfer_encoding=null; - boolean keep_alive=false; - boolean close=false; - boolean content_type=false; - StringBuilder connection = null; - long content_length = _info.getContentLength(); + boolean http11 = info.getHttpVersion() == HttpVersion.HTTP_1_1; + boolean close = false; + boolean chunked = false; + boolean content_type = false; + long content_length = info.getContentLength(); + boolean content_length_field = false; // Generate fields - HttpFields fields = _info.getFields(); + HttpFields fields = info.getFields(); if (fields != null) { int n=fields.size(); @@ -611,11 +638,12 @@ public class HttpGenerator { switch (h) { - case CONTENT_LENGTH: - _endOfContent=EndOfContent.CONTENT_LENGTH; + case CONTENT_LENGTH: if (content_length<0) - content_length=Long.valueOf(field.getValue()); - // handle setting the field specially below + content_length = field.getLongValue(); + else if (content_length!=field.getLongValue()) + throw new BadMessageException(INTERNAL_SERVER_ERROR_500,String.format("Incorrect Content-Length %d!=%d",content_length,field.getLongValue())); + content_length_field = true; break; case CONTENT_TYPE: @@ -628,81 +656,29 @@ public class HttpGenerator case TRANSFER_ENCODING: { - if (_info.getVersion() == HttpVersion.HTTP_1_1) + if (http11) + { + // Don't add yet, treat this only as a hint that there is content + // with a preference to chunk if we can transfer_encoding = field; - // Do NOT add yet! + chunked = field.contains(HttpHeaderValue.CHUNKED.asString()); + } break; } case CONNECTION: { - if (request!=null) - putTo(field,header); - - // Lookup and/or split connection value field - HttpHeaderValue[] values = HttpHeaderValue.CLOSE.is(field.getValue())?CLOSE:new HttpHeaderValue[]{HttpHeaderValue.CACHE.get(field.getValue())}; - String[] split = null; - - if (values[0]==null) + putTo(field,header); + if (field.contains(HttpHeaderValue.CLOSE.asString())) { - split = StringUtil.csvSplit(field.getValue()); - if (split.length>0) - { - values=new HttpHeaderValue[split.length]; - for (int i=0;i0) + // We don't need to indicate a body length + _endOfContent=EndOfContent.NO_CONTENT; + + // But it is an error if there actually is content + if (_contentPrepared>0 || content_length>0) + { + if (_contentPrepared==0 && last) { - // we have been given a content length - _endOfContent=EndOfContent.CONTENT_LENGTH; - if ((response!=null || content_length>0 || content_type ) && !_noContent) - { - // known length but not actually set. - header.put(HttpHeader.CONTENT_LENGTH.getBytesColonSpace()); - BufferUtil.putDecLong(header, content_length); - header.put(HttpTokens.CRLF); - } - } - else if (last) - { - // we have seen all the _content there is, so we can be content-length limited. - _endOfContent=EndOfContent.CONTENT_LENGTH; - long actual_length = _contentPrepared+BufferUtil.length(content); - - if (content_length>=0 && content_length!=actual_length) - throw new BadMessageException(500,"Content-Length header("+content_length+") != actual("+actual_length+")"); - - // Do we need to tell the headers about it - putContentLength(header,actual_length,content_type,request,response); + // TODO discard content for backward compatibility with 9.3 releases + // TODO review if it is still needed in 9.4 or can we just throw. + content.clear(); + content_length=0; } else - { - // No idea, so we must assume that a body is coming. - _endOfContent = EndOfContent.CHUNKED_CONTENT; - // HTTP 1.0 does not understand chunked content, so we must use EOF content. - // For a request with HTTP 1.0 & Connection: keep-alive - // we *must* close the connection, otherwise the client - // has no way to detect the end of the content. - if (!isPersistent() || _info.getVersion().ordinal() < HttpVersion.HTTP_1_1.ordinal()) - _endOfContent = EndOfContent.EOF_CONTENT; - } - break; - - case CONTENT_LENGTH: - { - putContentLength(header,content_length,content_type,request,response); - break; + throw new BadMessageException(INTERNAL_SERVER_ERROR_500,"Content for no content response"); } - - case NO_CONTENT: - throw new BadMessageException(500); - - case EOF_CONTENT: - _persistent = request!=null; - break; - - case CHUNKED_CONTENT: - break; - - default: - break; } - - // Add transfer_encoding if needed - if (isChunking()) + // Else if we are HTTP/1.1 and the content length is unknown and we are either persistent + // or it is a request with content (which cannot EOF) + else if (http11 && content_length<0 && (_persistent || assumed_content_request)) { + // we use chunking + _endOfContent = EndOfContent.CHUNKED_CONTENT; + chunked = true; + // try to use user supplied encoding as it may have other values. - if (transfer_encoding != null && !HttpHeaderValue.CHUNKED.toString().equalsIgnoreCase(transfer_encoding.getValue())) + if (transfer_encoding == null) + header.put(TRANSFER_ENCODING_CHUNKED); + else if (transfer_encoding.toString().endsWith(HttpHeaderValue.CHUNKED.toString())) { - String c = transfer_encoding.getValue(); - if (c.endsWith(HttpHeaderValue.CHUNKED.toString())) - putTo(transfer_encoding,header); - else - throw new BadMessageException(500,"BAD TE"); + putTo(transfer_encoding,header); + transfer_encoding = null; } else - header.put(TRANSFER_ENCODING_CHUNKED); + throw new BadMessageException(INTERNAL_SERVER_ERROR_500,"Bad Transfer-Encoding"); } - - // Handle connection if need be - if (_endOfContent==EndOfContent.EOF_CONTENT) + // Else if we known the content length and are a request or a persistent response, + else if (content_length>=0 && (request!=null || _persistent)) { - keep_alive=false; + // Use the content length + _endOfContent = EndOfContent.CONTENT_LENGTH; + putContentLength(header,content_length); + } + // Else if we are a response + else if (response!=null) + { + // We must use EOF - even if we were trying to be persistent + _endOfContent = EndOfContent.EOF_CONTENT; _persistent=false; + if (content_length>=0 && ( content_length> 0 || assumed_content || content_length_field )) + putContentLength(header,content_length); + + if (http11 && !close) + header.put(CONNECTION_CLOSE); } - - // If this is a response, work out persistence - if (response!=null) + // Else we must be a request + else { - if (!isPersistent() && (close || _info.getVersion().ordinal() > HttpVersion.HTTP_1_0.ordinal())) - { - if (connection==null) - header.put(CONNECTION_CLOSE); - else - { - header.put(CONNECTION_CLOSE,0,CONNECTION_CLOSE.length-2); - header.put((byte)','); - header.put(StringUtil.getBytes(connection.toString())); - header.put(CRLF); - } - } - else if (keep_alive) - { - if (connection==null) - header.put(CONNECTION_KEEP_ALIVE); - else - { - header.put(CONNECTION_KEEP_ALIVE,0,CONNECTION_KEEP_ALIVE.length-2); - header.put((byte)','); - header.put(StringUtil.getBytes(connection.toString())); - header.put(CRLF); - } - } - else if (connection!=null) - { - header.put(HttpHeader.CONNECTION.getBytesColonSpace()); - header.put(StringUtil.getBytes(connection.toString())); - header.put(CRLF); - } + // with no way to indicate body length + throw new BadMessageException(INTERNAL_SERVER_ERROR_500,"Unknown content length for request"); } + if (LOG.isDebugEnabled()) + LOG.debug(_endOfContent.toString()); + + // Add transfer encoding if it is not chunking + if (transfer_encoding!=null && !chunked) + putTo(transfer_encoding,header); + + // Send server? + int status=response!=null?response.getStatus():-1; if (status>199) header.put(SEND[send]); // end the header. - header.put(HttpTokens.CRLF); + header.put(HttpTokens.CRLF); } /* ------------------------------------------------------------------------------- */ - private void putContentLength(ByteBuffer header, long contentLength, boolean contentType, MetaData.Request request, MetaData.Response response) + private static void putContentLength(ByteBuffer header,long contentLength) { - if (contentLength>0) + if (contentLength==0) + header.put(CONTENT_LENGTH_0); + else { header.put(HttpHeader.CONTENT_LENGTH.getBytesColonSpace()); BufferUtil.putDecLong(header, contentLength); header.put(HttpTokens.CRLF); } - else if (!_noContent) - { - if (contentType || response!=null || (request!=null && __assumedContentMethods.contains(request.getMethod()))) - header.put(CONTENT_LENGTH_0); - } } - + /* ------------------------------------------------------------------------------- */ public static byte[] getReasonBuffer(int code) { @@ -905,10 +826,8 @@ public class HttpGenerator // common _content private static final byte[] LAST_CHUNK = { (byte) '0', (byte) '\015', (byte) '\012', (byte) '\015', (byte) '\012'}; private static final byte[] CONTENT_LENGTH_0 = StringUtil.getBytes("Content-Length: 0\015\012"); - private static final byte[] CONNECTION_KEEP_ALIVE = StringUtil.getBytes("Connection: keep-alive\015\012"); private static final byte[] CONNECTION_CLOSE = StringUtil.getBytes("Connection: close\015\012"); private static final byte[] HTTP_1_1_SPACE = StringUtil.getBytes(HttpVersion.HTTP_1_1+" "); - private static final byte[] CRLF = StringUtil.getBytes("\015\012"); private static final byte[] TRANSFER_ENCODING_CHUNKED = StringUtil.getBytes("Transfer-Encoding: chunked\015\012"); private static final byte[][] SEND = new byte[][]{ new byte[0], diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/MetaData.java b/jetty-http/src/main/java/org/eclipse/jetty/http/MetaData.java index 18dc23145da..498f253fa8d 100644 --- a/jetty-http/src/main/java/org/eclipse/jetty/http/MetaData.java +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/MetaData.java @@ -57,10 +57,19 @@ public class MetaData implements Iterable return false; } + /** + * @deprecated use {@link #getHttpVersion()} instead + */ + @Deprecated + public HttpVersion getVersion() + { + return getHttpVersion(); + } + /** * @return the HTTP version of this MetaData object */ - public HttpVersion getVersion() + public HttpVersion getHttpVersion() { return _httpVersion; } @@ -155,7 +164,7 @@ public class MetaData implements Iterable public Request(Request request) { - this(request.getMethod(),new HttpURI(request.getURI()), request.getVersion(), new HttpFields(request.getFields()), request.getContentLength()); + this(request.getMethod(),new HttpURI(request.getURI()), request.getHttpVersion(), new HttpFields(request.getFields()), request.getContentLength()); } public void recycle() @@ -216,8 +225,8 @@ public class MetaData implements Iterable public String toString() { HttpFields fields = getFields(); - return String.format("%s{u=%s,%s,h=%d}", - getMethod(), getURI(), getVersion(), fields == null ? -1 : fields.size()); + return String.format("%s{u=%s,%s,h=%d,cl=%d}", + getMethod(), getURI(), getHttpVersion(), fields == null ? -1 : fields.size(), getContentLength()); } } @@ -291,7 +300,7 @@ public class MetaData implements Iterable public String toString() { HttpFields fields = getFields(); - return String.format("%s{s=%d,h=%d}", getVersion(), getStatus(), fields == null ? -1 : fields.size()); + return String.format("%s{s=%d,h=%d,cl=%d}", getHttpVersion(), getStatus(), fields == null ? -1 : fields.size(), getContentLength()); } } } diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java b/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java index 04d8cebe6f4..ea68317c2f2 100644 --- a/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/MimeTypes.java @@ -21,7 +21,6 @@ package org.eclipse.jetty.http; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; -import java.net.URL; import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; @@ -30,14 +29,11 @@ import java.util.HashSet; import java.util.Locale; import java.util.Map; import java.util.Map.Entry; -import java.util.MissingResourceException; import java.util.Properties; -import java.util.ResourceBundle; import java.util.Set; import org.eclipse.jetty.util.ArrayTrie; import org.eclipse.jetty.util.BufferUtil; -import org.eclipse.jetty.util.Loader; import org.eclipse.jetty.util.StringUtil; import org.eclipse.jetty.util.Trie; import org.eclipse.jetty.util.log.Log; @@ -399,6 +395,12 @@ public class MimeTypes quote=false; continue; } + + if(';'==b && state<=8) + { + state = 1; + continue; + } switch(state) { @@ -408,8 +410,6 @@ public class MimeTypes quote=true; break; } - if (';'==b) - state=1; break; case 1: if ('c'==b) state=2; else if (' '!=b) state=0; break; diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/PreEncodedHttpField.java b/jetty-http/src/main/java/org/eclipse/jetty/http/PreEncodedHttpField.java index 6c81a914693..8a49a986660 100644 --- a/jetty-http/src/main/java/org/eclipse/jetty/http/PreEncodedHttpField.java +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/PreEncodedHttpField.java @@ -21,6 +21,7 @@ package org.eclipse.jetty.http; import java.nio.ByteBuffer; import java.util.ArrayList; +import java.util.Arrays; import java.util.Iterator; import java.util.List; import java.util.ServiceLoader; @@ -51,30 +52,56 @@ public class PreEncodedHttpField extends HttpField { try { - encoders.add(iter.next()); + HttpFieldPreEncoder encoder = iter.next(); + if (index(encoder.getHttpVersion())>=0) + encoders.add(encoder); } catch(Error|RuntimeException e) { LOG.debug(e); } } - // TODO avoid needing this catch all - if (encoders.size()==0) - encoders.add(new Http1FieldPreEncoder()); LOG.debug("HttpField encoders loaded: {}",encoders); - __encoders = encoders.toArray(new HttpFieldPreEncoder[encoders.size()]); + int size=encoders.size(); + + __encoders = new HttpFieldPreEncoder[size==0?1:size]; + for (HttpFieldPreEncoder e:encoders) + { + int i = index(e.getHttpVersion()); + if (__encoders[i]==null) + __encoders[i] = e; + else + LOG.warn("multiple PreEncoders for "+e.getHttpVersion()); + } + + // Always support HTTP1 + if (__encoders[0]==null) + __encoders[0] = new Http1FieldPreEncoder(); } - private final byte[][] _encodedField=new byte[2][]; + private static int index(HttpVersion version) + { + switch (version) + { + case HTTP_1_0: + case HTTP_1_1: + return 0; + + case HTTP_2: + return 1; + + default: + return -1; + } + } + + private final byte[][] _encodedField=new byte[__encoders.length][]; public PreEncodedHttpField(HttpHeader header,String name,String value) { super(header,name, value); - - for (HttpFieldPreEncoder e:__encoders) - { - _encodedField[e.getHttpVersion()==HttpVersion.HTTP_2?1:0]=e.getEncodedField(header,header.asString(),value); - } + for (int i=0;i<__encoders.length;i++) + _encodedField[i]=__encoders[i].getEncodedField(header,header.asString(),value); } public PreEncodedHttpField(HttpHeader header,String value) @@ -89,6 +116,6 @@ public class PreEncodedHttpField extends HttpField public void putTo(ByteBuffer bufferInFillMode, HttpVersion version) { - bufferInFillMode.put(_encodedField[version==HttpVersion.HTTP_2?1:0]); + bufferInFillMode.put(_encodedField[index(version)]); } } \ No newline at end of file diff --git a/jetty-http/src/main/java/org/eclipse/jetty/http/pathmap/ServletPathSpec.java b/jetty-http/src/main/java/org/eclipse/jetty/http/pathmap/ServletPathSpec.java index 9f0732e5ef1..d052c2f18c7 100644 --- a/jetty-http/src/main/java/org/eclipse/jetty/http/pathmap/ServletPathSpec.java +++ b/jetty-http/src/main/java/org/eclipse/jetty/http/pathmap/ServletPathSpec.java @@ -18,10 +18,26 @@ package org.eclipse.jetty.http.pathmap; +import org.eclipse.jetty.util.StringUtil; import org.eclipse.jetty.util.URIUtil; public class ServletPathSpec extends PathSpec { + /** + * If a servlet or filter path mapping isn't a suffix mapping, ensure + * it starts with '/' + * + * @param pathSpec the servlet or filter mapping pattern + * @return the pathSpec prefixed by '/' if appropriate + */ + public static String normalize(String pathSpec) + { + if (StringUtil.isNotBlank(pathSpec) && !pathSpec.startsWith("/") && !pathSpec.startsWith("*")) + return "/" + pathSpec; + return pathSpec; + } + + public ServletPathSpec(String servletPathSpec) { super(); diff --git a/jetty-http/src/test/java/org/eclipse/jetty/http/HttpGeneratorServerTest.java b/jetty-http/src/test/java/org/eclipse/jetty/http/HttpGeneratorServerTest.java index 34b485fcf91..633ebbd76bf 100644 --- a/jetty-http/src/test/java/org/eclipse/jetty/http/HttpGeneratorServerTest.java +++ b/jetty-http/src/test/java/org/eclipse/jetty/http/HttpGeneratorServerTest.java @@ -19,6 +19,7 @@ package org.eclipse.jetty.http; import static org.hamcrest.Matchers.containsString; +import static org.hamcrest.Matchers.endsWith; import static org.hamcrest.Matchers.not; import static org.hamcrest.Matchers.startsWith; import static org.junit.Assert.assertEquals; @@ -27,6 +28,7 @@ import static org.junit.Assert.assertThat; import java.nio.ByteBuffer; import org.eclipse.jetty.util.BufferUtil; +import org.hamcrest.Matchers; import org.junit.Assert; import org.junit.Test; @@ -229,7 +231,7 @@ public class HttpGeneratorServerTest } @Test - public void testResponseNoContent() throws Exception + public void testResponseIncorrectContentLength() throws Exception { ByteBuffer header = BufferUtil.allocate(8096); @@ -239,7 +241,36 @@ public class HttpGeneratorServerTest assertEquals(HttpGenerator.Result.NEED_INFO, result); assertEquals(HttpGenerator.State.START, gen.getState()); - MetaData.Response info = new MetaData.Response(HttpVersion.HTTP_1_1, 200, null, new HttpFields(), -1); + MetaData.Response info = new MetaData.Response(HttpVersion.HTTP_1_1, 200, null, new HttpFields(), 10); + info.getFields().add("Last-Modified", DateGenerator.__01Jan1970); + info.getFields().add("Content-Length", "11"); + + result = gen.generateResponse(info, null, null, null, true); + assertEquals(HttpGenerator.Result.NEED_HEADER, result); + + try + { + gen.generateResponse(info, header, null, null, true); + Assert.fail(); + } + catch(BadMessageException e) + { + assertEquals(e._code,500); + } + } + + @Test + public void testResponseNoContentPersistent() throws Exception + { + ByteBuffer header = BufferUtil.allocate(8096); + + HttpGenerator gen = new HttpGenerator(); + + HttpGenerator.Result result = gen.generateResponse(null, null, null, null, true); + assertEquals(HttpGenerator.Result.NEED_INFO, result); + assertEquals(HttpGenerator.State.START, gen.getState()); + + MetaData.Response info = new MetaData.Response(HttpVersion.HTTP_1_1, 200, null, new HttpFields(), 0); info.getFields().add("Last-Modified", DateGenerator.__01Jan1970); result = gen.generateResponse(info, null, null, null, true); @@ -261,6 +292,40 @@ public class HttpGeneratorServerTest assertThat(head, containsString("Content-Length: 0")); } + @Test + public void testResponseKnownNoContentNotPersistent() throws Exception + { + ByteBuffer header = BufferUtil.allocate(8096); + + HttpGenerator gen = new HttpGenerator(); + + HttpGenerator.Result result = gen.generateResponse(null, null, null, null, true); + assertEquals(HttpGenerator.Result.NEED_INFO, result); + assertEquals(HttpGenerator.State.START, gen.getState()); + + MetaData.Response info = new MetaData.Response(HttpVersion.HTTP_1_1, 200, null, new HttpFields(), 0); + info.getFields().add("Last-Modified", DateGenerator.__01Jan1970); + info.getFields().add("Connection", "close"); + + result = gen.generateResponse(info, null, null, null, true); + assertEquals(HttpGenerator.Result.NEED_HEADER, result); + + result = gen.generateResponse(info, header, null, null, true); + assertEquals(HttpGenerator.Result.FLUSH, result); + assertEquals(HttpGenerator.State.COMPLETING, gen.getState()); + String head = BufferUtil.toString(header); + BufferUtil.clear(header); + + result = gen.generateResponse(null, null, null, null, false); + assertEquals(HttpGenerator.Result.SHUTDOWN_OUT, result); + assertEquals(HttpGenerator.State.END, gen.getState()); + + assertEquals(0, gen.getContentPrepared()); + assertThat(head, containsString("HTTP/1.1 200 OK")); + assertThat(head, containsString("Last-Modified: Thu, 01 Jan 1970 00:00:00 GMT")); + assertThat(head, containsString("Connection: close")); + } + @Test public void testResponseUpgrade() throws Exception { @@ -344,19 +409,23 @@ public class HttpGeneratorServerTest assertEquals(HttpGenerator.Result.DONE, result); assertEquals(HttpGenerator.State.END, gen.getState()); + assertThat(out, containsString("HTTP/1.1 200 OK")); assertThat(out, containsString("Last-Modified: Thu, 01 Jan 1970 00:00:00 GMT")); assertThat(out, not(containsString("Content-Length"))); assertThat(out, containsString("Transfer-Encoding: chunked")); - assertThat(out, containsString("\r\n\r\nD\r\n")); - assertThat(out, containsString("\r\nHello World! \r\n")); - assertThat(out, containsString("\r\n2E\r\n")); - assertThat(out, containsString("\r\nThe quick brown fox jumped over the lazy dog. \r\n")); - assertThat(out, containsString("\r\n0\r\n")); + + assertThat(out, endsWith( + "\r\n\r\nD\r\n"+ + "Hello World! \r\n"+ + "2E\r\n"+ + "The quick brown fox jumped over the lazy dog. \r\n"+ + "0\r\n"+ + "\r\n")); } @Test - public void testResponseWithKnownContent() throws Exception + public void testResponseWithKnownContentLengthFromMetaData() throws Exception { ByteBuffer header = BufferUtil.allocate(4096); ByteBuffer content0 = BufferUtil.toBuffer("Hello World! "); @@ -403,6 +472,58 @@ public class HttpGeneratorServerTest assertThat(out, containsString("\r\n\r\nHello World! The quick brown fox jumped over the lazy dog. ")); } + @Test + public void testResponseWithKnownContentLengthFromHeader() throws Exception + { + ByteBuffer header = BufferUtil.allocate(4096); + ByteBuffer content0 = BufferUtil.toBuffer("Hello World! "); + ByteBuffer content1 = BufferUtil.toBuffer("The quick brown fox jumped over the lazy dog. "); + HttpGenerator gen = new HttpGenerator(); + + HttpGenerator.Result result = gen.generateResponse(null, null, null, content0, false); + assertEquals(HttpGenerator.Result.NEED_INFO, result); + assertEquals(HttpGenerator.State.START, gen.getState()); + + MetaData.Response info = new MetaData.Response(HttpVersion.HTTP_1_1, 200, null, new HttpFields(), -1); + info.getFields().add("Last-Modified", DateGenerator.__01Jan1970); + info.getFields().add("Content-Length",""+(content0.remaining()+content1.remaining())); + result = gen.generateResponse(info, null, null, content0, false); + assertEquals(HttpGenerator.Result.NEED_HEADER, result); + assertEquals(HttpGenerator.State.START, gen.getState()); + + result = gen.generateResponse(info, header, null, content0, false); + assertEquals(HttpGenerator.Result.FLUSH, result); + assertEquals(HttpGenerator.State.COMMITTED, gen.getState()); + + String out = BufferUtil.toString(header); + BufferUtil.clear(header); + out += BufferUtil.toString(content0); + BufferUtil.clear(content0); + + result = gen.generateResponse(null, null, null, content1, false); + assertEquals(HttpGenerator.Result.FLUSH, result); + assertEquals(HttpGenerator.State.COMMITTED, gen.getState()); + out += BufferUtil.toString(content1); + BufferUtil.clear(content1); + + result = gen.generateResponse(null, null, null, null, true); + assertEquals(HttpGenerator.Result.CONTINUE, result); + assertEquals(HttpGenerator.State.COMPLETING, gen.getState()); + + result = gen.generateResponse(null, null, null, null, true); + assertEquals(HttpGenerator.Result.DONE, result); + assertEquals(HttpGenerator.State.END, gen.getState()); + + assertThat(out, containsString("HTTP/1.1 200 OK")); + assertThat(out, containsString("Last-Modified: Thu, 01 Jan 1970 00:00:00 GMT")); + assertThat(out, not(containsString("chunked"))); + assertThat(out, containsString("Content-Length: 59")); + assertThat(out, containsString("\r\n\r\nHello World! The quick brown fox jumped over the lazy dog. ")); + } + + + + @Test public void test100ThenResponseWithContent() throws Exception { diff --git a/jetty-http/src/test/java/org/eclipse/jetty/http/HttpTester.java b/jetty-http/src/test/java/org/eclipse/jetty/http/HttpTester.java index caf242b5024..ac24c16afa6 100644 --- a/jetty-http/src/test/java/org/eclipse/jetty/http/HttpTester.java +++ b/jetty-http/src/test/java/org/eclipse/jetty/http/HttpTester.java @@ -215,14 +215,20 @@ public class HttpTester ByteBuffer buffer = in.getBuffer(); - int len=0; - while(len>=0) + while(true) { if (BufferUtil.hasContent(buffer)) if (parser.parseNext(buffer)) break; - if (in.fillBuffer()<=0) + int len=in.fillBuffer(); + if (len==0) break; + if (len<=0) + { + parser.atEOF(); + parser.parseNext(buffer); + break; + } } if (r.isComplete()) diff --git a/jetty-http/src/test/java/org/eclipse/jetty/http/MimeTypesTest.java b/jetty-http/src/test/java/org/eclipse/jetty/http/MimeTypesTest.java index a45260f1639..8e39c05ae25 100644 --- a/jetty-http/src/test/java/org/eclipse/jetty/http/MimeTypesTest.java +++ b/jetty-http/src/test/java/org/eclipse/jetty/http/MimeTypesTest.java @@ -18,9 +18,11 @@ package org.eclipse.jetty.http; +import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertThat; import org.junit.Test; @@ -75,25 +77,34 @@ public class MimeTypesTest assertNotNull(prefix,contentType); assertEquals(prefix,expectedMimeType,contentType); } + + private void assertCharsetFromContentType(String contentType, String expectedCharset) + { + assertThat("getCharsetFromContentType(\"" + contentType + "\")", + MimeTypes.getCharsetFromContentType(contentType), is(expectedCharset)); + } @Test public void testCharsetFromContentType() { - assertEquals("abc",MimeTypes.getCharsetFromContentType("foo/bar;charset=abc;some=else")); - assertEquals("abc",MimeTypes.getCharsetFromContentType("foo/bar;charset=abc")); - assertEquals("abc",MimeTypes.getCharsetFromContentType("foo/bar ; charset = abc")); - assertEquals("abc",MimeTypes.getCharsetFromContentType("foo/bar ; charset = abc ; some=else")); - assertEquals("abc",MimeTypes.getCharsetFromContentType("foo/bar;other=param;charset=abc;some=else")); - assertEquals("abc",MimeTypes.getCharsetFromContentType("foo/bar;other=param;charset=abc")); - assertEquals("abc",MimeTypes.getCharsetFromContentType("foo/bar other = param ; charset = abc")); - assertEquals("abc",MimeTypes.getCharsetFromContentType("foo/bar other = param ; charset = abc ; some=else")); - assertEquals("abc",MimeTypes.getCharsetFromContentType("foo/bar other = param ; charset = abc")); - assertEquals("abc",MimeTypes.getCharsetFromContentType("foo/bar other = param ; charset = \"abc\" ; some=else")); - assertEquals(null,MimeTypes.getCharsetFromContentType("foo/bar")); - assertEquals("utf-8",MimeTypes.getCharsetFromContentType("foo/bar;charset=uTf8")); - assertEquals("utf-8",MimeTypes.getCharsetFromContentType("foo/bar;other=\"charset=abc\";charset=uTf8")); - assertEquals("utf-8",MimeTypes.getCharsetFromContentType("text/html;charset=utf-8")); - + assertCharsetFromContentType("foo/bar;charset=abc;some=else", "abc"); + assertCharsetFromContentType("foo/bar;charset=abc", "abc"); + assertCharsetFromContentType("foo/bar ; charset = abc", "abc"); + assertCharsetFromContentType("foo/bar ; charset = abc ; some=else", "abc"); + assertCharsetFromContentType("foo/bar;other=param;charset=abc;some=else", "abc"); + assertCharsetFromContentType("foo/bar;other=param;charset=abc", "abc"); + assertCharsetFromContentType("foo/bar other = param ; charset = abc", "abc"); + assertCharsetFromContentType("foo/bar other = param ; charset = abc ; some=else", "abc"); + assertCharsetFromContentType("foo/bar other = param ; charset = abc", "abc"); + assertCharsetFromContentType("foo/bar other = param ; charset = \"abc\" ; some=else", "abc"); + assertCharsetFromContentType("foo/bar", null); + assertCharsetFromContentType("foo/bar;charset=uTf8", "utf-8"); + assertCharsetFromContentType("foo/bar;other=\"charset=abc\";charset=uTf8", "utf-8"); + assertCharsetFromContentType("application/pdf; charset=UTF-8", "utf-8"); + assertCharsetFromContentType("application/pdf;; charset=UTF-8", "utf-8"); + assertCharsetFromContentType("application/pdf;;; charset=UTF-8", "utf-8"); + assertCharsetFromContentType("application/pdf;;;; charset=UTF-8", "utf-8"); + assertCharsetFromContentType("text/html;charset=utf-8", "utf-8"); } @Test diff --git a/jetty-http/src/test/resources/jetty-logging.properties b/jetty-http/src/test/resources/jetty-logging.properties new file mode 100644 index 00000000000..adf68c7c337 --- /dev/null +++ b/jetty-http/src/test/resources/jetty-logging.properties @@ -0,0 +1,3 @@ +org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog +#org.eclipse.jetty.LEVEL=DEBUG +#org.eclipse.jetty.server.LEVEL=DEBUG diff --git a/jetty-http2/http2-alpn-tests/src/test/resources/jetty-logging.properties b/jetty-http2/http2-alpn-tests/src/test/resources/jetty-logging.properties index 29a0dfa4484..8faad6f931a 100644 --- a/jetty-http2/http2-alpn-tests/src/test/resources/jetty-logging.properties +++ b/jetty-http2/http2-alpn-tests/src/test/resources/jetty-logging.properties @@ -1,3 +1,3 @@ org.eclipse.jetty.util.log.class=org.eclipse.jetty.util.log.StdErrLog -org.eclipse.jetty.alpn.LEVEL=DEBUG -org.eclipse.jetty.http2.LEVEL=DEBUG +# org.eclipse.jetty.alpn.LEVEL=DEBUG +# org.eclipse.jetty.http2.LEVEL=DEBUG diff --git a/jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/PushCacheFilterTest.java b/jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/PushCacheFilterTest.java index 9b796108397..8fccc5ae1f7 100644 --- a/jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/PushCacheFilterTest.java +++ b/jetty-http2/http2-client/src/test/java/org/eclipse/jetty/http2/client/PushCacheFilterTest.java @@ -799,4 +799,90 @@ public class PushCacheFilterTest extends AbstractTest Assert.assertTrue(pushLatch.await(5, TimeUnit.SECONDS)); Assert.assertTrue(primaryResponseLatch.await(5, TimeUnit.SECONDS)); } + + @Test + public void testPOSTRequestIsNotPushed() throws Exception + { + final String primaryResource = "/primary.html"; + final String secondaryResource = "/secondary.png"; + final byte[] secondaryData = "SECONDARY".getBytes("UTF-8"); + start(new HttpServlet() + { + @Override + protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException + { + String requestURI = req.getRequestURI(); + ServletOutputStream output = resp.getOutputStream(); + if (requestURI.endsWith(primaryResource)) + output.print("PRIMARY"); + else if (requestURI.endsWith(secondaryResource)) + output.write(secondaryData); + } + }); + + final Session session = newClient(new Session.Listener.Adapter()); + + // Request for the primary and secondary resource to build the cache. + final String referrerURI = "http://localhost:" + connector.getLocalPort() + servletPath + primaryResource; + HttpFields primaryFields = new HttpFields(); + MetaData.Request primaryRequest = newRequest("GET", primaryResource, primaryFields); + final CountDownLatch warmupLatch = new CountDownLatch(1); + session.newStream(new HeadersFrame(primaryRequest, null, true), new Promise.Adapter<>(), new Stream.Listener.Adapter() + { + @Override + public void onData(Stream stream, DataFrame frame, Callback callback) + { + callback.succeeded(); + if (frame.isEndStream()) + { + // Request for the secondary resource. + HttpFields secondaryFields = new HttpFields(); + secondaryFields.put(HttpHeader.REFERER, referrerURI); + MetaData.Request secondaryRequest = newRequest("GET", secondaryResource, secondaryFields); + session.newStream(new HeadersFrame(secondaryRequest, null, true), new Promise.Adapter<>(), new Stream.Listener.Adapter() + { + @Override + public void onData(Stream stream, DataFrame frame, Callback callback) + { + callback.succeeded(); + warmupLatch.countDown(); + } + }); + } + } + }); + Assert.assertTrue(warmupLatch.await(5, TimeUnit.SECONDS)); + + // Request again the primary resource with POST, we should not get the secondary resource pushed. + primaryRequest = newRequest("POST", primaryResource, primaryFields); + final CountDownLatch primaryResponseLatch = new CountDownLatch(1); + final CountDownLatch pushLatch = new CountDownLatch(1); + session.newStream(new HeadersFrame(primaryRequest, null, true), new Promise.Adapter<>(), new Stream.Listener.Adapter() + { + @Override + public Stream.Listener onPush(Stream stream, PushPromiseFrame frame) + { + return new Adapter() + { + @Override + public void onData(Stream stream, DataFrame frame, Callback callback) + { + callback.succeeded(); + if (frame.isEndStream()) + pushLatch.countDown(); + } + }; + } + + @Override + public void onData(Stream stream, DataFrame frame, Callback callback) + { + callback.succeeded(); + if (frame.isEndStream()) + primaryResponseLatch.countDown(); + } + }); + Assert.assertTrue(primaryResponseLatch.await(5, TimeUnit.SECONDS)); + Assert.assertFalse(pushLatch.await(1, TimeUnit.SECONDS)); + } } diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Flusher.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Flusher.java index 3c6ff734f88..d98e5c0ea22 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Flusher.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Flusher.java @@ -19,7 +19,6 @@ package org.eclipse.jetty.http2; import java.nio.ByteBuffer; -import java.nio.channels.ClosedChannelException; import java.util.ArrayDeque; import java.util.ArrayList; import java.util.Deque; @@ -46,7 +45,7 @@ public class HTTP2Flusher extends IteratingCallback private final HTTP2Session session; private final ByteBufferPool.Lease lease; private Entry stalled; - private boolean terminated; + private Throwable terminated; public HTTP2Flusher(HTTP2Session session) { @@ -56,52 +55,54 @@ public class HTTP2Flusher extends IteratingCallback public void window(IStream stream, WindowUpdateFrame frame) { - boolean closed; + Throwable closed; synchronized (this) { closed = terminated; - if (!closed) + if (closed == null) windows.offer(new WindowEntry(stream, frame)); } // Flush stalled data. - if (!closed) + if (closed == null) iterate(); } public boolean prepend(Entry entry) { - boolean closed; + Throwable closed; synchronized (this) { closed = terminated; - if (!closed) + if (closed == null) { frames.offerFirst(entry); if (LOG.isDebugEnabled()) LOG.debug("Prepended {}, frames={}", entry, frames.size()); } } - if (closed) - closed(entry, new ClosedChannelException()); - return !closed; + if (closed == null) + return true; + closed(entry, closed); + return false; } public boolean append(Entry entry) { - boolean closed; + Throwable closed; synchronized (this) { closed = terminated; - if (!closed) + if (closed == null) { frames.offer(entry); if (LOG.isDebugEnabled()) LOG.debug("Appended {}, frames={}", entry, frames.size()); } } - if (closed) - closed(entry, new ClosedChannelException()); - return !closed; + if (closed == null) + return true; + closed(entry, closed); + return false; } public int getQueueSize() @@ -113,15 +114,15 @@ public class HTTP2Flusher extends IteratingCallback } @Override - protected Action process() throws Exception + protected Action process() throws Throwable { if (LOG.isDebugEnabled()) LOG.debug("Flushing {}", session); synchronized (this) { - if (terminated) - throw new ClosedChannelException(); + if (terminated != null) + throw terminated; while (!windows.isEmpty()) { @@ -251,13 +252,13 @@ public class HTTP2Flusher extends IteratingCallback { lease.recycle(); - boolean closed; + Throwable closed; synchronized (this) { closed = terminated; - terminated = true; + terminated = x; if (LOG.isDebugEnabled()) - LOG.debug("{}, active/queued={}/{}", closed ? "Closing" : "Failing", actives.size(), frames.size()); + LOG.debug("{}, active/queued={}/{}", closed != null ? "Closing" : "Failing", actives.size(), frames.size()); actives.addAll(frames); frames.clear(); } @@ -267,21 +268,21 @@ public class HTTP2Flusher extends IteratingCallback // If the failure came from within the // flusher, we need to close the connection. - if (!closed) + if (closed == null) session.abort(x); } - void terminate() + void terminate(Throwable cause) { - boolean closed; + Throwable closed; synchronized (this) { closed = terminated; - terminated = true; + terminated = cause; if (LOG.isDebugEnabled()) - LOG.debug("{}", closed ? "Terminated" : "Terminating"); + LOG.debug("{}", closed != null ? "Terminated" : "Terminating"); } - if (!closed) + if (closed == null) iterate(); } diff --git a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java index 772b26962fd..be26e1a5bb9 100644 --- a/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java +++ b/jetty-http2/http2-common/src/main/java/org/eclipse/jetty/http2/HTTP2Session.java @@ -965,7 +965,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio endPoint.close(); } - private void terminate() + private void terminate(Throwable cause) { while (true) { @@ -978,7 +978,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio { if (closed.compareAndSet(current, CloseState.CLOSED)) { - flusher.terminate(); + flusher.terminate(cause); for (IStream stream : streams.values()) stream.close(); streams.clear(); @@ -998,7 +998,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio protected void abort(Throwable failure) { notifyFailure(this, failure); - terminate(); + terminate(failure); } public boolean isDisconnected() @@ -1206,7 +1206,7 @@ public abstract class HTTP2Session extends ContainerLifeCycle implements ISessio } case DISCONNECT: { - terminate(); + terminate(new ClosedChannelException()); break; } default: diff --git a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackTest.java b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackTest.java index fce577bbb57..353396d48c0 100644 --- a/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackTest.java +++ b/jetty-http2/http2-hpack/src/test/java/org/eclipse/jetty/http2/hpack/HpackTest.java @@ -18,10 +18,6 @@ package org.eclipse.jetty.http2.hpack; -import static org.hamcrest.CoreMatchers.is; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertThat; - import java.nio.ByteBuffer; import org.eclipse.jetty.http.BadMessageException; @@ -38,6 +34,10 @@ import org.eclipse.jetty.util.BufferUtil; import org.junit.Assert; import org.junit.Test; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; + public class HpackTest { final static HttpField ServerJetty = new PreEncodedHttpField(HttpHeader.SERVER,"jetty"); @@ -187,7 +187,7 @@ public class HpackTest private void assertMetadataSame(MetaData expected, MetaData actual) { assertThat("Metadata.contentLength",actual.getContentLength(),is(expected.getContentLength())); - assertThat("Metadata.version" + ".version", actual.getVersion(), is(expected.getVersion())); + assertThat("Metadata.version" + ".version", actual.getHttpVersion(),is(expected.getHttpVersion())); assertHttpFieldsSame("Metadata.fields",expected.getFields(),actual.getFields()); } diff --git a/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpReceiverOverHTTP2.java b/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpReceiverOverHTTP2.java index f95c09d429f..be8296a615f 100644 --- a/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpReceiverOverHTTP2.java +++ b/jetty-http2/http2-http-client-transport/src/main/java/org/eclipse/jetty/http2/client/http/HttpReceiverOverHTTP2.java @@ -67,7 +67,7 @@ public class HttpReceiverOverHTTP2 extends HttpReceiver implements Stream.Listen HttpResponse response = exchange.getResponse(); MetaData.Response metaData = (MetaData.Response)frame.getMetaData(); - response.version(metaData.getVersion()).status(metaData.getStatus()).reason(metaData.getReason()); + response.version(metaData.getHttpVersion()).status(metaData.getStatus()).reason(metaData.getReason()); if (responseBegin(exchange)) { diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerConnection.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerConnection.java index f817501ed99..ee18f55373c 100644 --- a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerConnection.java +++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HTTP2ServerConnection.java @@ -159,15 +159,18 @@ public class HTTP2ServerConnection extends HTTP2Connection implements Connection if (LOG.isDebugEnabled()) LOG.debug("Processing {} on {}", frame, stream); HttpChannelOverHTTP2 channel = (HttpChannelOverHTTP2)stream.getAttribute(IStream.CHANNEL_ATTRIBUTE); - Runnable task = channel.onRequestContent(frame, callback); - if (task != null) - offerTask(task, false); + if (channel != null) + { + Runnable task = channel.onRequestContent(frame, callback); + if (task != null) + offerTask(task, false); + } } public boolean onStreamTimeout(IStream stream, Throwable failure) { HttpChannelOverHTTP2 channel = (HttpChannelOverHTTP2)stream.getAttribute(IStream.CHANNEL_ATTRIBUTE); - boolean result = channel.onStreamTimeout(failure); + boolean result = channel != null && channel.onStreamTimeout(failure); if (LOG.isDebugEnabled()) LOG.debug("{} idle timeout on {}: {}", result ? "Processed" : "Ignored", stream, failure); return result; @@ -178,7 +181,8 @@ public class HTTP2ServerConnection extends HTTP2Connection implements Connection if (LOG.isDebugEnabled()) LOG.debug("Processing failure on {}: {}", stream, failure); HttpChannelOverHTTP2 channel = (HttpChannelOverHTTP2)stream.getAttribute(IStream.CHANNEL_ATTRIBUTE); - channel.onFailure(failure); + if (channel != null) + channel.onFailure(failure); } public boolean onSessionTimeout(Throwable failure) @@ -188,7 +192,8 @@ public class HTTP2ServerConnection extends HTTP2Connection implements Connection for (Stream stream : session.getStreams()) { HttpChannelOverHTTP2 channel = (HttpChannelOverHTTP2)stream.getAttribute(IStream.CHANNEL_ATTRIBUTE); - result &= !channel.isRequestHandled(); + if (channel != null) + result &= !channel.isRequestHandled(); } if (LOG.isDebugEnabled()) LOG.debug("{} idle timeout on {}: {}", result ? "Processed" : "Ignored", session, failure); diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java index 7c3717fc3f0..1ceaad98095 100644 --- a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java +++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpChannelOverHTTP2.java @@ -126,7 +126,7 @@ public class HttpChannelOverHTTP2 extends HttpChannel LOG.debug("HTTP2 Request #{}/{}, delayed={}:{}{} {} {}{}{}", stream.getId(), Integer.toHexString(stream.getSession().hashCode()), _delayedUntilContent, System.lineSeparator(), - request.getMethod(), request.getURI(), request.getVersion(), + request.getMethod(), request.getURI(), request.getHttpVersion(), System.lineSeparator(), fields); } @@ -157,7 +157,7 @@ public class HttpChannelOverHTTP2 extends HttpChannel Stream stream = getStream(); LOG.debug("HTTP2 PUSH Request #{}/{}:{}{} {} {}{}{}", stream.getId(), Integer.toHexString(stream.getSession().hashCode()), System.lineSeparator(), - request.getMethod(), request.getURI(), request.getVersion(), + request.getMethod(), request.getURI(), request.getHttpVersion(), System.lineSeparator(), request.getFields()); } @@ -199,7 +199,7 @@ public class HttpChannelOverHTTP2 extends HttpChannel { Stream stream = getStream(); LOG.debug("HTTP2 Commit Response #{}/{}:{}{} {} {}{}{}", - stream.getId(), Integer.toHexString(stream.getSession().hashCode()), System.lineSeparator(), info.getVersion(), info.getStatus(), info.getReason(), + stream.getId(), Integer.toHexString(stream.getSession().hashCode()), System.lineSeparator(), info.getHttpVersion(), info.getStatus(), info.getReason(), System.lineSeparator(), info.getFields()); } } diff --git a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpTransportOverHTTP2.java b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpTransportOverHTTP2.java index 24b925c8b40..b5c7d5afc65 100644 --- a/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpTransportOverHTTP2.java +++ b/jetty-http2/http2-server/src/main/java/org/eclipse/jetty/http2/server/HttpTransportOverHTTP2.java @@ -217,7 +217,8 @@ public class HttpTransportOverHTTP2 implements HttpTransport // Consume the existing queued data frames to // avoid stalling the session flow control. HttpChannelOverHTTP2 channel = (HttpChannelOverHTTP2)stream.getAttribute(IStream.CHANNEL_ATTRIBUTE); - channel.consumeInput(); + if (channel != null) + channel.consumeInput(); } @Override diff --git a/jetty-infinispan/src/main/config/modules/session-store-infinispan-embedded.mod b/jetty-infinispan/src/main/config/modules/session-store-infinispan-embedded.mod index ba186c8345d..196d7d39f06 100644 --- a/jetty-infinispan/src/main/config/modules/session-store-infinispan-embedded.mod +++ b/jetty-infinispan/src/main/config/modules/session-store-infinispan-embedded.mod @@ -9,11 +9,13 @@ session-store [depend] sessions -sessions/infinispan/default [files] maven://org.infinispan/infinispan-embedded/7.1.1.Final|lib/infinispan/infinispan-embedded-7.1.1.Final.jar +[xml] +etc/sessions/infinispan/default.xml + [lib] lib/jetty-infinispan-${jetty.version}.jar lib/infinispan/*.jar @@ -22,3 +24,4 @@ lib/infinispan/*.jar Infinispan is an open source project hosted on Github and released under the Apache 2.0 license. http://infinispan.org/ http://www.apache.org/licenses/LICENSE-2.0.html + diff --git a/jetty-infinispan/src/main/config/modules/session-store-infinispan-remote.mod b/jetty-infinispan/src/main/config/modules/session-store-infinispan-remote.mod index 6f1cda62374..36123367b5b 100644 --- a/jetty-infinispan/src/main/config/modules/session-store-infinispan-remote.mod +++ b/jetty-infinispan/src/main/config/modules/session-store-infinispan-remote.mod @@ -9,10 +9,13 @@ session-store [depend] sessions -sessions/infinispan/remote [files] maven://org.infinispan/infinispan-remote/7.1.1.Final|lib/infinispan/infinispan-remote-7.1.1.Final.jar +basehome:modules/session-store-infinispan-remote/ + +[xml] +etc/sessions/infinispan/remote.xml [lib] lib/jetty-infinispan-${jetty.version}.jar @@ -28,3 +31,8 @@ http://www.apache.org/licenses/LICENSE-2.0.html #jetty.session.infinispan.remoteCacheName=sessions #jetty.session.infinispan.idleTimeout.seconds=0 #jetty.session.gracePeriod.seconds=3600 + + + + + diff --git a/jetty-infinispan/src/main/infinispan-resources/hotrod-client.properties b/jetty-infinispan/src/main/config/modules/session-store-infinispan-remote/resources/hotrod-client.properties similarity index 100% rename from jetty-infinispan/src/main/infinispan-resources/hotrod-client.properties rename to jetty-infinispan/src/main/config/modules/session-store-infinispan-remote/resources/hotrod-client.properties diff --git a/jetty-infinispan/src/main/config/modules/sessions/infinispan/default.mod b/jetty-infinispan/src/main/config/modules/sessions/infinispan/default.mod deleted file mode 100644 index f1906db6c96..00000000000 --- a/jetty-infinispan/src/main/config/modules/sessions/infinispan/default.mod +++ /dev/null @@ -1,6 +0,0 @@ -[description] -Enable use of DefaultCache for session data storage - -[xml] -etc/sessions/infinispan/default.xml - diff --git a/jetty-infinispan/src/main/config/modules/sessions/infinispan/remote.mod b/jetty-infinispan/src/main/config/modules/sessions/infinispan/remote.mod deleted file mode 100644 index f0a2b524805..00000000000 --- a/jetty-infinispan/src/main/config/modules/sessions/infinispan/remote.mod +++ /dev/null @@ -1,9 +0,0 @@ -[description] -Enable use of HotRod remote cache for session data storage - -[files] -https://raw.githubusercontent.com/eclipse/jetty.project/master/jetty-infinispan/src/main/infinispan-resources/hotrod-client.properties?id=${jetty.tag.version}|resources/hotrod-client.properties - -[xml] -etc/sessions/infinispan/remote.xml - diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/ByteArrayEndPoint.java b/jetty-io/src/main/java/org/eclipse/jetty/io/ByteArrayEndPoint.java index 4285e49979e..be1e49dad3d 100644 --- a/jetty-io/src/main/java/org/eclipse/jetty/io/ByteArrayEndPoint.java +++ b/jetty-io/src/main/java/org/eclipse/jetty/io/ByteArrayEndPoint.java @@ -331,7 +331,7 @@ public class ByteArrayEndPoint extends AbstractEndPoint * @param time Time to wait * @param unit Units for time to wait * @return The buffer of output - * @throws InterruptedException + * @throws InterruptedException if interrupted */ public ByteBuffer waitForOutput(long time,TimeUnit unit) throws InterruptedException { diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java b/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java index c016b38d06e..ffeeaeccf28 100644 --- a/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java +++ b/jetty-io/src/main/java/org/eclipse/jetty/io/ManagedSelector.java @@ -34,6 +34,7 @@ import java.util.List; import java.util.Queue; import java.util.Set; import java.util.concurrent.CountDownLatch; +import java.util.concurrent.Executor; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicBoolean; @@ -69,86 +70,14 @@ public class ManagedSelector extends AbstractLifeCycle implements Dumpable private final ExecutionStrategy _lowPriorityStrategy; private Selector _selector; - private final Runnable _runStrategy = new Runnable() - { - @Override - public void run() - { - _strategy.produce(); - } - }; - - private final Runnable _runLowPriorityStrategy = new Runnable() - { - @Override - public void run() - { - Thread current = Thread.currentThread(); - String name = current.getName(); - int priority = current.getPriority(); - try - { - while (isRunning()) - { - try - { - current.setPriority(Thread.MIN_PRIORITY); - current.setName(name+"-lowPrioSelector"); - _lowPriorityStrategy.produce(); - } - catch (Throwable th) - { - LOG.warn(th); - } - } - } - finally - { - current.setPriority(priority); - current.setName(name); - } - } - }; - public ManagedSelector(SelectorManager selectorManager, int id) { _selectorManager = selectorManager; _id = id; SelectorProducer producer = new SelectorProducer(); - _strategy = new ExecuteProduceConsume(producer, selectorManager.getExecutor(), Invocable.InvocationType.BLOCKING); - _lowPriorityStrategy = new ProduceExecuteConsume(producer, selectorManager.getExecutor(), Invocable.InvocationType.BLOCKING) - { - @Override - protected boolean execute(Runnable task) - { - try - { - Invocable.InvocationType invocation=Invocable.getInvocationType(task); - if (LOG.isDebugEnabled()) - LOG.debug("Low Prio Selector execute {} {}",invocation,task); - switch (Invocable.getInvocationType(task)) - { - case NON_BLOCKING: - task.run(); - return true; - - case EITHER: - Invocable.invokeNonBlocking(task); - return true; - - default: - } - return super.execute(task); - } - finally - { - // Allow opportunity for main strategy to take over - Thread.yield(); - } - } - - - }; + Executor executor = selectorManager.getExecutor(); + _strategy = new ExecuteProduceConsume(producer, executor, Invocable.InvocationType.BLOCKING); + _lowPriorityStrategy = new LowPriorityProduceExecuteConsume(producer, executor); setStopTimeout(5000); } @@ -156,9 +85,38 @@ public class ManagedSelector extends AbstractLifeCycle implements Dumpable protected void doStart() throws Exception { super.doStart(); + _selector = _selectorManager.newSelector(); - _selectorManager.execute(_runStrategy); - _selectorManager.execute(_runLowPriorityStrategy); + + // The producer used by the strategies will never + // be idle (either produces a task or blocks). + + // The normal strategy obtains the produced task, schedules + // a new thread to produce more, runs the task and then exits. + _selectorManager.execute(_strategy::produce); + + // The low priority strategy knows the producer will never + // be idle, that tasks are scheduled to run in different + // threads, therefore lowPriorityProduce() never exits. + _selectorManager.execute(this::lowPriorityProduce); + } + + private void lowPriorityProduce() + { + Thread current = Thread.currentThread(); + String name = current.getName(); + int priority = current.getPriority(); + current.setPriority(Thread.MIN_PRIORITY); + current.setName(name+"-lowPrioritySelector"); + try + { + _lowPriorityStrategy.produce(); + } + finally + { + current.setPriority(priority); + current.setName(name); + } } public int size() @@ -227,28 +185,75 @@ public class ManagedSelector extends AbstractLifeCycle implements Dumpable void updateKey(); } + private static class LowPriorityProduceExecuteConsume extends ProduceExecuteConsume + { + private LowPriorityProduceExecuteConsume(SelectorProducer producer, Executor executor) + { + super(producer, executor, InvocationType.BLOCKING); + } + + @Override + protected boolean execute(Runnable task) + { + try + { + InvocationType invocation=Invocable.getInvocationType(task); + if (LOG.isDebugEnabled()) + LOG.debug("Low Priority Selector executing {} {}",invocation,task); + switch (invocation) + { + case NON_BLOCKING: + task.run(); + return true; + + case EITHER: + Invocable.invokeNonBlocking(task); + return true; + + default: + return super.execute(task); + } + } + finally + { + // Allow opportunity for main strategy to take over. + Thread.yield(); + } + } + } + private class SelectorProducer implements ExecutionStrategy.Producer { private Set _keys = Collections.emptySet(); private Iterator _cursor = Collections.emptyIterator(); @Override - public synchronized Runnable produce() + public Runnable produce() { - while (true) + // This method is called from both the + // normal and low priority strategies. + // Only one can produce at a time, so it's synchronized + // to enforce that only one strategy actually produces. + // When idle in select(), this method blocks; + // the other strategy's thread will be blocked + // waiting for this lock to be released. + synchronized (this) { - Runnable task = processSelected(); - if (task != null) - return task; + while (true) + { + Runnable task = processSelected(); + if (task != null) + return task; - Runnable action = nextAction(); - if (action != null) - return action; + Runnable action = nextAction(); + if (action != null) + return action; - update(); + update(); - if (!select()) - return null; + if (!select()) + return null; + } } } @@ -492,7 +497,7 @@ public class ManagedSelector extends AbstractLifeCycle implements Dumpable public void destroyEndPoint(final EndPoint endPoint) { final Connection connection = endPoint.getConnection(); - submit((Runnable)() -> + submit(() -> { if (LOG.isDebugEnabled()) LOG.debug("Destroyed {}", endPoint); diff --git a/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java b/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java index 28b04051c86..bec39111f58 100644 --- a/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java +++ b/jetty-io/src/main/java/org/eclipse/jetty/io/ssl/SslConnection.java @@ -39,7 +39,6 @@ import org.eclipse.jetty.io.ByteBufferPool; import org.eclipse.jetty.io.Connection; import org.eclipse.jetty.io.EndPoint; import org.eclipse.jetty.io.EofException; -import org.eclipse.jetty.io.SelectChannelEndPoint; import org.eclipse.jetty.io.WriteFlusher; import org.eclipse.jetty.util.BufferUtil; import org.eclipse.jetty.util.Callback; @@ -51,7 +50,7 @@ import org.eclipse.jetty.util.log.Logger; * and another consumer of an EndPoint (typically an {@link Connection} like HttpConnection) that * wants unencrypted data. *

- * The connector uses an {@link EndPoint} (typically {@link SelectChannelEndPoint}) as + * The connector uses an {@link EndPoint} (typically SocketChannelEndPoint) as * it's source/sink of encrypted data. It then provides an endpoint via {@link #getDecryptedEndPoint()} to * expose a source/sink of unencrypted data to another connection (eg HttpConnection). *

@@ -110,6 +109,33 @@ public class SslConnection extends AbstractConnection _decryptedEndPoint.getFillInterest().fillable(); } }; + + Callback _sslReadCallback = new Callback() + { + @Override + public void succeeded() + { + onFillable(); + } + + @Override + public void failed(final Throwable x) + { + onFillInterestedFailed(x); + } + + @Override + public InvocationType getInvocationType() + { + return getDecryptedEndPoint().getFillInterest().getCallbackInvocationType(); + } + + @Override + public String toString() + { + return String.format("SSLC.NBReadCB@%x{%s}", SslConnection.this.hashCode(),SslConnection.this); + } + }; public SslConnection(ByteBufferPool byteBufferPool, Executor executor, EndPoint endPoint, SSLEngine sslEngine) { @@ -957,11 +983,15 @@ public class SslConnection extends AbstractConnection getEndPoint().close(); } } - + private void ensureFillInterested() { if (!SslConnection.this.isFillInterested()) - SslConnection.this.fillInterested(); + { + if (LOG.isDebugEnabled()) + LOG.debug("fillInterested SSL NB {}",SslConnection.this); + SslConnection.this.getEndPoint().fillInterested(_sslReadCallback); + } } @Override diff --git a/jetty-jspc-maven-plugin/pom.xml b/jetty-jspc-maven-plugin/pom.xml index 7b874e9a9a3..4fe47700db4 100644 --- a/jetty-jspc-maven-plugin/pom.xml +++ b/jetty-jspc-maven-plugin/pom.xml @@ -34,6 +34,13 @@ + + org.jacoco + jacoco-maven-plugin + + true + + diff --git a/jetty-maven-plugin/pom.xml b/jetty-maven-plugin/pom.xml index 96146bde07f..0b8aab384fe 100644 --- a/jetty-maven-plugin/pom.xml +++ b/jetty-maven-plugin/pom.xml @@ -35,6 +35,13 @@ + + org.jacoco + jacoco-maven-plugin + + true + + diff --git a/jetty-osgi/pom.xml b/jetty-osgi/pom.xml index 868921c89e5..e5e0fb7c124 100644 --- a/jetty-osgi/pom.xml +++ b/jetty-osgi/pom.xml @@ -70,6 +70,13 @@ + + org.jacoco + jacoco-maven-plugin + + true + + diff --git a/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/ProxyServletFailureTest.java b/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/ProxyServletFailureTest.java index f94e091b5a4..c539b94cf14 100644 --- a/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/ProxyServletFailureTest.java +++ b/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/ProxyServletFailureTest.java @@ -257,8 +257,11 @@ public class ProxyServletFailureTest public void testProxyRequestStallsContentServerIdlesTimeout() throws Exception { final byte[] content = new byte[]{'C', '0', 'F', 'F', 'E', 'E'}; + int expected = -1; if (proxyServlet instanceof AsyncProxyServlet) { + // TODO should this be a 502 also??? + expected = 500; proxyServlet = new AsyncProxyServlet() { @Override @@ -281,6 +284,7 @@ public class ProxyServletFailureTest } else { + expected = 502; proxyServlet = new ProxyServlet() { @Override @@ -310,7 +314,7 @@ public class ProxyServletFailureTest .content(new BytesContentProvider(content)) .send(); - Assert.assertEquals(500, response.getStatus()); + Assert.assertEquals(expected, response.getStatus()); } } diff --git a/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/ProxyServletTest.java b/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/ProxyServletTest.java index 3415c883d71..8c902f8758a 100644 --- a/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/ProxyServletTest.java +++ b/jetty-proxy/src/test/java/org/eclipse/jetty/proxy/ProxyServletTest.java @@ -360,13 +360,18 @@ public class ProxyServletTest resp.addHeader(PROXIED_HEADER, "true"); InputStream input = req.getInputStream(); int index = 0; + + byte[] buffer = new byte[16*1024]; while (true) { - int value = input.read(); + int value = input.read(buffer); if (value < 0) break; - Assert.assertEquals("Content mismatch at index=" + index, content[index] & 0xFF, value); - ++index; + for (int i=0;i *

  • ${WAR}
  • + *
  • ${WAR.path}
  • + *
  • ${WAR.uri}
  • *
  • ${jetty.base}
  • + *
  • ${jetty.base.uri}
  • *
  • ${jetty.home}
  • + *
  • ${jetty.home.uri}
  • *
  • ${user.home}
  • + *
  • ${user.home.uri}
  • *
  • ${user.dir}
  • + *
  • ${user.dir.uri}
  • * */ public class AttributeNormalizer { private static final Logger LOG = Log.getLogger(AttributeNormalizer.class); private static final Pattern __propertyPattern = Pattern.compile("(?<=[^$]|^)\\$\\{([^}]*)\\}"); - - private static class PathAttribute + + private static class Attribute { - public final Path path; - public final String key; - private int weight = -1; - - public PathAttribute(String key, Path path) throws IOException + final String key; + final String value; + final int weight; + + public Attribute(String key, String value, int weight) { this.key = key; - this.path = toCanonicalPath(path); - // TODO: Don't allow non-directory paths? (but what if the path doesn't exist?) + this.value = value; + this.weight = weight; } + } - public PathAttribute(String key, String systemPropertyKey) throws IOException + private static URI toCanonicalURI(URI uri) + { + uri = uri.normalize(); + String ascii = uri.toASCIIString(); + if (ascii.endsWith("/")) { - this(key, toCanonicalPath(System.getProperty(systemPropertyKey))); - } - - private static Path toCanonicalPath(String path) throws IOException - { - if (path == null) + try { - return null; + uri = new URI(ascii.substring(0,ascii.length()-1)); } - return toCanonicalPath(FileSystems.getDefault().getPath(path)); - } - - private static Path toCanonicalPath(Path path) throws IOException - { - if (path == null) + catch(URISyntaxException e) { - return null; + throw new IllegalArgumentException(e); } - if (Files.exists(path)) + } + return uri; + } + + private static Path toCanonicalPath(String path) + { + if (path == null) + return null; + if (path.length()>1 && path.endsWith("/")) + path = path.substring(0,path.length()-1); + return toCanonicalPath(FileSystems.getDefault().getPath(path)); + } + + private static Path toCanonicalPath(Path path) + { + if (path == null) + { + return null; + } + if (Files.exists(path)) + { + try { return path.toRealPath(); } - return path.toAbsolutePath(); + catch (IOException e) + { + throw new IllegalArgumentException(e); + } } - - public PathAttribute weight(int newweight) + return path.toAbsolutePath(); + } + + private static class PathAttribute extends Attribute + { + public final Path path; + + public PathAttribute(String key, Path path, int weight) { - this.weight = newweight; - return this; + super(key,path.toString(),weight); + this.path = path; } @Override public String toString() { - return String.format("PathAttribute[%s=>%s,%d]",key,path,weight); + return String.format("PathAttribute[%s=>%s]",key,path); } } - - private static class PathAttributeComparator implements Comparator + + private static class URIAttribute extends Attribute + { + public final URI uri; + + public URIAttribute(String key, URI uri, int weight) + { + super(key,uri.toASCIIString(),weight); + this.uri = uri; + } + + @Override + public String toString() + { + return String.format("URIAttribute[%s=>%s]",key,uri); + } + } + + private static Comparator attrComparator = new Comparator() { @Override - public int compare(PathAttribute o1, PathAttribute o2) + public int compare(Attribute o1, Attribute o2) { - if( (o1.path == null) && (o2.path != null) ) + if( (o1.value == null) && (o2.value != null) ) { return -1; } - if( (o1.path != null) && (o2.path == null) ) + if( (o1.value != null) && (o2.value == null) ) { return 1; } - if( (o1.path == null) && (o2.path == null) ) + if( (o1.value == null) && (o2.value == null) ) { return 0; } // Different lengths? - int diff = o2.path.getNameCount() - o1.path.getNameCount(); + int diff = o2.value.length() - o1.value.length(); if(diff != 0) { return diff; } // Different names? - diff = o2.path.compareTo(o1.path); + diff = o2.value.compareTo(o1.value); if(diff != 0) { return diff; @@ -145,99 +196,122 @@ public class AttributeNormalizer // The paths are the same, base now on weight return o2.weight - o1.weight; } - } + }; - public static String uriSeparators(String path) + private static void add(Listpaths,List uris,String key,int weight) { - StringBuilder ret = new StringBuilder(); - for (char c : path.toCharArray()) + String value = System.getProperty(key); + if (value!=null) { - if ((c == '/') || (c == '\\')) - { - ret.append('/'); - } - else - { - ret.append(c); - } + Path path = toCanonicalPath(value); + paths.add(new PathAttribute(key,path,weight)); + uris.add(new URIAttribute(key+".uri",toCanonicalURI(path.toUri()),weight)); } - return ret.toString(); } private URI warURI; - private List attributes = new ArrayList<>(); - + private Map attributes = new HashMap<>(); + private List paths = new ArrayList<>(); + private List uris = new ArrayList<>(); + public AttributeNormalizer(Resource baseResource) { - // WAR URI is always evaluated before paths. - warURI = baseResource == null ? null : baseResource.getURI(); - // We don't normalize or resolve the baseResource URI + if (baseResource==null) + throw new IllegalArgumentException("No base resource!"); + + warURI = toCanonicalURI(baseResource.getURI()); if (!warURI.isAbsolute()) throw new IllegalArgumentException("WAR URI is not absolute: " + warURI); - try - { - // Track path attributes for expansion - attributes.add(new PathAttribute("jetty.base", "jetty.base").weight(9)); - attributes.add(new PathAttribute("jetty.home", "jetty.home").weight(8)); - attributes.add(new PathAttribute("user.home", "user.home").weight(7)); - attributes.add(new PathAttribute("user.dir", "user.dir").weight(6)); - - Collections.sort(attributes, new PathAttributeComparator()); + + add(paths,uris,"jetty.base",9); + add(paths,uris,"jetty.home",8); + add(paths,uris,"user.home",7); + add(paths,uris,"user.dir",6); - if (LOG.isDebugEnabled()) - { - int i = 0; - for (PathAttribute attr : attributes) - { - LOG.debug(" [{}] {}", i++, attr); - } - } - } - catch (Exception e) + if (warURI.getScheme().equalsIgnoreCase("file")) + paths.add(new PathAttribute("WAR.path",toCanonicalPath(new File(warURI).toString()),10)); + uris.add(new URIAttribute("WAR.uri", warURI,9)); // preferred encoding + uris.add(new URIAttribute("WAR", warURI,8)); // legacy encoding + + Collections.sort(paths,attrComparator); + Collections.sort(uris,attrComparator); + + Stream.concat(paths.stream(),uris.stream()).forEach(a->attributes.put(a.key,a)); + + if (LOG.isDebugEnabled()) { - throw new IllegalArgumentException(e); + for (Attribute attr : attributes.values()) + { + LOG.debug(attr.toString()); + } } } + /** + * Normalize a URI, URL, or File reference by replacing known attributes with ${key} attributes. + * + * @param o the object to normalize into a string + * @return the string representation of the object, with expansion keys. + */ public String normalize(Object o) { try { // Find a URI URI uri = null; + Path path = null; if (o instanceof URI) - uri = (URI)o; + uri = toCanonicalURI(((URI)o)); + else if (o instanceof Resource) + uri = toCanonicalURI(((Resource)o).getURI()); else if (o instanceof URL) - uri = ((URL)o).toURI(); + uri = toCanonicalURI(((URL)o).toURI()); else if (o instanceof File) - uri = ((File)o).toURI(); + path = ((File)o).getAbsoluteFile().getCanonicalFile().toPath(); + else if (o instanceof Path) + path = (Path)o; else { String s = o.toString(); - uri = new URI(s); - if (uri.getScheme() == null) - return s; - } - - if ("jar".equalsIgnoreCase(uri.getScheme())) - { - String raw = uri.getRawSchemeSpecificPart(); - int bang = raw.indexOf("!/"); - String normal = normalize(raw.substring(0,bang)); - String suffix = raw.substring(bang); - return "jar:" + normal + suffix; - } - else if ("file".equalsIgnoreCase(uri.getScheme())) - { - return "file:" + normalizePath(new File(uri.getRawSchemeSpecificPart()).toPath()); - } - else - { - if(uri.isAbsolute()) + try { - return normalizeUri(uri); + uri = new URI(s); + if (uri.getScheme() == null) + { + // Unknown scheme? not relevant to normalize + return s; + } + } + catch(URISyntaxException e) + { + // This path occurs for many reasons, but most common is when this + // is executed on MS Windows, on a string like "D:\jetty" + // and the new URI() fails for + // java.net.URISyntaxException: Illegal character in opaque part at index 2: D:\jetty + return s; } } + + if (uri!=null) + { + if ("jar".equalsIgnoreCase(uri.getScheme())) + { + String raw = uri.getRawSchemeSpecificPart(); + int bang = raw.indexOf("!/"); + String normal = normalize(raw.substring(0,bang)); + String suffix = raw.substring(bang); + return "jar:" + normal + suffix; + } + else + { + if(uri.isAbsolute()) + { + return normalizeUri(uri); + } + } + } + else if (path!=null) + return normalizePath(path); } catch (Exception e) { @@ -246,38 +320,62 @@ public class AttributeNormalizer return String.valueOf(o); } - public String normalizeUri(URI uri) + protected String normalizeUri(URI uri) { - String uriStr = uri.toASCIIString(); - String warStr = warURI.toASCIIString(); - if (uriStr.startsWith(warStr)) + for (URIAttribute a : uris) { - return "${WAR}" + uriStr.substring(warStr.length()); - } - return uriStr; - } - - public String normalizePath(Path path) - { - for (PathAttribute attr : attributes) - { - if (attr.path == null) - continue; - try { - if (path.startsWith(attr.path) || path.equals(attr.path) || Files.isSameFile(path,attr.path)) - { - return uriSeparators(URIUtil.addPaths("${" + attr.key + "}",attr.path.relativize(path).toString())); - } + if (uri.compareTo(a.uri)==0) + return String.format("${%s}",a.key); + + if (!a.uri.getScheme().equalsIgnoreCase(uri.getScheme())) + continue; + if (a.uri.getHost()==null && uri.getHost()!=null) + continue; + if (a.uri.getHost()!=null && !a.uri.getHost().equals(uri.getHost())) + continue; + + if (a.uri.getPath().equals(uri.getPath())) + return a.value; + + if (!uri.getPath().startsWith(a.uri.getPath())) + continue; + + String s = uri.getPath().substring(a.uri.getPath().length()); + + if (s.charAt(0)!='/') + continue; + + return String.format("${%s}%s",a.key,new URI(s).toASCIIString()); + } + catch(URISyntaxException e) + { + LOG.ignore(e); + } + } + return uri.toASCIIString(); + } + + protected String normalizePath(Path path) + { + for (PathAttribute a : paths) + { + try + { + if (path.equals(a.path) || Files.isSameFile(path,a.path)) + return String.format("${%s}",a.key); } catch (IOException ignore) { LOG.ignore(ignore); } + + if (path.startsWith(a.path)) + return String.format("${%s}/%s",a.key,a.path.relativize(path).toString()); } - return uriSeparators(path.toString()); + return path.toString(); } public String expand(String str) @@ -359,25 +457,14 @@ public class AttributeNormalizer private String getString(String property) { - if(property == null) + if(property==null) { return null; } - // Use war path (if known) - if("WAR".equalsIgnoreCase(property)) - { - return warURI.toASCIIString(); - } - - // Use known path attributes - for (PathAttribute attr : attributes) - { - if (attr.key.equalsIgnoreCase(property)) - { - return uriSeparators(attr.path.toString()); - } - } + Attribute a = attributes.get(property); + if (a!=null) + return a.value; // Use system properties next return System.getProperty(property); diff --git a/jetty-quickstart/src/main/java/org/eclipse/jetty/quickstart/QuickStartGeneratorConfiguration.java b/jetty-quickstart/src/main/java/org/eclipse/jetty/quickstart/QuickStartGeneratorConfiguration.java index 94a032e3b59..9fcd0d34e44 100644 --- a/jetty-quickstart/src/main/java/org/eclipse/jetty/quickstart/QuickStartGeneratorConfiguration.java +++ b/jetty-quickstart/src/main/java/org/eclipse/jetty/quickstart/QuickStartGeneratorConfiguration.java @@ -542,7 +542,7 @@ public class QuickStartGeneratorConfiguration extends AbstractConfiguration impl Object o = context.getAttribute(attribute); if (o == null) return; - + Collection c = (o instanceof Collection)? (Collection)o:Collections.singletonList(o); StringBuilder v=new StringBuilder(); for (Object i:c) diff --git a/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/DigestAuthenticator.java b/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/DigestAuthenticator.java index 9359da10a0a..869cb1772eb 100644 --- a/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/DigestAuthenticator.java +++ b/jetty-security/src/main/java/org/eclipse/jetty/security/authentication/DigestAuthenticator.java @@ -23,6 +23,7 @@ import java.nio.charset.StandardCharsets; import java.security.MessageDigest; import java.security.SecureRandom; import java.util.BitSet; +import java.util.Objects; import java.util.Queue; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; @@ -50,8 +51,6 @@ import org.eclipse.jetty.util.security.Constraint; import org.eclipse.jetty.util.security.Credential; /** - * @version $Rev: 4793 $ $Date: 2009-03-19 00:00:01 +0100 (Thu, 19 Mar 2009) $ - * * The nonce max age in ms can be set with the {@link SecurityHandler#setInitParameter(String, String)} * using the name "maxNonceAge". The nonce max count can be set with {@link SecurityHandler#setInitParameter(String, String)} * using the name "maxNonceCount". When the age or count is exceeded, the nonce is considered stale. @@ -59,105 +58,58 @@ import org.eclipse.jetty.util.security.Credential; public class DigestAuthenticator extends LoginAuthenticator { private static final Logger LOG = Log.getLogger(DigestAuthenticator.class); - SecureRandom _random = new SecureRandom(); - private long _maxNonceAgeMs = 60*1000; - private int _maxNC=1024; - private ConcurrentMap _nonceMap = new ConcurrentHashMap(); - private Queue _nonceQueue = new ConcurrentLinkedQueue(); - private static class Nonce - { - final String _nonce; - final long _ts; - final BitSet _seen; - public Nonce(String nonce, long ts, int size) - { - _nonce=nonce; - _ts=ts; - _seen = new BitSet(size); - } + private final SecureRandom _random = new SecureRandom(); + private long _maxNonceAgeMs = 60 * 1000; + private int _maxNC = 1024; + private ConcurrentMap _nonceMap = new ConcurrentHashMap<>(); + private Queue _nonceQueue = new ConcurrentLinkedQueue<>(); - public boolean seen(int count) - { - synchronized (this) - { - if (count>=_seen.size()) - return true; - boolean s=_seen.get(count); - _seen.set(count); - return s; - } - } - } - - /* ------------------------------------------------------------ */ - public DigestAuthenticator() - { - super(); - } - - /* ------------------------------------------------------------ */ - /** - * @see org.eclipse.jetty.security.authentication.LoginAuthenticator#setConfiguration(org.eclipse.jetty.security.Authenticator.AuthConfiguration) - */ @Override public void setConfiguration(AuthConfiguration configuration) { super.setConfiguration(configuration); - String mna=configuration.getInitParameter("maxNonceAge"); - if (mna!=null) - { - _maxNonceAgeMs=Long.valueOf(mna); - } - String mnc=configuration.getInitParameter("maxNonceCount"); - if (mnc!=null) - { - _maxNC=Integer.valueOf(mnc); - } + String mna = configuration.getInitParameter("maxNonceAge"); + if (mna != null) + setMaxNonceAge(Long.valueOf(mna)); + String mnc = configuration.getInitParameter("maxNonceCount"); + if (mnc != null) + setMaxNonceCount(Integer.valueOf(mnc)); } - /* ------------------------------------------------------------ */ public int getMaxNonceCount() { return _maxNC; } - /* ------------------------------------------------------------ */ public void setMaxNonceCount(int maxNC) { _maxNC = maxNC; } - /* ------------------------------------------------------------ */ public long getMaxNonceAge() { return _maxNonceAgeMs; } - /* ------------------------------------------------------------ */ - public synchronized void setMaxNonceAge(long maxNonceAgeInMillis) + public void setMaxNonceAge(long maxNonceAgeInMillis) { _maxNonceAgeMs = maxNonceAgeInMillis; } - /* ------------------------------------------------------------ */ @Override public String getAuthMethod() { return Constraint.__DIGEST_AUTH; } - /* ------------------------------------------------------------ */ @Override public boolean secureResponse(ServletRequest req, ServletResponse res, boolean mandatory, User validatedUser) throws ServerAuthException { return true; } - - - /* ------------------------------------------------------------ */ @Override public Authentication validateRequest(ServletRequest req, ServletResponse res, boolean mandatory) throws ServerAuthException { @@ -217,20 +169,20 @@ public class DigestAuthenticator extends LoginAuthenticator digest.uri = tok; else if ("response".equalsIgnoreCase(name)) digest.response = tok; - name=null; + name = null; } } } - int n = checkNonce(digest,(Request)request); + int n = checkNonce(digest, (Request)request); if (n > 0) { //UserIdentity user = _loginService.login(digest.username,digest); UserIdentity user = login(digest.username, digest, req); - if (user!=null) + if (user != null) { - return new UserAuthentication(getAuthMethod(),user); + return new UserAuthentication(getAuthMethod(), user); } } else if (n == 0) @@ -261,10 +213,17 @@ public class DigestAuthenticator extends LoginAuthenticator { throw new ServerAuthException(e); } - } - /* ------------------------------------------------------------ */ + @Override + public UserIdentity login(String username, Object credentials, ServletRequest request) + { + Digest digest = (Digest)credentials; + if (!Objects.equals(digest.realm, _loginService.getName())) + return null; + return super.login(username, credentials, request); + } + public String newNonce(Request request) { Nonce nonce; @@ -274,43 +233,42 @@ public class DigestAuthenticator extends LoginAuthenticator byte[] nounce = new byte[24]; _random.nextBytes(nounce); - nonce = new Nonce(new String(B64Code.encode(nounce)),request.getTimeStamp(),_maxNC); + nonce = new Nonce(new String(B64Code.encode(nounce)), request.getTimeStamp(), getMaxNonceCount()); } - while (_nonceMap.putIfAbsent(nonce._nonce,nonce)!=null); + while (_nonceMap.putIfAbsent(nonce._nonce, nonce) != null); _nonceQueue.add(nonce); return nonce._nonce; } /** - * @param nstring nonce to check - * @param request + * @param digest the digest data to check + * @param request the request object * @return -1 for a bad nonce, 0 for a stale none, 1 for a good nonce */ - /* ------------------------------------------------------------ */ private int checkNonce(Digest digest, Request request) { // firstly let's expire old nonces - long expired = request.getTimeStamp()-_maxNonceAgeMs; - Nonce nonce=_nonceQueue.peek(); - while (nonce!=null && nonce._ts=_maxNC) + long count = Long.parseLong(digest.nc, 16); + if (count >= _maxNC) return 0; - + if (nonce.seen((int)count)) return -1; @@ -323,9 +281,32 @@ public class DigestAuthenticator extends LoginAuthenticator return -1; } - /* ------------------------------------------------------------ */ - /* ------------------------------------------------------------ */ - /* ------------------------------------------------------------ */ + private static class Nonce + { + final String _nonce; + final long _ts; + final BitSet _seen; + + public Nonce(String nonce, long ts, int size) + { + _nonce = nonce; + _ts = ts; + _seen = new BitSet(size); + } + + public boolean seen(int count) + { + synchronized (this) + { + if (count >= _seen.size()) + return true; + boolean s = _seen.get(count); + _seen.set(count); + return s; + } + } + } + private static class Digest extends Credential { private static final long serialVersionUID = -2484639019549527724L; @@ -350,8 +331,8 @@ public class DigestAuthenticator extends LoginAuthenticator public boolean check(Object credentials) { if (credentials instanceof char[]) - credentials=new String((char[])credentials); - String password = (credentials instanceof String) ? (String) credentials : credentials.toString(); + credentials = new String((char[])credentials); + String password = (credentials instanceof String) ? (String)credentials : credentials.toString(); try { @@ -362,22 +343,22 @@ public class DigestAuthenticator extends LoginAuthenticator // Credentials are already a MD5 digest - assume it's in // form user:realm:password (we have no way to know since // it's a digest, alright?) - ha1 = ((Credential.MD5) credentials).getDigest(); + ha1 = ((Credential.MD5)credentials).getDigest(); } else { // calc A1 digest md.update(username.getBytes(StandardCharsets.ISO_8859_1)); - md.update((byte) ':'); + md.update((byte)':'); md.update(realm.getBytes(StandardCharsets.ISO_8859_1)); - md.update((byte) ':'); + md.update((byte)':'); md.update(password.getBytes(StandardCharsets.ISO_8859_1)); ha1 = md.digest(); } // calc A2 digest md.reset(); md.update(method.getBytes(StandardCharsets.ISO_8859_1)); - md.update((byte) ':'); + md.update((byte)':'); md.update(uri.getBytes(StandardCharsets.ISO_8859_1)); byte[] ha2 = md.digest(); @@ -389,15 +370,15 @@ public class DigestAuthenticator extends LoginAuthenticator // ) > <"> md.update(TypeUtil.toString(ha1, 16).getBytes(StandardCharsets.ISO_8859_1)); - md.update((byte) ':'); + md.update((byte)':'); md.update(nonce.getBytes(StandardCharsets.ISO_8859_1)); - md.update((byte) ':'); + md.update((byte)':'); md.update(nc.getBytes(StandardCharsets.ISO_8859_1)); - md.update((byte) ':'); + md.update((byte)':'); md.update(cnonce.getBytes(StandardCharsets.ISO_8859_1)); - md.update((byte) ':'); + md.update((byte)':'); md.update(qop.getBytes(StandardCharsets.ISO_8859_1)); - md.update((byte) ':'); + md.update((byte)':'); md.update(TypeUtil.toString(ha2, 16).getBytes(StandardCharsets.ISO_8859_1)); byte[] digest = md.digest(); diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/AsyncContextEvent.java b/jetty-server/src/main/java/org/eclipse/jetty/server/AsyncContextEvent.java index 4a6ad3db3ea..aa45d42d8d3 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/AsyncContextEvent.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/AsyncContextEvent.java @@ -27,7 +27,6 @@ import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import org.eclipse.jetty.server.handler.ContextHandler.Context; -import org.eclipse.jetty.util.URIUtil; import org.eclipse.jetty.util.thread.Scheduler; public class AsyncContextEvent extends AsyncEvent implements Runnable @@ -157,7 +156,7 @@ public class AsyncContextEvent extends AsyncEvent implements Runnable Scheduler.Task task=_timeoutTask; _timeoutTask=null; if (task!=null) - _state.onTimeout(); + _state.getHttpChannel().execute(() -> _state.onTimeout()); } public void addThrowable(Throwable e) diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannel.java b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannel.java index eaa0bfe93f5..daf1d28888c 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannel.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannel.java @@ -402,10 +402,12 @@ public class HttpChannel implements Runnable, HttpOutput.Interceptor { if (!_response.isCommitted() && !_request.isHandled()) _response.sendError(HttpStatus.NOT_FOUND_404); + else if (!_response.isContentComplete(_response.getHttpOutput().getWritten())) + _transport.abort(new IOException("insufficient content written")); _response.closeOutput(); _request.setHandled(true); - _state.onComplete(); + _state.onComplete(); onCompleted(); @@ -557,7 +559,7 @@ public class HttpChannel implements Runnable, HttpOutput.Interceptor if (LOG.isDebugEnabled()) LOG.debug("REQUEST for {} on {}{}{} {} {}{}{}",request.getURIString(),this,System.lineSeparator(), - request.getMethod(),request.getURIString(),request.getVersion(),System.lineSeparator(), + request.getMethod(),request.getURIString(),request.getHttpVersion(),System.lineSeparator(), request.getFields()); } @@ -703,7 +705,7 @@ public class HttpChannel implements Runnable, HttpOutput.Interceptor _committedMetaData=info; if (LOG.isDebugEnabled()) LOG.debug("COMMIT for {} on {}{}{} {} {}{}{}",getRequest().getRequestURI(),this,System.lineSeparator(), - info.getStatus(),info.getReason(),info.getVersion(),System.lineSeparator(), + info.getStatus(),info.getReason(),info.getHttpVersion(),System.lineSeparator(), info.getFields()); } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannelOverHttp.java b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannelOverHttp.java index cae587c61b7..a50050f5853 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannelOverHttp.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannelOverHttp.java @@ -133,7 +133,7 @@ public class HttpChannelOverHttp extends HttpChannel implements HttpParser.Reque case EXPECT: { - if (_metadata.getVersion() == HttpVersion.HTTP_1_1) + if (_metadata.getHttpVersion() == HttpVersion.HTTP_1_1) { HttpHeaderValue expect = HttpHeaderValue.CACHE.get(value); switch (expect == null ? HttpHeaderValue.UNKNOWN : expect) @@ -263,7 +263,7 @@ public class HttpChannelOverHttp extends HttpChannel implements HttpParser.Reque boolean persistent; - switch (_metadata.getVersion()) + switch (_metadata.getHttpVersion()) { case HTTP_0_9: { @@ -347,7 +347,7 @@ public class HttpChannelOverHttp extends HttpChannel implements HttpParser.Reque default: { - throw new IllegalStateException("unsupported version " + _metadata.getVersion()); + throw new IllegalStateException("unsupported version " + _metadata.getHttpVersion()); } } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannelState.java b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannelState.java index 5a819b8ef8d..08dca5b4e28 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannelState.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpChannelState.java @@ -299,7 +299,7 @@ public class HttpChannelState { listener.onStartAsync(event); } - catch(Exception e) + catch(Throwable e) { // TODO Async Dispatch Error LOG.warn(e); @@ -853,7 +853,7 @@ public class HttpChannelState { listener.onComplete(event); } - catch(Exception e) + catch(Throwable e) { LOG.warn(e+" while invoking onComplete listener " + listener); LOG.debug(e); @@ -1008,6 +1008,14 @@ public class HttpChannelState } } + public boolean isAsyncComplete() + { + try(Locker.Lock lock= _locker.lock()) + { + return _async==Async.COMPLETE; + } + } + public boolean isAsync() { try(Locker.Lock lock= _locker.lock()) @@ -1168,6 +1176,31 @@ public class HttpChannelState } return woken; } + + /* ------------------------------------------------------------ */ + /** Called to signal that a read has read -1. + * Will wake if the read was called while in ASYNC_WAIT state + * @return true if woken + */ + public boolean onReadEof() + { + boolean woken=false; + try(Locker.Lock lock= _locker.lock()) + { + if(DEBUG) + LOG.debug("onReadEof {}",toStringLocked()); + + if (_state==State.ASYNC_WAIT) + { + _state=State.ASYNC_WOKEN; + _asyncReadUnready=true; + _asyncReadPossible=true; + woken=true; + } + } + return woken; + } + public boolean isReadPossible() { diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java index 95651d00681..3a9ed7c651e 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpConnection.java @@ -524,6 +524,8 @@ public class HttpConnection extends AbstractConnection implements Runnable, Http @Override public void abort(Throwable failure) { + if (LOG.isDebugEnabled()) + LOG.debug("abort {} {}",this,failure); // Do a direct close of the output, as this may indicate to a client that the // response is bad either with RST or by abnormal completion of chunked response. getEndPoint().close(); diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java index 52604608e28..f524e237cba 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpInput.java @@ -119,8 +119,8 @@ public class HttpInput extends ServletInputStream implements Runnable } private final static Logger LOG = Log.getLogger(HttpInput.class); - private final static Content EOF_CONTENT = new EofContent("EOF"); - private final static Content EARLY_EOF_CONTENT = new EofContent("EARLY_EOF"); + final static Content EOF_CONTENT = new EofContent("EOF"); + final static Content EARLY_EOF_CONTENT = new EofContent("EARLY_EOF"); private final byte[] _oneByteBuffer = new byte[1]; private Content _content; @@ -232,7 +232,7 @@ public class HttpInput extends ServletInputStream implements Runnable return available; } - private void wake() + protected void wake() { HttpChannel channel = _channelState.getHttpChannel(); Executor executor = channel.getConnector().getServer().getThreadPool(); @@ -256,8 +256,11 @@ public class HttpInput extends ServletInputStream implements Runnable @Override public int read(byte[] b, int off, int len) throws IOException { + boolean wake = false; + int l; synchronized (_inputQ) { + // Setup blocking only if not async if (!isAsync()) { if (_blockUntil == 0) @@ -268,6 +271,7 @@ public class HttpInput extends ServletInputStream implements Runnable } } + // Caclulate minimum request rate for DOS protection long minRequestDataRate = _channelState.getHttpChannel().getHttpConfiguration().getMinRequestDataRate(); if (minRequestDataRate > 0 && _firstByteTimeStamp != -1) { @@ -280,25 +284,39 @@ public class HttpInput extends ServletInputStream implements Runnable } } + // Consume content looking for bytes to read while (true) { Content item = nextContent(); if (item != null) { - int l = get(item,b,off,len); + l = get(item,b,off,len); if (LOG.isDebugEnabled()) LOG.debug("{} read {} from {}",this,l,item); // Consume any following poison pills - pollReadableContent(); - - return l; + if (item.isEmpty()) + pollReadableContent(); + break; } + // No content, so should we block? if (!_state.blockForContent(this)) - return _state.noContent(); + { + // Not blocking, so what should we return? + l = _state.noContent(); + + // If EOF do we need to wake for allDataRead callback? + if (l<0) + wake = _channelState.onReadEof(); + break; + } } } + + if (wake) + wake(); + return l; } /** @@ -345,19 +363,14 @@ public class HttpInput extends ServletInputStream implements Runnable // If it is EOF, consume it here if (content instanceof SentinelContent) { - if (content == EARLY_EOF_CONTENT) - _state = EARLY_EOF; - else if (content instanceof EofContent) + if (content instanceof EofContent) { - if (_listener == null) + if (content == EARLY_EOF_CONTENT) + _state = EARLY_EOF; + else if (_listener == null) _state = EOF; else - { _state = AEOF; - boolean woken = _channelState.onReadReady(); // force callback? - if (woken) - wake(); - } } // Consume the EOF content, either if it was original content @@ -732,17 +745,25 @@ public class HttpInput extends ServletInputStream implements Runnable { if (_listener != null) throw new IllegalStateException("ReadListener already set"); - if (_state != STREAM) - throw new IllegalStateException("State " + STREAM + " != " + _state); - - _state = ASYNC; + _listener = readListener; - boolean content = nextContent() != null; - - if (content) + + Content content = nextReadable(); + if (content!=null) + { + _state = ASYNC; woken = _channelState.onReadReady(); - else + } + else if (_state == EOF) + { + _state = AEOF; + woken = _channelState.onReadReady(); + } + else + { + _state = ASYNC; _channelState.onReadUnready(); + } } } catch (IOException e) @@ -780,23 +801,49 @@ public class HttpInput extends ServletInputStream implements Runnable @Override public void run() { - final Throwable error; final ReadListener listener; + Throwable error; boolean aeof = false; synchronized (_inputQ) { + listener = _listener; + if (_state == EOF) return; - if (_state == AEOF) + if (_state==AEOF) { _state = EOF; aeof = true; } + + error = _state.getError(); + + if (!aeof && error==null) + { + Content content = pollReadableContent(); - listener = _listener; - error = _state instanceof ErrorState?((ErrorState)_state).getError():null; + // Consume EOF + if (content instanceof EofContent) + { + content.succeeded(); + if (_content==content) + _content = null; + if (content == EARLY_EOF_CONTENT) + { + _state = EARLY_EOF; + error = _state.getError(); + } + else + { + _state = EOF; + aeof = true; + } + } + else if (content==null) + throw new IllegalStateException(); + } } try @@ -813,6 +860,16 @@ public class HttpInput extends ServletInputStream implements Runnable else { listener.onDataAvailable(); + synchronized (_inputQ) + { + if (_state == AEOF) + { + _state = EOF; + aeof = !_channelState.isAsyncComplete(); + } + } + if (aeof) + listener.onAllDataRead(); } } catch (Throwable e) @@ -956,6 +1013,11 @@ public class HttpInput extends ServletInputStream implements Runnable { return -1; } + + public Throwable getError() + { + return null; + } } protected static class EOFState extends State @@ -1027,7 +1089,7 @@ public class HttpInput extends ServletInputStream implements Runnable @Override public int noContent() throws IOException { - throw new EofException("Early EOF"); + throw getError(); } @Override @@ -1035,6 +1097,11 @@ public class HttpInput extends ServletInputStream implements Runnable { return "EARLY_EOF"; } + + public IOException getError() + { + return new EofException("Early EOF"); + } }; protected static final State EOF = new EOFState() diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpOutput.java b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpOutput.java index 9d1ec89924b..ae37af5f13a 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/HttpOutput.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/HttpOutput.java @@ -685,6 +685,7 @@ public class HttpOutput extends ServletOutputStream implements Runnable if (LOG.isDebugEnabled()) LOG.debug("sendContent({})", BufferUtil.toDetailString(content)); + _written += content.remaining(); write(content, true); closed(); } @@ -766,6 +767,7 @@ public class HttpOutput extends ServletOutputStream implements Runnable if (LOG.isDebugEnabled()) LOG.debug("sendContent(buffer={},{})", BufferUtil.toDetailString(content), callback); + _written += content.remaining(); write(content, true, new Callback.Nested(callback) { @Override @@ -1280,6 +1282,7 @@ public class HttpOutput extends ServletOutputStream implements Runnable // write what we have _buffer.position(0); _buffer.limit(len); + _written += len; write(_buffer, _eof, this); return Action.SCHEDULED; } @@ -1338,6 +1341,7 @@ public class HttpOutput extends ServletOutputStream implements Runnable // write what we have BufferUtil.flipToFlush(_buffer, 0); + _written += _buffer.remaining(); write(_buffer, _eof, this); return Action.SCHEDULED; diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java b/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java index cacea9cd108..e2299d913b7 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/Request.java @@ -83,7 +83,6 @@ import org.eclipse.jetty.server.session.Session; import org.eclipse.jetty.server.session.SessionHandler; import org.eclipse.jetty.util.Attributes; import org.eclipse.jetty.util.AttributesMap; -import org.eclipse.jetty.util.HostPort; import org.eclipse.jetty.util.IO; import org.eclipse.jetty.util.MultiMap; import org.eclipse.jetty.util.MultiPartInputStreamParser; @@ -1057,7 +1056,7 @@ public class Request implements HttpServletRequest MetaData.Request metadata = _metaData; if (metadata==null) return null; - HttpVersion version = metadata.getVersion(); + HttpVersion version = metadata.getHttpVersion(); if (version==null) return null; return version.toString(); @@ -1070,7 +1069,7 @@ public class Request implements HttpServletRequest public HttpVersion getHttpVersion() { MetaData.Request metadata = _metaData; - return metadata==null?null:metadata.getVersion(); + return metadata==null?null:metadata.getHttpVersion(); } /* ------------------------------------------------------------ */ @@ -2000,6 +1999,13 @@ public class Request implements HttpServletRequest metadata.setMethod(method); } + public void setHttpVersion(HttpVersion version) + { + MetaData.Request metadata = _metaData; + if (metadata!=null) + metadata.setHttpVersion(version); + } + /* ------------------------------------------------------------ */ public boolean isHead() { diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java b/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java index f3c30f1ee8a..a1c45247fed 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/Response.java @@ -21,12 +21,9 @@ package org.eclipse.jetty.server; import java.io.IOException; import java.io.PrintWriter; import java.nio.channels.IllegalSelectorException; -import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.EnumSet; -import java.util.Enumeration; -import java.util.Iterator; import java.util.List; import java.util.Locale; import java.util.concurrent.atomic.AtomicInteger; @@ -253,10 +250,7 @@ public class Response implements HttpServletResponse quoteOnlyOrAppend(buf,name,quote_name); buf.append('='); - - // Remember name= part to look for other matching set-cookie - String name_equals=buf.toString(); - + // Append the value boolean quote_value=isQuoteNeededForCookie(value); quoteOnlyOrAppend(buf,value,quote_value); @@ -879,13 +873,13 @@ public class Response implements HttpServletResponse if (isCommitted() || isIncluding()) return; - _contentLength = len; - if (_contentLength > 0) + if (len>0) { long written = _out.getWritten(); if (written > len) throw new IllegalArgumentException("setContentLength(" + len + ") when already written " + written); + _contentLength = len; _fields.putLongField(HttpHeader.CONTENT_LENGTH, len); if (isAllContentWritten(written)) { @@ -899,15 +893,19 @@ public class Response implements HttpServletResponse } } } - else if (_contentLength==0) + else if (len==0) { long written = _out.getWritten(); if (written > 0) throw new IllegalArgumentException("setContentLength(0) when already written " + written); + _contentLength = len; _fields.put(HttpHeader.CONTENT_LENGTH, "0"); } else + { + _contentLength = len; _fields.remove(HttpHeader.CONTENT_LENGTH); + } } public long getContentLength() @@ -919,6 +917,11 @@ public class Response implements HttpServletResponse { return (_contentLength >= 0 && written >= _contentLength); } + + public boolean isContentComplete(long written) + { + return (_contentLength < 0 || written >= _contentLength); + } public void closeOutput() throws IOException { @@ -1094,15 +1097,14 @@ public class Response implements HttpServletResponse _fields.put(_mimeType.getContentTypeField()); } } - } @Override public void setBufferSize(int size) { if (isCommitted() || getContentCount() > 0) - throw new IllegalStateException("cannot set buffer size on committed response"); - if (size <= 0) + throw new IllegalStateException("cannot set buffer size when response is committed or written to"); + if (size < __MIN_BUFFER_SIZE) size = __MIN_BUFFER_SIZE; _out.setBufferSize(size); } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/Server.java b/jetty-server/src/main/java/org/eclipse/jetty/server/Server.java index 15cc556fe00..c386e940099 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/Server.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/Server.java @@ -29,6 +29,7 @@ import java.util.Date; import java.util.Enumeration; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.Executor; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; @@ -376,22 +377,35 @@ public class Server extends HandlerWrapper implements Attributes } HttpGenerator.setJettyVersion(HttpConfiguration.SERVER_VERSION); - MultiException mex=new MultiException(); - // check size of thread pool + // Check that the thread pool size is enough. SizedThreadPool pool = getBean(SizedThreadPool.class); int max=pool==null?-1:pool.getMaxThreads(); int selectors=0; int acceptors=0; - if (mex.size()==0) + + for (Connector connector : _connectors) { - for (Connector connector : _connectors) + if (connector instanceof AbstractConnector) { - if (connector instanceof AbstractConnector) - acceptors+=((AbstractConnector)connector).getAcceptors(); + AbstractConnector abstractConnector = (AbstractConnector)connector; + Executor connectorExecutor = connector.getExecutor(); + + if (connectorExecutor != pool) + { + // Do not count the selectors and acceptors from this connector at + // the server level, because the connector uses a dedicated executor. + continue; + } + + acceptors += abstractConnector.getAcceptors(); if (connector instanceof ServerConnector) - selectors+=((ServerConnector)connector).getSelectorManager().getSelectorCount(); + { + // The SelectorManager uses 2 threads for each selector, + // one for the normal and one for the low priority strategies. + selectors += 2 * ((ServerConnector)connector).getSelectorManager().getSelectorCount(); + } } } @@ -399,6 +413,7 @@ public class Server extends HandlerWrapper implements Attributes if (max>0 && needed>max) throw new IllegalStateException(String.format("Insufficient threads: max=%d < needed(acceptors=%d + selectors=%d + request=1)",max,acceptors,selectors)); + MultiException mex=new MultiException(); try { super.doStart(); diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/SessionIdManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/SessionIdManager.java index 2fd4739c18f..43a43e3cfa5 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/SessionIdManager.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/SessionIdManager.java @@ -23,6 +23,7 @@ import java.util.Set; import javax.servlet.http.HttpServletRequest; import org.eclipse.jetty.server.session.SessionHandler; +import org.eclipse.jetty.server.session.HouseKeeper; import org.eclipse.jetty.util.component.LifeCycle; /** @@ -114,4 +115,16 @@ public interface SessionIdManager extends LifeCycle * @return the set of session handlers */ public Set getSessionHandlers(); + + + /** + * @param houseKeeper the housekeeper for doing scavenging + */ + public void setSessionHouseKeeper (HouseKeeper houseKeeper); + + /** + * @return the housekeeper for doing scavenging + */ + public HouseKeeper getSessionHouseKeeper(); + } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/AbstractHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/AbstractHandler.java index 86adae4e050..fc8da059a7a 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/AbstractHandler.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/AbstractHandler.java @@ -28,16 +28,27 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.server.Handler; +import org.eclipse.jetty.server.HttpChannel; +import org.eclipse.jetty.server.HttpConnection; import org.eclipse.jetty.server.Request; +import org.eclipse.jetty.server.Response; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.util.annotation.ManagedObject; import org.eclipse.jetty.util.component.ContainerLifeCycle; +import org.eclipse.jetty.util.component.Dumpable; import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Logger; -/* ------------------------------------------------------------ */ /** AbstractHandler. + *

    A convenience implementation of {@link Handler} that uses the + * {@link ContainerLifeCycle} to provide:

      + *
    • start/stop behavior + *
    • a bean container + *
    • basic {@link Dumpable} support + *
    • a {@link Server} reference + *
    • optional error dispatch handling + *
    */ @ManagedObject("Jetty Handler") public abstract class AbstractHandler extends ContainerLifeCycle implements Handler @@ -46,29 +57,39 @@ public abstract class AbstractHandler extends ContainerLifeCycle implements Hand private Server _server; - /* ------------------------------------------------------------ */ /** * */ public AbstractHandler() { } - - @Override - public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException - { - if (baseRequest.getDispatcherType()==DispatcherType.ERROR) - doError(target,baseRequest,request,response); - else - doHandle(target,baseRequest,request,response); - } - - /* ------------------------------------------------------------ */ - protected void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException - { - } - /* ------------------------------------------------------------ */ + @Override + public abstract void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException; + + /** + * Convenience method to generate error page. + *

    This method can be called from {@link #handle(String, Request, HttpServletRequest, HttpServletResponse)} when an {@link DispatcherType#ERROR} dispatch + * is detected and an error page needs to be generated by calling {@link HttpServletResponse#sendError(int, String)} with the appropriate code and reason, + * which are taken from {@link HttpServletRequest#getAttribute(String)} for {@link RequestDispatcher#ERROR_STATUS_CODE} and {@link RequestDispatcher#ERROR_MESSAGE} + * @see ErrorDispatchHandler for a conveniance class that calls this method. + * @param target + * The target of the request - either a URI or a name. + * @param baseRequest + * The original unwrapped request object. + * @param request + * The request either as the {@link Request} object or a wrapper of that request. The + * {@link HttpConnection#getCurrentConnection()}.{@link HttpConnection#getHttpChannel() getHttpChannel()}.{@link HttpChannel#getRequest() getRequest()} + * method can be used access the Request object if required. + * @param response + * The response as the {@link Response} object or a wrapper of that request. The + * {@link HttpConnection#getCurrentConnection()}.{@link HttpConnection#getHttpChannel() getHttpChannel()}.{@link HttpChannel#getResponse() getResponse()} + * method can be used access the Response object if required. + * @throws IOException + * if unable to handle the request or response processing + * @throws ServletException + * if unable to handle the request or response due to underlying servlet issue + */ protected void doError(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { Object o = request.getAttribute(RequestDispatcher.ERROR_STATUS_CODE); @@ -79,7 +100,6 @@ public abstract class AbstractHandler extends ContainerLifeCycle implements Hand response.sendError(code,reason); } - /* ------------------------------------------------------------ */ /* * @see org.eclipse.thread.LifeCycle#start() */ @@ -93,7 +113,6 @@ public abstract class AbstractHandler extends ContainerLifeCycle implements Hand super.doStart(); } - /* ------------------------------------------------------------ */ /* * @see org.eclipse.thread.LifeCycle#stop() */ @@ -105,7 +124,6 @@ public abstract class AbstractHandler extends ContainerLifeCycle implements Hand super.doStop(); } - /* ------------------------------------------------------------ */ @Override public void setServer(Server server) { @@ -116,14 +134,12 @@ public abstract class AbstractHandler extends ContainerLifeCycle implements Hand _server=server; } - /* ------------------------------------------------------------ */ @Override public Server getServer() { return _server; } - /* ------------------------------------------------------------ */ @Override public void destroy() { @@ -132,11 +148,52 @@ public abstract class AbstractHandler extends ContainerLifeCycle implements Hand super.destroy(); } - /* ------------------------------------------------------------ */ @Override public void dumpThis(Appendable out) throws IOException { out.append(toString()).append(" - ").append(getState()).append('\n'); } - + + /** + * An extension of AbstractHandler that handles {@link DispatcherType#ERROR} dispatches. + *

    + * {@link DispatcherType#ERROR} dispatches are handled by calling the {@link #doError(String, Request, HttpServletRequest, HttpServletResponse)} + * method. All other dispatches are passed to the abstract {@link #doNonErrorHandle(String, Request, HttpServletRequest, HttpServletResponse)} + * method, which should be implemented with specific handler behavior + * + */ + public static abstract class ErrorDispatchHandler extends AbstractHandler + { + @Override + public final void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + { + if (baseRequest.getDispatcherType()==DispatcherType.ERROR) + doError(target,baseRequest,request,response); + else + doNonErrorHandle(target,baseRequest,request,response); + } + + /** + * Called by {@link #handle(String, Request, HttpServletRequest, HttpServletResponse)} + * for all non-{@link DispatcherType#ERROR} dispatches. + * @param target + * The target of the request - either a URI or a name. + * @param baseRequest + * The original unwrapped request object. + * @param request + * The request either as the {@link Request} object or a wrapper of that request. The + * {@link HttpConnection#getCurrentConnection()}.{@link HttpConnection#getHttpChannel() getHttpChannel()}.{@link HttpChannel#getRequest() getRequest()} + * method can be used access the Request object if required. + * @param response + * The response as the {@link Response} object or a wrapper of that request. The + * {@link HttpConnection#getCurrentConnection()}.{@link HttpConnection#getHttpChannel() getHttpChannel()}.{@link HttpChannel#getResponse() getResponse()} + * method can be used access the Response object if required. + * @throws IOException + * if unable to handle the request or response processing + * @throws ServletException + * if unable to handle the request or response due to underlying servlet issue + */ + protected abstract void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException; + } + } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java index 4af41cde9ac..f0a4f68661f 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java @@ -1127,16 +1127,7 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu if (LOG.isDebugEnabled()) LOG.debug("context={}|{}|{} @ {}",baseRequest.getContextPath(),baseRequest.getServletPath(), baseRequest.getPathInfo(),this); - // start manual inline of nextScope(target,baseRequest,request,response); - if (never()) - nextScope(target,baseRequest,request,response); - else if (_nextScope != null) - _nextScope.doScope(target,baseRequest,request,response); - else if (_outerScope != null) - _outerScope.doHandle(target,baseRequest,request,response); - else - doHandle(target,baseRequest,request,response); - // end manual inline (pathentic attempt to reduce stack depth) + nextScope(target,baseRequest,request,response); } finally { @@ -1159,7 +1150,41 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu } } } + + /* ------------------------------------------------------------ */ + protected void requestInitialized(Request baseRequest, HttpServletRequest request) + { + // Handle the REALLY SILLY request events! + if (!_servletRequestAttributeListeners.isEmpty()) + for (ServletRequestAttributeListener l :_servletRequestAttributeListeners) + baseRequest.addEventListener(l); + if (!_servletRequestListeners.isEmpty()) + { + final ServletRequestEvent sre = new ServletRequestEvent(_scontext,request); + for (ServletRequestListener l : _servletRequestListeners) + l.requestInitialized(sre); + } + } + + /* ------------------------------------------------------------ */ + protected void requestDestroyed(Request baseRequest, HttpServletRequest request) + { + // Handle more REALLY SILLY request events! + if (!_servletRequestListeners.isEmpty()) + { + final ServletRequestEvent sre = new ServletRequestEvent(_scontext,request); + for (int i=_servletRequestListeners.size();i-->0;) + _servletRequestListeners.get(i).requestDestroyed(sre); + } + + if (!_servletRequestAttributeListeners.isEmpty()) + { + for (int i=_servletRequestAttributeListeners.size();i-->0;) + baseRequest.removeEventListener(_servletRequestAttributeListeners.get(i)); + } + } + /* ------------------------------------------------------------ */ /** * @see org.eclipse.jetty.server.handler.ScopedHandler#doHandle(java.lang.String, org.eclipse.jetty.server.Request, javax.servlet.http.HttpServletRequest, @@ -1173,19 +1198,7 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu try { if (new_context) - { - // Handle the REALLY SILLY request events! - if (!_servletRequestAttributeListeners.isEmpty()) - for (ServletRequestAttributeListener l :_servletRequestAttributeListeners) - baseRequest.addEventListener(l); - - if (!_servletRequestListeners.isEmpty()) - { - final ServletRequestEvent sre = new ServletRequestEvent(_scontext,request); - for (ServletRequestListener l : _servletRequestListeners) - l.requestInitialized(sre); - } - } + requestInitialized(baseRequest,request); switch(dispatch) { @@ -1203,50 +1216,24 @@ public class ContextHandler extends ScopedHandler implements Attributes, Gracefu if (Boolean.TRUE.equals(baseRequest.getAttribute(Dispatcher.__ERROR_DISPATCH))) break; - Object error = request.getAttribute(Dispatcher.ERROR_STATUS_CODE); - // We can just call sendError here. If there is no error page, then one will + // We can just call doError here. If there is no error page, then one will // be generated. If there is an error page, then a RequestDispatcher will be // used to route the request through appropriate filters etc. - response.sendError((error instanceof Integer)?((Integer)error).intValue():500); + doError(target,baseRequest,request,response); return; default: break; } - // start manual inline of nextHandle(target,baseRequest,request,response); - // noinspection ConstantIfStatement - if (never()) - nextHandle(target,baseRequest,request,response); - else if (_nextScope != null && _nextScope == _handler) - _nextScope.doHandle(target,baseRequest,request,response); - else if (_handler != null) - _handler.handle(target,baseRequest,request,response); - // end manual inline + nextHandle(target,baseRequest,request,response); } finally { - // Handle more REALLY SILLY request events! if (new_context) - { - if (!_servletRequestListeners.isEmpty()) - { - final ServletRequestEvent sre = new ServletRequestEvent(_scontext,request); - for (int i=_servletRequestListeners.size();i-->0;) - _servletRequestListeners.get(i).requestDestroyed(sre); - } - - if (!_servletRequestAttributeListeners.isEmpty()) - { - for (int i=_servletRequestAttributeListeners.size();i-->0;) - baseRequest.removeEventListener(_servletRequestAttributeListeners.get(i)); - } - } + requestDestroyed(baseRequest,request); } } - - - /** * @param request A request that is applicable to the scope, or null * @param reason An object that indicates the reason the scope is being entered. diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ErrorHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ErrorHandler.java index 254886b776e..d3cee263b57 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ErrorHandler.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ErrorHandler.java @@ -74,6 +74,12 @@ public class ErrorHandler extends AbstractHandler */ @Override public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException + { + doError(target,baseRequest,request,response); + } + + @Override + public void doError(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException { String method = request.getMethod(); if (!HttpMethod.GET.is(method) && !HttpMethod.POST.is(method) && !HttpMethod.HEAD.is(method)) diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/InetAccessHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/InetAccessHandler.java index d642ef0206a..2ae712b95df 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/InetAccessHandler.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/InetAccessHandler.java @@ -35,94 +35,79 @@ import org.eclipse.jetty.util.InetAddressSet; import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Logger; - /** - * Inet Address Access Handler + * InetAddress Access Handler *

    - * Controls access to the wrapped handler by the real remote IP. Control is provided + * Controls access to the wrapped handler using the real remote IP. Control is provided * by and {@link IncludeExcludeSet} over a {@link InetAddressSet}. This handler * uses the real internet address of the connection, not one reported in the forwarded * for headers, as this cannot be as easily forged. - *

    - */ public class InetAccessHandler extends HandlerWrapper { private static final Logger LOG = Log.getLogger(InetAccessHandler.class); - IncludeExcludeSet _set = new IncludeExcludeSet<>(InetAddressSet.class); - /* ------------------------------------------------------------ */ - /** - * Creates new handler object - */ - public InetAccessHandler() - { - super(); - } + private final IncludeExcludeSet _set = new IncludeExcludeSet<>(InetAddressSet.class); - /* ------------------------------------------------------------ */ /** - * Include a InetAddress pattern + * Includes an InetAddress pattern + * + * @param pattern InetAddress pattern to include * @see InetAddressSet - * @param pattern InetAddress pattern to exclude */ public void include(String pattern) { _set.include(pattern); } - - /* ------------------------------------------------------------ */ + /** - * Include a InetAddress pattern + * Includes InetAddress patterns + * + * @param patterns InetAddress patterns to include * @see InetAddressSet - * @param patterns InetAddress patterns to exclude */ public void include(String... patterns) { _set.include(patterns); } - - /* ------------------------------------------------------------ */ + /** - * Exclude a InetAddress pattern - * @see InetAddressSet + * Excludes an InetAddress pattern + * * @param pattern InetAddress pattern to exclude + * @see InetAddressSet */ public void exclude(String pattern) { _set.exclude(pattern); } - - /* ------------------------------------------------------------ */ + /** - * Include a InetAddress pattern - * @see InetAddressSet + * Excludes InetAddress patterns + * * @param patterns InetAddress patterns to exclude + * @see InetAddressSet */ public void exclude(String... patterns) { _set.exclude(patterns); } - - /* ------------------------------------------------------------ */ /** * Checks the incoming request against the whitelist and blacklist - * - * @see org.eclipse.jetty.server.handler.HandlerWrapper#handle(java.lang.String, org.eclipse.jetty.server.Request, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse) */ @Override public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { // Get the real remote IP (not the one set by the forwarded headers (which may be forged)) HttpChannel channel = baseRequest.getHttpChannel(); - if (channel!=null) + if (channel != null) { - EndPoint endp=channel.getEndPoint(); - if (endp!=null) + EndPoint endp = channel.getEndPoint(); + if (endp != null) { InetSocketAddress address = endp.getRemoteAddress(); - if (address!=null && !isAllowed(address.getAddress())) + if (address != null && !isAllowed(address.getAddress(), request)) { response.sendError(HttpStatus.FORBIDDEN_403); baseRequest.setHandled(true); @@ -131,26 +116,27 @@ public class InetAccessHandler extends HandlerWrapper } } - getHandler().handle(target,baseRequest, request, response); + getHandler().handle(target, baseRequest, request, response); } - /* ------------------------------------------------------------ */ /** - * Check if specified request is allowed by current IPAccess rules. - * - * @param address internet address - * @return true if address is allowed + * Checks if specified address and request are allowed by current InetAddress rules. * + * @param address the inetAddress to check + * @param request the request to check + * @return true if inetAddress and request are allowed */ - protected boolean isAllowed(InetAddress address) + protected boolean isAllowed(InetAddress address, HttpServletRequest request) { - return _set.test(address); + boolean allowed = _set.test(address); + if (LOG.isDebugEnabled()) + LOG.debug("{} {} {} for {}", this, allowed ? "allowed" : "denied", address, request); + return allowed; } - /* ------------------------------------------------------------ */ @Override public void dump(Appendable out, String indent) throws IOException { - dumpBeans(out,indent,_set.getIncluded(),_set.getExcluded()); + dumpBeans(out, indent, _set.getIncluded(), _set.getExcluded()); } - } +} diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ScopedHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ScopedHandler.java index 6a7f8af1f0e..1d3eadcd4ec 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ScopedHandler.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ScopedHandler.java @@ -129,7 +129,7 @@ public abstract class ScopedHandler extends HandlerWrapper } } - /* ------------------------------------------------------------ */ + /** ------------------------------------------------------------ */ /* */ @Override @@ -145,22 +145,23 @@ public abstract class ScopedHandler extends HandlerWrapper } /* ------------------------------------------------------------ */ - /* + /** * Scope the handler + *

    Derived implementations should call {@link #nextScope(String, Request, HttpServletRequest, HttpServletResponse)} */ - public abstract void doScope(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException; + public void doScope(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) + throws IOException, ServletException + { + nextScope(target,baseRequest,request,response); + } /* ------------------------------------------------------------ */ - /* + /** * Scope the handler */ public final void nextScope(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { - // this method has been manually inlined in several locations, but - // is called protected by an if(never()), so your IDE can find those - // locations if this code is changed. if (_nextScope!=null) _nextScope.doScope(target,baseRequest,request, response); else if (_outerScope!=null) @@ -170,8 +171,9 @@ public abstract class ScopedHandler extends HandlerWrapper } /* ------------------------------------------------------------ */ - /* + /** * Do the handler work within the scope. + *

    Derived implementations should call {@link #nextHandle(String, Request, HttpServletRequest, HttpServletResponse)} */ public abstract void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException; @@ -182,19 +184,9 @@ public abstract class ScopedHandler extends HandlerWrapper */ public final void nextHandle(String target, final Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { - // this method has been manually inlined in several locations, but - // is called protected by an if(never()), so your IDE can find those - // locations if this code is changed. if (_nextScope!=null && _nextScope==_handler) _nextScope.doHandle(target,baseRequest,request, response); else if (_handler!=null) - _handler.handle(target,baseRequest, request, response); + super.handle(target,baseRequest,request,response); } - - /* ------------------------------------------------------------ */ - protected boolean never() - { - return false; - } - } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/CachingSessionDataStore.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/CachingSessionDataStore.java index 1c86d3a5b44..8d1fa953c15 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/CachingSessionDataStore.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/CachingSessionDataStore.java @@ -22,6 +22,9 @@ package org.eclipse.jetty.server.session; import java.util.Set; import org.eclipse.jetty.util.component.ContainerLifeCycle; +import org.eclipse.jetty.util.log.Log; +import org.eclipse.jetty.util.log.Logger; + /** * CachingSessionDataStore @@ -44,7 +47,7 @@ import org.eclipse.jetty.util.component.ContainerLifeCycle; */ public class CachingSessionDataStore extends ContainerLifeCycle implements SessionDataStore { - + private final static Logger LOG = Log.getLogger("org.eclipse.jetty.server.session"); /** * The actual store for the session data */ @@ -98,8 +101,15 @@ public class CachingSessionDataStore extends ContainerLifeCycle implements Sessi SessionData d = null; - //check to see if the session data is already in the cache - d = _cache.load(id); + try + { + //check to see if the session data is already in the cache + d = _cache.load(id); + } + catch (Exception e) + { + LOG.warn(e); + } if (d != null) return d; //cache hit @@ -178,11 +188,18 @@ public class CachingSessionDataStore extends ContainerLifeCycle implements Sessi @Override public boolean exists(String id) throws Exception { - //check the cache first - SessionData data = _cache.load(id); - if (data != null) - return true; - + try + { + //check the cache first + SessionData data = _cache.load(id); + if (data != null) + return true; + } + catch (Exception e) + { + LOG.warn(e); + } + //then the delegate store return _store.exists(id); } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/DefaultSessionIdManager.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/DefaultSessionIdManager.java index ef24e4b2e47..01793d2ae41 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/DefaultSessionIdManager.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/DefaultSessionIdManager.java @@ -120,6 +120,14 @@ public class DefaultSessionIdManager extends ContainerLifeCycle implements Sessi } + /** + * @return the housekeeper + */ + public HouseKeeper getSessionHouseKeeper() + { + return _houseKeeper; + } + /* ------------------------------------------------------------ */ /** diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/Session.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/Session.java index 5ffc8ee308d..83e12a2d51b 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/Session.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/Session.java @@ -86,12 +86,12 @@ public class Session implements SessionHandler.SessionIf protected SessionHandler _handler; //the manager of the session protected String _extendedId; //the _id plus the worker name protected long _requests; - private boolean _idChanged; - private boolean _newSession; - private State _state = State.VALID; //state of the session:valid,invalid or being invalidated - private Locker _lock = new Locker(); //sync lock - private boolean _resident = false; - private SessionInactivityTimeout _sessionInactivityTimer = null; + protected boolean _idChanged; + protected boolean _newSession; + protected State _state = State.VALID; //state of the session:valid,invalid or being invalidated + protected Locker _lock = new Locker(); //sync lock + protected boolean _resident = false; + protected SessionInactivityTimeout _sessionInactivityTimer = null; @@ -169,6 +169,7 @@ public class Session implements SessionHandler.SessionIf _handler = handler; _sessionData = data; _newSession = true; + _sessionData.setDirty(true); _requests = 1; //access will not be called on this new session, but we are obviously in a request } @@ -232,8 +233,7 @@ public class Session implements SessionHandler.SessionIf long lastAccessed = _sessionData.getAccessed(); _sessionData.setAccessed(time); _sessionData.setLastAccessed(lastAccessed); - int maxInterval=getMaxInactiveInterval(); - _sessionData.setExpiry(maxInterval <= 0 ? 0 : (time + maxInterval*1000L)); + _sessionData.calcAndSetExpiry(time); if (isExpiredAt(time)) { invalidate(); @@ -859,7 +859,7 @@ public class Session implements SessionHandler.SessionIf if (result) { //tell id mgr to remove session from all other contexts - ((DefaultSessionIdManager)_handler.getSessionIdManager()).invalidateAll(_sessionData.getId()); + _handler.getSessionIdManager().invalidateAll(_sessionData.getId()); } } catch (Exception e) diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionData.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionData.java index 6ee6e96e42f..ef385042af5 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionData.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionData.java @@ -251,6 +251,16 @@ public class SessionData implements Serializable return (getMaxInactiveMs() <= 0 ? 0 : (System.currentTimeMillis() + getMaxInactiveMs())); } + public long calcExpiry (long time) + { + return (getMaxInactiveMs() <= 0 ? 0 : (time + getMaxInactiveMs())); + } + + public void calcAndSetExpiry (long time) + { + setExpiry(calcExpiry(time)); + } + public void calcAndSetExpiry () { setExpiry(calcExpiry()); @@ -351,8 +361,8 @@ public class SessionData implements Serializable public boolean isExpiredAt (long time) { if (LOG.isDebugEnabled()) - LOG.debug("Testing expiry on session {}: expires at {} now {}", _id, getExpiry(), time); - if (getExpiry() <= 0) + LOG.debug("Testing expiry on session {}: expires at {} now {} maxIdle {}", _id, getExpiry(), time, getMaxInactiveMs()); + if (getMaxInactiveMs() <= 0) return false; //never expires return (getExpiry() <= time); } diff --git a/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionHandler.java b/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionHandler.java index 00e648520fe..3bfd7e58faa 100644 --- a/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionHandler.java +++ b/jetty-server/src/main/java/org/eclipse/jetty/server/session/SessionHandler.java @@ -241,8 +241,8 @@ public class SessionHandler extends ScopedHandler protected final CounterStatistic _sessionsCreatedStats = new CounterStatistic(); public Set _sessionTrackingModes; - private boolean _usingURLs; - private boolean _usingCookies=true; + protected boolean _usingURLs; + protected boolean _usingCookies=true; protected ConcurrentHashSet _candidateSessionIdsForExpiry = new ConcurrentHashSet(); @@ -1317,9 +1317,13 @@ public class SessionHandler extends ScopedHandler //session ids that need to be expired. This is an efficiency measure: as //the expiration involves the SessionDataStore doing a delete, it is //most efficient if it can be done as a bulk operation to eg reduce - //roundtrips to the persistent store. - _candidateSessionIdsForExpiry.add(session.getId()); - if (LOG.isDebugEnabled())LOG.debug("Session {} is candidate for expiry", session.getId()); + //roundtrips to the persistent store. Only do this if the HouseKeeper that + //does the scavenging is configured to actually scavenge + if (_sessionIdManager.getSessionHouseKeeper() != null && _sessionIdManager.getSessionHouseKeeper().getIntervalSec() > 0) + { + _candidateSessionIdsForExpiry.add(session.getId()); + if (LOG.isDebugEnabled())LOG.debug("Session {} is candidate for expiry", session.getId()); + } } else _sessionCache.checkInactiveSession(session); //if inactivity eviction is enabled the session will be deleted from the cache @@ -1577,14 +1581,7 @@ public class SessionHandler extends ScopedHandler @Override public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { - // start manual inline of nextHandle(target,baseRequest,request,response); - if (never()) - nextHandle(target,baseRequest,request,response); - else if (_nextScope != null && _nextScope == _handler) - _nextScope.doHandle(target,baseRequest,request,response); - else if (_handler != null) - _handler.handle(target,baseRequest,request,response); - // end manual inline + nextHandle(target,baseRequest,request,response); } /* ------------------------------------------------------------ */ diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/AbstractHttpTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/AbstractHttpTest.java index 95677401cde..66970e26e23 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/AbstractHttpTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/AbstractHttpTest.java @@ -98,6 +98,7 @@ public abstract class AbstractHttpTest writer.write("\r\n"); writer.flush(); + // TODO replace the SimpleHttp stuff SimpleHttpResponse response = httpParser.readResponse(reader); if ("HTTP/1.1".equals(httpVersion) && response.getHeaders().get("content-length") == null @@ -127,7 +128,7 @@ public abstract class AbstractHttpTest } } - protected class ThrowExceptionOnDemandHandler extends AbstractHandler + protected class ThrowExceptionOnDemandHandler extends AbstractHandler.ErrorDispatchHandler { private final boolean throwException; private volatile Throwable failure; @@ -137,14 +138,8 @@ public abstract class AbstractHttpTest this.throwException = throwException; } - @Override final - public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException - { - super.handle(target,baseRequest,request,response); - } - @Override - public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + protected void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { if (throwException) throw new TestCommitException(); diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/AsyncRequestReadTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/AsyncRequestReadTest.java index 820e7ebf0c2..a38a0806aeb 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/AsyncRequestReadTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/AsyncRequestReadTest.java @@ -255,12 +255,13 @@ public class AsyncRequestReadTest BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream())); assertThat(in.readLine(),containsString("HTTP/1.1 200 OK")); - assertThat(in.readLine(),containsString("Content-Length:")); + assertThat(in.readLine(),containsString("Content-Length: 11")); assertThat(in.readLine(),containsString("Server:")); in.readLine(); assertThat(in.readLine(),containsString("XXXXXXX")); assertThat(in.readLine(),containsString("HTTP/1.1 200 OK")); assertThat(in.readLine(),containsString("Connection: close")); + assertThat(in.readLine(),containsString("Content-Length: 11")); assertThat(in.readLine(),containsString("Server:")); in.readLine(); assertThat(in.readLine(),containsString("XXXXXXX")); diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/DumpHandler.java b/jetty-server/src/test/java/org/eclipse/jetty/server/DumpHandler.java index 6e55843bdb0..ed61d574518 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/DumpHandler.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/DumpHandler.java @@ -38,15 +38,11 @@ import org.eclipse.jetty.server.handler.AbstractHandler; import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Logger; -/* ------------------------------------------------------------ */ /** Dump request handler. * Dumps GET and POST requests. * Useful for testing and debugging. - * - * @version $Id: DumpHandler.java,v 1.14 2005/08/13 00:01:26 gregwilkins Exp $ - * */ -public class DumpHandler extends AbstractHandler +public class DumpHandler extends AbstractHandler.ErrorDispatchHandler { private static final Logger LOG = Log.getLogger(DumpHandler.class); @@ -61,12 +57,8 @@ public class DumpHandler extends AbstractHandler this.label=label; } - /* ------------------------------------------------------------ */ - /* - * @see org.eclipse.jetty.server.server.Handler#handle(java.lang.String, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse, int) - */ @Override - public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + protected void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { if (!isStarted()) return; diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java index e74fa5f122b..b434a210414 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpConnectionTest.java @@ -266,6 +266,51 @@ public class HttpConnectionTest checkContains(response,offset,"/R1"); } + @Test + public void testEmptyNotPersistent() throws Exception + { + String response=connector.getResponse("GET /R1?empty=true HTTP/1.0\r\n"+ + "Host: localhost\r\n"+ + "\r\n"); + + int offset=0; + offset = checkContains(response,offset,"HTTP/1.1 200"); + checkNotContained(response,offset,"Content-Length"); + + response=connector.getResponse("GET /R1?empty=true HTTP/1.1\r\n"+ + "Host: localhost\r\n"+ + "Connection: close\r\n"+ + "\r\n"); + + offset=0; + offset = checkContains(response,offset,"HTTP/1.1 200"); + checkContains(response,offset,"Connection: close"); + checkNotContained(response,offset,"Content-Length"); + } + + @Test + public void testEmptyPersistent() throws Exception + { + String response=connector.getResponse("GET /R1?empty=true HTTP/1.0\r\n"+ + "Host: localhost\r\n"+ + "Connection: keep-alive\r\n"+ + "\r\n"); + + int offset=0; + offset = checkContains(response,offset,"HTTP/1.1 200"); + checkContains(response,offset,"Content-Length: 0"); + checkNotContained(response,offset,"Connection: close"); + + response=connector.getResponse("GET /R1?empty=true HTTP/1.1\r\n"+ + "Host: localhost\r\n"+ + "\r\n"); + + offset=0; + offset = checkContains(response,offset,"HTTP/1.1 200"); + checkContains(response,offset,"Content-Length: 0"); + checkNotContained(response,offset,"Connection: close"); + } + @Test public void testEmptyChunk() throws Exception { @@ -812,10 +857,10 @@ public class HttpConnectionTest final CountDownLatch checkError = new CountDownLatch(1); String response = null; server.stop(); - server.setHandler(new DumpHandler() + server.setHandler(new AbstractHandler.ErrorDispatchHandler() { @Override - public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + protected void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { baseRequest.setHandled(true); response.setHeader(HttpHeader.CONTENT_TYPE.toString(),MimeTypes.Type.TEXT_HTML.toString()); diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpInputAsyncStateTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpInputAsyncStateTest.java new file mode 100644 index 00000000000..21692854ec4 --- /dev/null +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpInputAsyncStateTest.java @@ -0,0 +1,750 @@ +// +// ======================================================================== +// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.server; + +import static org.eclipse.jetty.server.HttpInput.EARLY_EOF_CONTENT; +import static org.eclipse.jetty.server.HttpInput.EOF_CONTENT; +import static org.hamcrest.Matchers.empty; +import static org.hamcrest.Matchers.equalTo; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.Queue; +import java.util.concurrent.LinkedBlockingQueue; + +import javax.servlet.ReadListener; + +import org.eclipse.jetty.server.HttpChannelState.Action; +import org.eclipse.jetty.server.HttpInput.Content; +import org.eclipse.jetty.util.BufferUtil; +import org.eclipse.jetty.util.thread.Scheduler; +import org.hamcrest.Matchers; +import org.junit.After; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; + + +/** + * this tests HttpInput and its interaction with HttpChannelState + */ + + +public class HttpInputAsyncStateTest +{ + + private static final Queue __history = new LinkedBlockingQueue<>(); + private ByteBuffer _expected = BufferUtil.allocate(16*1024); + private boolean _eof; + private boolean _noReadInDataAvailable; + private boolean _completeInOnDataAvailable; + + private final ReadListener _listener = new ReadListener() + { + @Override + public void onError(Throwable t) + { + __history.add("onError:" + t); + } + + @Override + public void onDataAvailable() throws IOException + { + __history.add("onDataAvailable"); + if (!_noReadInDataAvailable && readAvailable() && _completeInOnDataAvailable) + { + __history.add("complete"); + _state.complete(); + } + } + + @Override + public void onAllDataRead() throws IOException + { + __history.add("onAllDataRead"); + } + }; + private HttpInput _in; + HttpChannelState _state; + + public static class TContent extends HttpInput.Content + { + public TContent(String content) + { + super(BufferUtil.toBuffer(content)); + } + } + + @Before + public void before() + { + _noReadInDataAvailable = false; + _in = new HttpInput(new HttpChannelState(new HttpChannel(null, new HttpConfiguration(), null, null) + { + @Override + public void asyncReadFillInterested() + { + __history.add("asyncReadFillInterested"); + } + @Override + public Scheduler getScheduler() + { + return null; + } + }) + { + @Override + public void onReadUnready() + { + super.onReadUnready(); + __history.add("onReadUnready"); + } + + @Override + public boolean onReadPossible() + { + boolean wake = super.onReadPossible(); + __history.add("onReadPossible "+wake); + return wake; + } + + @Override + public boolean onReadReady() + { + boolean wake = super.onReadReady(); + __history.add("onReadReady "+wake); + return wake; + } + }) + { + @Override + public void wake() + { + __history.add("wake"); + } + }; + + _state = _in.getHttpChannelState(); + __history.clear(); + } + + private void check(String... history) + { + if (history==null || history.length==0) + assertThat(__history,empty()); + else + assertThat(__history.toArray(new String[__history.size()]),Matchers.arrayContaining(history)); + __history.clear(); + } + + private void wake() + { + handle(null); + } + + + private void handle() + { + handle(null); + } + + private void handle(Runnable run) + { + Action action = _state.handling(); + loop: while(true) + { + switch(action) + { + case DISPATCH: + if (run==null) + Assert.fail(); + run.run(); + break; + + case READ_CALLBACK: + _in.run(); + break; + + case TERMINATED: + case WAIT: + break loop; + + case COMPLETE: + __history.add("COMPLETE"); + break; + + default: + Assert.fail(); + } + action = _state.unhandle(); + } + } + + private void deliver(Content... content) + { + if (content!=null) + { + for (Content c: content) + { + if (c==EOF_CONTENT) + { + _in.eof(); + _eof = true; + } + else if (c==HttpInput.EARLY_EOF_CONTENT) + { + _in.earlyEOF(); + _eof = true; + } + else + { + _in.addContent(c); + BufferUtil.append(_expected,c.getByteBuffer().slice()); + } + } + } + } + + boolean readAvailable() throws IOException + { + int len=0; + try + { + while(_in.isReady()) + { + int b = _in.read(); + + if (b<0) + { + if (len>0) + __history.add("read "+len); + __history.add("read -1"); + assertTrue(BufferUtil.isEmpty(_expected)); + assertTrue(_eof); + return true; + } + else + { + len++; + assertFalse(BufferUtil.isEmpty(_expected)); + int a = 0xff & _expected.get(); + assertThat(b,equalTo(a)); + } + } + __history.add("read "+len); + assertTrue(BufferUtil.isEmpty(_expected)); + } + catch(IOException e) + { + if (len>0) + __history.add("read "+len); + __history.add("read "+e); + throw e; + } + return false; + } + + + @After + public void after() + { + Assert.assertThat(__history.poll(), Matchers.nullValue()); + } + + @Test + public void testInitialEmptyListenInHandle() throws Exception + { + deliver(EOF_CONTENT); + check(); + + handle(()-> + { + _state.startAsync(null); + _in.setReadListener(_listener); + check("onReadReady false"); + }); + + check("onAllDataRead"); + } + + + @Test + public void testInitialEmptyListenAfterHandle() throws Exception + { + deliver(EOF_CONTENT); + + handle(()-> + { + _state.startAsync(null); + check(); + }); + + _in.setReadListener(_listener); + check("onReadReady true","wake"); + wake(); + check("onAllDataRead"); + } + + @Test + public void testListenInHandleEmpty() throws Exception + { + handle(()-> + { + _state.startAsync(null); + _in.setReadListener(_listener); + check("onReadUnready"); + }); + + check("asyncReadFillInterested"); + + deliver(EOF_CONTENT); + check("onReadPossible true"); + handle(); + check("onAllDataRead"); + } + + + @Test + public void testEmptyListenAfterHandle() throws Exception + { + handle(()-> + { + _state.startAsync(null); + check(); + }); + + deliver(EOF_CONTENT); + check(); + + _in.setReadListener(_listener); + check("onReadReady true","wake"); + wake(); + check("onAllDataRead"); + } + + + @Test + public void testListenAfterHandleEmpty() throws Exception + { + handle(()-> + { + _state.startAsync(null); + check(); + }); + + _in.setReadListener(_listener); + check("asyncReadFillInterested","onReadUnready"); + + deliver(EOF_CONTENT); + check("onReadPossible true"); + + handle(); + check("onAllDataRead"); + } + + + @Test + public void testInitialEarlyEOFListenInHandle() throws Exception + { + deliver(EARLY_EOF_CONTENT); + check(); + + handle(()-> + { + _state.startAsync(null); + _in.setReadListener(_listener); + check("onReadReady false"); + }); + + check("onError:org.eclipse.jetty.io.EofException: Early EOF"); + } + + + @Test + public void testInitialEarlyEOFListenAfterHandle() throws Exception + { + deliver(EARLY_EOF_CONTENT); + + handle(()-> + { + _state.startAsync(null); + check(); + }); + + _in.setReadListener(_listener); + check("onReadReady true","wake"); + wake(); + check("onError:org.eclipse.jetty.io.EofException: Early EOF"); + } + + @Test + public void testListenInHandleEarlyEOF() throws Exception + { + handle(()-> + { + _state.startAsync(null); + _in.setReadListener(_listener); + check("onReadUnready"); + }); + + check("asyncReadFillInterested"); + + deliver(EARLY_EOF_CONTENT); + check("onReadPossible true"); + handle(); + check("onError:org.eclipse.jetty.io.EofException: Early EOF"); + } + + + @Test + public void testEarlyEOFListenAfterHandle() throws Exception + { + handle(()-> + { + _state.startAsync(null); + check(); + }); + + deliver(EARLY_EOF_CONTENT); + check(); + + _in.setReadListener(_listener); + check("onReadReady true","wake"); + wake(); + check("onError:org.eclipse.jetty.io.EofException: Early EOF"); + } + + + @Test + public void testListenAfterHandleEarlyEOF() throws Exception + { + handle(()-> + { + _state.startAsync(null); + check(); + }); + + _in.setReadListener(_listener); + check("asyncReadFillInterested","onReadUnready"); + + deliver(EARLY_EOF_CONTENT); + check("onReadPossible true"); + + handle(); + check("onError:org.eclipse.jetty.io.EofException: Early EOF"); + } + + + + @Test + public void testInitialAllContentListenInHandle() throws Exception + { + deliver(new TContent("Hello"),EOF_CONTENT); + check(); + + handle(()-> + { + _state.startAsync(null); + _in.setReadListener(_listener); + check("onReadReady false"); + }); + + check("onDataAvailable","read 5","read -1","onAllDataRead"); + } + + + @Test + public void testInitialAllContentListenAfterHandle() throws Exception + { + deliver(new TContent("Hello"),EOF_CONTENT); + + handle(()-> + { + _state.startAsync(null); + check(); + }); + + _in.setReadListener(_listener); + check("onReadReady true","wake"); + wake(); + check("onDataAvailable","read 5","read -1","onAllDataRead"); + } + + + @Test + public void testListenInHandleAllContent() throws Exception + { + handle(()-> + { + _state.startAsync(null); + _in.setReadListener(_listener); + check("onReadUnready"); + }); + + check("asyncReadFillInterested"); + + deliver(new TContent("Hello"),EOF_CONTENT); + check("onReadPossible true","onReadPossible false"); + handle(); + check("onDataAvailable","read 5","read -1","onAllDataRead"); + } + + + @Test + public void testAllContentListenAfterHandle() throws Exception + { + handle(()-> + { + _state.startAsync(null); + check(); + }); + + deliver(new TContent("Hello"),EOF_CONTENT); + check(); + + _in.setReadListener(_listener); + check("onReadReady true","wake"); + wake(); + check("onDataAvailable","read 5","read -1","onAllDataRead"); + } + + + @Test + public void testListenAfterHandleAllContent() throws Exception + { + handle(()-> + { + _state.startAsync(null); + check(); + }); + + _in.setReadListener(_listener); + check("asyncReadFillInterested","onReadUnready"); + + deliver(new TContent("Hello"),EOF_CONTENT); + check("onReadPossible true","onReadPossible false"); + + handle(); + check("onDataAvailable","read 5","read -1","onAllDataRead"); + } + + + @Test + public void testInitialIncompleteContentListenInHandle() throws Exception + { + deliver(new TContent("Hello"),EARLY_EOF_CONTENT); + check(); + + handle(()-> + { + _state.startAsync(null); + _in.setReadListener(_listener); + check("onReadReady false"); + }); + + check( + "onDataAvailable", + "read 5", + "read org.eclipse.jetty.io.EofException: Early EOF", + "onError:org.eclipse.jetty.io.EofException: Early EOF"); + } + + + @Test + public void testInitialPartialContentListenAfterHandle() throws Exception + { + deliver(new TContent("Hello"),EARLY_EOF_CONTENT); + + handle(()-> + { + _state.startAsync(null); + check(); + }); + + _in.setReadListener(_listener); + check("onReadReady true","wake"); + wake(); + check( + "onDataAvailable", + "read 5", + "read org.eclipse.jetty.io.EofException: Early EOF", + "onError:org.eclipse.jetty.io.EofException: Early EOF"); + } + + + @Test + public void testListenInHandlePartialContent() throws Exception + { + handle(()-> + { + _state.startAsync(null); + _in.setReadListener(_listener); + check("onReadUnready"); + }); + + check("asyncReadFillInterested"); + + deliver(new TContent("Hello"),EARLY_EOF_CONTENT); + check("onReadPossible true","onReadPossible false"); + handle(); + check( + "onDataAvailable", + "read 5", + "read org.eclipse.jetty.io.EofException: Early EOF", + "onError:org.eclipse.jetty.io.EofException: Early EOF"); + } + + + @Test + public void testPartialContentListenAfterHandle() throws Exception + { + handle(()-> + { + _state.startAsync(null); + check(); + }); + + deliver(new TContent("Hello"),EARLY_EOF_CONTENT); + check(); + + _in.setReadListener(_listener); + check("onReadReady true","wake"); + wake(); + check( + "onDataAvailable", + "read 5", + "read org.eclipse.jetty.io.EofException: Early EOF", + "onError:org.eclipse.jetty.io.EofException: Early EOF"); + } + + + @Test + public void testListenAfterHandlePartialContent() throws Exception + { + handle(()-> + { + _state.startAsync(null); + check(); + }); + + _in.setReadListener(_listener); + check("asyncReadFillInterested","onReadUnready"); + + deliver(new TContent("Hello"),EARLY_EOF_CONTENT); + check("onReadPossible true","onReadPossible false"); + + handle(); + check( + "onDataAvailable", + "read 5", + "read org.eclipse.jetty.io.EofException: Early EOF", + "onError:org.eclipse.jetty.io.EofException: Early EOF"); + } + + + @Test + public void testReadAfterOnDataAvailable() throws Exception + { + _noReadInDataAvailable = true; + handle(()-> + { + _state.startAsync(null); + _in.setReadListener(_listener); + check("onReadUnready"); + }); + + check("asyncReadFillInterested"); + + deliver(new TContent("Hello"),EOF_CONTENT); + check("onReadPossible true","onReadPossible false"); + + handle(); + check("onDataAvailable"); + + readAvailable(); + check("wake","read 5","read -1"); + wake(); + check("onAllDataRead"); + } + + @Test + public void testReadOnlyExpectedAfterOnDataAvailable() throws Exception + { + _noReadInDataAvailable = true; + handle(()-> + { + _state.startAsync(null); + _in.setReadListener(_listener); + check("onReadUnready"); + }); + + check("asyncReadFillInterested"); + + deliver(new TContent("Hello"),EOF_CONTENT); + check("onReadPossible true","onReadPossible false"); + + handle(); + check("onDataAvailable"); + + byte[] buffer = new byte[_expected.remaining()]; + assertThat(_in.read(buffer),equalTo(buffer.length)); + assertThat(new String(buffer),equalTo(BufferUtil.toString(_expected))); + BufferUtil.clear(_expected); + check(); + + assertTrue(_in.isReady()); + check(); + + assertThat(_in.read(),equalTo(-1)); + check("wake"); + + wake(); + check("onAllDataRead"); + } + + @Test + public void testReadAndCompleteInOnDataAvailable() throws Exception + { + _completeInOnDataAvailable = true; + handle(()-> + { + _state.startAsync(null); + _in.setReadListener(_listener); + check("onReadUnready"); + }); + + check("asyncReadFillInterested"); + + deliver(new TContent("Hello"),EOF_CONTENT); + check("onReadPossible true","onReadPossible false"); + + handle(()->{__history.add(_state.getState().toString());}); + System.err.println(__history); + check( + "onDataAvailable", + "read 5", + "read -1", + "complete", + "COMPLETE" + ); + } +} diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpInputTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpInputTest.java index dde2f0b643e..16c0e8bffd2 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpInputTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpInputTest.java @@ -390,10 +390,6 @@ public class HttpInputTest Assert.assertThat(_history.poll(), Matchers.equalTo("unready")); Assert.assertThat(_history.poll(), Matchers.nullValue()); - _in.run(); - Assert.assertThat(_history.poll(), Matchers.equalTo("onDataAvailable")); - Assert.assertThat(_history.poll(), Matchers.nullValue()); - Assert.assertThat(_in.isReady(), Matchers.equalTo(false)); Assert.assertThat(_history.poll(), Matchers.equalTo("produceContent 0")); Assert.assertThat(_history.poll(), Matchers.equalTo("unready")); @@ -413,10 +409,6 @@ public class HttpInputTest Assert.assertThat(_history.poll(), Matchers.equalTo("unready")); Assert.assertThat(_history.poll(), Matchers.nullValue()); - _in.run(); - Assert.assertThat(_history.poll(), Matchers.equalTo("onDataAvailable")); - Assert.assertThat(_history.poll(), Matchers.nullValue()); - Assert.assertThat(_in.isReady(), Matchers.equalTo(false)); Assert.assertThat(_history.poll(), Matchers.equalTo("produceContent 0")); Assert.assertThat(_history.poll(), Matchers.equalTo("unready")); @@ -466,10 +458,6 @@ public class HttpInputTest Assert.assertThat(_history.poll(), Matchers.equalTo("unready")); Assert.assertThat(_history.poll(), Matchers.nullValue()); - _in.run(); - Assert.assertThat(_history.poll(), Matchers.equalTo("onDataAvailable")); - Assert.assertThat(_history.poll(), Matchers.nullValue()); - _in.eof(); Assert.assertThat(_in.isReady(), Matchers.equalTo(true)); Assert.assertThat(_in.isFinished(), Matchers.equalTo(false)); @@ -478,7 +466,6 @@ public class HttpInputTest Assert.assertThat(_in.read(), Matchers.equalTo(-1)); Assert.assertThat(_in.isFinished(), Matchers.equalTo(true)); - Assert.assertThat(_history.poll(), Matchers.equalTo("ready")); Assert.assertThat(_history.poll(), Matchers.nullValue()); } @@ -490,10 +477,6 @@ public class HttpInputTest Assert.assertThat(_history.poll(), Matchers.equalTo("unready")); Assert.assertThat(_history.poll(), Matchers.nullValue()); - _in.run(); - Assert.assertThat(_history.poll(), Matchers.equalTo("onDataAvailable")); - Assert.assertThat(_history.poll(), Matchers.nullValue()); - Assert.assertThat(_in.isReady(), Matchers.equalTo(false)); Assert.assertThat(_history.poll(), Matchers.equalTo("produceContent 0")); Assert.assertThat(_history.poll(), Matchers.equalTo("unready")); @@ -527,7 +510,6 @@ public class HttpInputTest Assert.assertThat(_in.isFinished(), Matchers.equalTo(false)); Assert.assertThat(_in.read(), Matchers.equalTo(-1)); Assert.assertThat(_in.isFinished(), Matchers.equalTo(true)); - Assert.assertThat(_history.poll(), Matchers.equalTo("ready")); Assert.assertThat(_history.poll(), Matchers.nullValue()); Assert.assertThat(_in.isReady(), Matchers.equalTo(true)); @@ -541,9 +523,6 @@ public class HttpInputTest Assert.assertThat(_history.poll(), Matchers.equalTo("produceContent 0")); Assert.assertThat(_history.poll(), Matchers.equalTo("unready")); Assert.assertThat(_history.poll(), Matchers.nullValue()); - _in.run(); - Assert.assertThat(_history.poll(), Matchers.equalTo("onDataAvailable")); - Assert.assertThat(_history.poll(), Matchers.nullValue()); Assert.assertThat(_in.isReady(), Matchers.equalTo(false)); Assert.assertThat(_history.poll(), Matchers.equalTo("produceContent 0")); diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpManyWaysToAsyncCommitBadBehaviourTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpManyWaysToAsyncCommitBadBehaviourTest.java index 329e771a81b..2dce71ca6a5 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpManyWaysToAsyncCommitBadBehaviourTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpManyWaysToAsyncCommitBadBehaviourTest.java @@ -84,7 +84,7 @@ public class HttpManyWaysToAsyncCommitBadBehaviourTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { final CyclicBarrier resumeBarrier = new CyclicBarrier(1); diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpManyWaysToAsyncCommitTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpManyWaysToAsyncCommitTest.java index f4e9143b863..02cd7651b7c 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpManyWaysToAsyncCommitTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpManyWaysToAsyncCommitTest.java @@ -100,7 +100,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { if (request.getAttribute(CONTEXT_ATTRIBUTE) == null) { @@ -118,7 +118,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest } }).run(); } - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -132,7 +132,8 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest SimpleHttpResponse response = executeRequest(); assertThat("response code is 200", response.getCode(), is("200")); - assertHeader(response, "content-length", "0"); + if (HttpVersion.HTTP_1_1.asString().equals(httpVersion)) + assertHeader(response, "content-length", "0"); assertThat("no exceptions", handler.failure(), is(nullValue())); } @@ -157,7 +158,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { if (request.getAttribute(CONTEXT_ATTRIBUTE) == null) { @@ -176,7 +177,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest }).run(); } baseRequest.setHandled(true); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -215,7 +216,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { if (request.getAttribute(CONTEXT_ATTRIBUTE) == null) { @@ -242,7 +243,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest }).run(); } baseRequest.setHandled(true); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -285,7 +286,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { if (request.getAttribute(CONTEXT_ATTRIBUTE) == null) { @@ -314,7 +315,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest }).run(); } baseRequest.setHandled(true); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -356,7 +357,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { if (request.getAttribute(CONTEXT_ATTRIBUTE) == null) { @@ -383,7 +384,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest }).run(); } baseRequest.setHandled(true); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -425,7 +426,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { if (request.getAttribute(CONTEXT_ATTRIBUTE) == null) { @@ -455,7 +456,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest }).run(); } baseRequest.setHandled(true); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -500,7 +501,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { if (request.getAttribute(CONTEXT_ATTRIBUTE) == null) { @@ -529,7 +530,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest }).run(); } baseRequest.setHandled(true); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -572,7 +573,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { if (request.getAttribute(CONTEXT_ATTRIBUTE) == null) { @@ -601,7 +602,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest }).run(); } baseRequest.setHandled(true); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -645,7 +646,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { if (request.getAttribute(CONTEXT_ATTRIBUTE) == null) { @@ -674,7 +675,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest }).run(); } baseRequest.setHandled(true); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -713,7 +714,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { if (request.getAttribute(CONTEXT_ATTRIBUTE) == null) { @@ -742,7 +743,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest }).run(); } baseRequest.setHandled(true); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -782,7 +783,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, final HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { if (request.getAttribute(CONTEXT_ATTRIBUTE) == null) { @@ -811,7 +812,7 @@ public class HttpManyWaysToAsyncCommitTest extends AbstractHttpTest }).run(); } baseRequest.setHandled(true); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } } diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpManyWaysToCommitTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpManyWaysToCommitTest.java index fd4950a18b4..3f4e788d321 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpManyWaysToCommitTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpManyWaysToCommitTest.java @@ -22,6 +22,7 @@ import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertThat; +import java.io.EOFException; import java.io.IOException; import java.util.Arrays; import java.util.Collection; @@ -31,7 +32,9 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.http.HttpVersion; +import org.eclipse.jetty.server.handler.AbstractHandler; import org.eclipse.jetty.toolchain.test.http.SimpleHttpResponse; +import org.hamcrest.Matchers; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; @@ -83,10 +86,10 @@ public class HttpManyWaysToCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { baseRequest.setHandled(false); // not needed, but lets be explicit about what the test does - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -99,7 +102,9 @@ public class HttpManyWaysToCommitTest extends AbstractHttpTest SimpleHttpResponse response = executeRequest(); assertThat("response code is 200", response.getCode(), is("200")); - assertHeader(response, "content-length", "0"); + + if (HttpVersion.HTTP_1_1.asString().equals(httpVersion)) + assertHeader(response, "content-length", "0"); } @Test @@ -121,10 +126,10 @@ public class HttpManyWaysToCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { baseRequest.setHandled(true); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -161,11 +166,11 @@ public class HttpManyWaysToCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { baseRequest.setHandled(true); response.getWriter().write("foobar"); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -206,12 +211,12 @@ public class HttpManyWaysToCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { baseRequest.setHandled(true); response.getWriter().write("foobar"); response.flushBuffer(); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -249,11 +254,11 @@ public class HttpManyWaysToCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { baseRequest.setHandled(true); response.flushBuffer(); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -294,13 +299,13 @@ public class HttpManyWaysToCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { baseRequest.setHandled(true); response.getWriter().write("foo"); response.flushBuffer(); response.getWriter().write("bar"); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -369,12 +374,12 @@ public class HttpManyWaysToCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { baseRequest.setHandled(true); response.setBufferSize(4); response.getWriter().write("foobar"); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -386,13 +391,13 @@ public class HttpManyWaysToCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { baseRequest.setHandled(true); response.setBufferSize(8); response.getWriter().write("fo"); response.getWriter().write("obarfoobar"); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -404,7 +409,7 @@ public class HttpManyWaysToCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { baseRequest.setHandled(true); response.setBufferSize(8); @@ -414,10 +419,54 @@ public class HttpManyWaysToCommitTest extends AbstractHttpTest response.getWriter().write("fo"); response.getWriter().write("ob"); response.getWriter().write("ar"); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } + @Test + public void testSetContentLengthFlushAndWriteInsufficientBytes() throws Exception + { + server.setHandler(new SetContentLengthAndWriteInsufficientBytesHandler(true)); + server.start(); + try + { + // TODO This test is compromised by the SimpleHttpResponse mechanism. + // Replace with a better client + + SimpleHttpResponse response = executeRequest(); + String failed_body = ""+(char)-1+(char)-1+(char)-1; + assertThat("response code is 200", response.getCode(), is("200")); + assertThat(response.getBody(), Matchers.endsWith(failed_body)); + assertHeader(response, "content-length", "6"); + } + catch(EOFException e) + { + // possible good response + } + } + + @Test + public void testSetContentLengthAndWriteInsufficientBytes() throws Exception + { + server.setHandler(new SetContentLengthAndWriteInsufficientBytesHandler(false)); + server.start(); + + try + { + // TODO This test is compromised by the SimpleHttpResponse mechanism. + // Replace with a better client + SimpleHttpResponse response = executeRequest(); + String failed_body = ""+(char)-1+(char)-1+(char)-1; + assertThat("response code is 200", response.getCode(), is("200")); + assertThat(response.getBody(), Matchers.endsWith(failed_body)); + assertHeader(response, "content-length", "6"); + } + catch(EOFException e) + { + // expected + } + } + @Test public void testSetContentLengthAndWriteExactlyThatAmountOfBytes() throws Exception { @@ -444,6 +493,25 @@ public class HttpManyWaysToCommitTest extends AbstractHttpTest assertThat("response body is foo", response.getBody(), is("foo")); } + private class SetContentLengthAndWriteInsufficientBytesHandler extends AbstractHandler + { + boolean flush; + private SetContentLengthAndWriteInsufficientBytesHandler(boolean flush) + { + this.flush = flush; + } + + @Override + public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + { + baseRequest.setHandled(true); + response.setContentLength(6); + if (flush) + response.flushBuffer(); + response.getWriter().write("foo"); + } + } + private class SetContentLengthAndWriteThatAmountOfBytesHandler extends ThrowExceptionOnDemandHandler { private SetContentLengthAndWriteThatAmountOfBytesHandler(boolean throwException) @@ -452,12 +520,12 @@ public class HttpManyWaysToCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { baseRequest.setHandled(true); response.setContentLength(3); response.getWriter().write("foo"); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -495,13 +563,13 @@ public class HttpManyWaysToCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { baseRequest.setHandled(true); response.setContentLength(3); // Only "foo" will get written and "bar" will be discarded response.getWriter().write("foobar"); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -539,12 +607,12 @@ public class HttpManyWaysToCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { baseRequest.setHandled(true); response.getWriter().write("foo"); response.setContentLength(3); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } @@ -582,12 +650,12 @@ public class HttpManyWaysToCommitTest extends AbstractHttpTest } @Override - public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { baseRequest.setHandled(true); response.getWriter().write("foobar"); response.setContentLength(3); - super.doHandle(target, baseRequest, request, response); + super.doNonErrorHandle(target, baseRequest, request, response); } } } diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java index af2e4947298..d36e9469af6 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpServerTestBase.java @@ -269,10 +269,10 @@ public abstract class HttpServerTestBase extends HttpServerTestFixture @Test public void testExceptionThrownInHandler() throws Exception { - configureServer(new AbstractHandler() + configureServer(new AbstractHandler.ErrorDispatchHandler() { @Override - public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { throw new QuietServletException("TEST handler exception"); } @@ -300,10 +300,10 @@ public abstract class HttpServerTestBase extends HttpServerTestFixture { final AtomicBoolean fourBytesRead = new AtomicBoolean(false); final AtomicBoolean earlyEOFException = new AtomicBoolean(false); - configureServer(new AbstractHandler() + configureServer(new AbstractHandler.ErrorDispatchHandler() { @Override - public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { baseRequest.setHandled(true); int contentLength = request.getContentLength(); diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/HttpVersionCustomizerTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpVersionCustomizerTest.java new file mode 100644 index 00000000000..e1821365bfa --- /dev/null +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/HttpVersionCustomizerTest.java @@ -0,0 +1,86 @@ +// +// ======================================================================== +// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.server; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.nio.channels.SocketChannel; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.eclipse.jetty.http.HttpStatus; +import org.eclipse.jetty.http.HttpTester; +import org.eclipse.jetty.http.HttpVersion; +import org.eclipse.jetty.server.handler.AbstractHandler; +import org.eclipse.jetty.toolchain.test.TestTracker; +import org.eclipse.jetty.util.log.Log; +import org.eclipse.jetty.util.log.Logger; +import org.hamcrest.Matchers; +import org.junit.Assert; +import org.junit.Rule; +import org.junit.Test; + +public class HttpVersionCustomizerTest +{ + @Rule + public TestTracker tracker = new TestTracker(); + + @Test + public void testCustomizeHttpVersion() throws Exception + { + Server server = new Server(); + HttpConfiguration httpConfig = new HttpConfiguration(); + httpConfig.addCustomizer((connector, config, request) -> request.setHttpVersion(HttpVersion.HTTP_1_1)); + ServerConnector connector = new ServerConnector(server, new HttpConnectionFactory(httpConfig)); + server.addConnector(connector); + server.setHandler(new AbstractHandler() + { + @Override + public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + { + baseRequest.setHandled(true); + response.setStatus(500); + Assert.assertEquals(HttpVersion.HTTP_1_1.asString(), request.getProtocol()); + response.setStatus(200); + response.getWriter().println("OK"); + } + }); + server.start(); + + try + { + try (SocketChannel socket = SocketChannel.open(new InetSocketAddress("localhost", connector.getLocalPort()))) + { + HttpTester.Request request = HttpTester.newRequest(); + request.setVersion(HttpVersion.HTTP_1_0); + socket.write(request.generate()); + + HttpTester.Response response = HttpTester.parseResponse(HttpTester.from(socket)); + Assert.assertNotNull(response); + Assert.assertThat(response.getStatus(), Matchers.equalTo(HttpStatus.OK_200)); + } + } + finally + { + server.stop(); + } + } +} diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/InsufficientThreadsDetectionTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/InsufficientThreadsDetectionTest.java new file mode 100644 index 00000000000..e95356b03a6 --- /dev/null +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/InsufficientThreadsDetectionTest.java @@ -0,0 +1,86 @@ +// +// ======================================================================== +// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.server; + +import org.eclipse.jetty.util.thread.QueuedThreadPool; +import org.eclipse.jetty.util.thread.ThreadPool; +import org.junit.After; +import org.junit.Test; + +public class InsufficientThreadsDetectionTest { + + private Server _server; + + @After + public void dispose() throws Exception + { + _server.stop(); + } + + @Test(expected = IllegalStateException.class) + public void testConnectorUsesServerExecutorWithNotEnoughThreads() throws Exception + { + // server has 3 threads in the executor + _server = new Server(new QueuedThreadPool(3)); + + // connector will use executor from server because connectorPool is null + ThreadPool connectorPool = null; + // connector requires 7 threads(2 + 4 + 1) + ServerConnector connector = new ServerConnector(_server, connectorPool, null, null, 2, 4, new HttpConnectionFactory()); + connector.setPort(0); + _server.addConnector(connector); + + // should throw IllegalStateException because there are no required threads in server pool + _server.start(); + } + + @Test + public void testConnectorWithDedicatedExecutor() throws Exception + { + // server has 3 threads in the executor + _server = new Server(new QueuedThreadPool(3)); + + // connector pool has 100 threads + ThreadPool connectorPool = new QueuedThreadPool(100); + // connector requires 7 threads(2 + 4 + 1) + ServerConnector connector = new ServerConnector(_server, connectorPool, null, null, 2, 4, new HttpConnectionFactory()); + connector.setPort(0); + _server.addConnector(connector); + + // should not throw exception because connector uses own executor, so its threads should not be counted + _server.start(); + } + + @Test // Github issue #586 + public void testCaseForMultipleConnectors() throws Exception { + // server has 4 threads in the executor + _server = new Server(new QueuedThreadPool(4)); + + // first connector consumes all 4 threads from server pool + _server.addConnector(new ServerConnector(_server, null, null, null, 1, 1, new HttpConnectionFactory())); + + // second connect also require 4 threads but uses own executor, so its threads should not be counted + final QueuedThreadPool connectorPool = new QueuedThreadPool(4, 4); + _server.addConnector(new ServerConnector(_server, connectorPool, null, null, 1, 1, new HttpConnectionFactory())); + + // should not throw exception because limit was not overflown + _server.start(); + } + +} diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/RequestTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/RequestTest.java index e1124120eb9..f1401e66341 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/RequestTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/RequestTest.java @@ -1096,7 +1096,8 @@ public class RequestTest 200, TimeUnit.MILLISECONDS ); assertThat(response, Matchers.containsString("200")); - assertThat(response, Matchers.containsString("Connection: TE,Other")); + assertThat(response, Matchers.containsString("Connection: TE")); + assertThat(response, Matchers.containsString("Connection: Other")); assertThat(response, Matchers.containsString("Hello World")); response=_connector.getResponse( @@ -1493,14 +1494,14 @@ public class RequestTest boolean check(HttpServletRequest request,HttpServletResponse response) throws IOException; } - private class RequestHandler extends AbstractHandler + private class RequestHandler extends AbstractHandler.ErrorDispatchHandler { private RequestTester _checker; @SuppressWarnings("unused") private String _content; @Override - public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + protected void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { ((Request)request).setHandled(true); diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ScopedHandlerTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ScopedHandlerTest.java index 051d9eeec91..21f2969f90f 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ScopedHandlerTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/handler/ScopedHandlerTest.java @@ -28,6 +28,7 @@ import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Response; +import org.eclipse.jetty.server.Server; import org.junit.Before; import org.junit.Test; @@ -45,6 +46,7 @@ public class ScopedHandlerTest public void testSingle() throws Exception { TestHandler handler0 = new TestHandler("0"); + handler0.setServer(new Server()); handler0.start(); handler0.handle("target",null,null,null); handler0.stop(); @@ -57,6 +59,8 @@ public class ScopedHandlerTest { TestHandler handler0 = new TestHandler("0"); TestHandler handler1 = new TestHandler("1"); + handler0.setServer(new Server()); + handler1.setServer(handler0.getServer()); handler0.setHandler(handler1); handler0.start(); handler0.handle("target",null,null,null); @@ -71,6 +75,9 @@ public class ScopedHandlerTest TestHandler handler0 = new TestHandler("0"); TestHandler handler1 = new TestHandler("1"); TestHandler handler2 = new TestHandler("2"); + handler0.setServer(new Server()); + handler1.setServer(handler0.getServer()); + handler2.setServer(handler0.getServer()); handler0.setHandler(handler1); handler1.setHandler(handler2); handler0.start(); @@ -90,6 +97,10 @@ public class ScopedHandlerTest OtherHandler handlerA = new OtherHandler("A"); TestHandler handler1 = new TestHandler("1"); OtherHandler handlerB = new OtherHandler("B"); + handler0.setServer(new Server()); + handlerA.setServer(handler0.getServer()); + handler1.setServer(handler0.getServer()); + handlerB.setServer(handler0.getServer()); handler0.setHandler(handlerA); handlerA.setHandler(handler1); handler1.setHandler(handlerB); @@ -112,6 +123,12 @@ public class ScopedHandlerTest OtherHandler handlerB = new OtherHandler("B"); TestHandler handler2 = new TestHandler("2"); OtherHandler handlerC = new OtherHandler("C"); + handler0.setServer(new Server()); + handlerA.setServer(handler0.getServer()); + handler1.setServer(handler0.getServer()); + handlerB.setServer(handler0.getServer()); + handler2.setServer(handler0.getServer()); + handlerC.setServer(handler0.getServer()); handler0.setHandler(handlerA); handlerA.setHandler(handler1); handler1.setHandler(handlerB); diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SSLEngineTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SSLEngineTest.java index a010774b156..4c067eab440 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SSLEngineTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SSLEngineTest.java @@ -85,8 +85,18 @@ public class SSLEngineTest private static final String REQUEST1=REQUEST1_HEADER+REQUEST_CONTENT.getBytes().length+"\n\n"+REQUEST_CONTENT; /** The expected response. */ - private static final String RESPONSE0="HTTP/1.1 200 OK\n"+"Content-Length: "+HELLO_WORLD.length()+"\n"+"Server: Jetty("+JETTY_VERSION+")\n"+'\n'+HELLO_WORLD; - private static final String RESPONSE1="HTTP/1.1 200 OK\n"+"Connection: close\n"+"Server: Jetty("+JETTY_VERSION+")\n"+'\n'+HELLO_WORLD; + private static final String RESPONSE0="HTTP/1.1 200 OK\n"+ + "Content-Length: "+HELLO_WORLD.length()+"\n"+ + "Server: Jetty("+JETTY_VERSION+")\n"+ + '\n'+ + HELLO_WORLD; + + private static final String RESPONSE1="HTTP/1.1 200 OK\n"+ + "Connection: close\n"+ + "Content-Length: "+HELLO_WORLD.length()+"\n"+ + "Server: Jetty("+JETTY_VERSION+")\n"+ + '\n'+ + HELLO_WORLD; private static final int BODY_SIZE=300; diff --git a/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SniSslConnectionFactoryTest.java b/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SniSslConnectionFactoryTest.java index 5534a7b2d6f..8b93f741035 100644 --- a/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SniSslConnectionFactoryTest.java +++ b/jetty-server/src/test/java/org/eclipse/jetty/server/ssl/SniSslConnectionFactoryTest.java @@ -99,10 +99,10 @@ public class SniSslConnectionFactoryTest new HttpConnectionFactory(_https_config)); _server.addConnector(https); - _server.setHandler(new AbstractHandler() + _server.setHandler(new AbstractHandler.ErrorDispatchHandler() { @Override - public void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + protected void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) { baseRequest.setHandled(true); response.setStatus(200); diff --git a/jetty-servlet/pom.xml b/jetty-servlet/pom.xml index e5fb50a9db1..ca4fa5fb859 100644 --- a/jetty-servlet/pom.xml +++ b/jetty-servlet/pom.xml @@ -48,12 +48,6 @@ ${project.version} true - - org.eclipse.jetty - apache-jsp - ${project.version} - test - org.eclipse.jetty.toolchain jetty-test-helper diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/FilterHolder.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/FilterHolder.java index 2ba0adb913a..3baaf9763f8 100644 --- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/FilterHolder.java +++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/FilterHolder.java @@ -109,32 +109,37 @@ public class FilterHolder extends Holder @Override public void initialize() throws Exception { - super.initialize(); - - if (_filter==null) + if (!_initialized) { - try - { - ServletContext context=_servletHandler.getServletContext(); - _filter=(context instanceof ServletContextHandler.Context) - ?((ServletContextHandler.Context)context).createFilter(getHeldClass()) - :getHeldClass().newInstance(); - } - catch (ServletException se) - { - Throwable cause = se.getRootCause(); - if (cause instanceof InstantiationException) - throw (InstantiationException)cause; - if (cause instanceof IllegalAccessException) - throw (IllegalAccessException)cause; - throw se; - } - } + super.initialize(); - _config=new Config(); - if (LOG.isDebugEnabled()) - LOG.debug("Filter.init {}",_filter); - _filter.init(_config); + if (_filter==null) + { + try + { + ServletContext context=_servletHandler.getServletContext(); + _filter=(context instanceof ServletContextHandler.Context) + ?((ServletContextHandler.Context)context).createFilter(getHeldClass()) + :getHeldClass().newInstance(); + } + catch (ServletException se) + { + Throwable cause = se.getRootCause(); + if (cause instanceof InstantiationException) + throw (InstantiationException)cause; + if (cause instanceof IllegalAccessException) + throw (IllegalAccessException)cause; + throw se; + } + } + + _config=new Config(); + if (LOG.isDebugEnabled()) + LOG.debug("Filter.init {}",_filter); + _filter.init(_config); + } + + _initialized = true; } @@ -158,6 +163,7 @@ public class FilterHolder extends Holder _filter=null; _config=null; + _initialized = false; super.doStop(); } diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/Holder.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/Holder.java index bafb67b6969..01c920e5606 100644 --- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/Holder.java +++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/Holder.java @@ -53,6 +53,7 @@ public class Holder extends BaseHolder protected String _displayName; protected boolean _asyncSupported; protected String _name; + protected boolean _initialized = false; /* ---------------------------------------------------------------- */ diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java index cdb566372ed..ecb97aa65e5 100644 --- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java +++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHandler.java @@ -479,16 +479,7 @@ public class ServletHandler extends ScopedHandler old_scope=baseRequest.getUserIdentityScope(); baseRequest.setUserIdentityScope(servlet_holder); - // start manual inline of nextScope(target,baseRequest,request,response); - if (never()) - nextScope(target,baseRequest,request,response); - else if (_nextScope!=null) - _nextScope.doScope(target,baseRequest,request, response); - else if (_outerScope!=null) - _outerScope.doHandle(target,baseRequest,request, response); - else - doHandle(target,baseRequest,request, response); - // end manual inline (pathentic attempt to reduce stack depth) + nextScope(target,baseRequest,request,response); } finally { @@ -886,7 +877,11 @@ public class ServletHandler extends ScopedHandler try { - setServlets(ArrayUtil.addToArray(holders, servlet, ServletHolder.class)); + synchronized (this) + { + if (servlet != null && !containsServletHolder(servlet)) + setServlets(ArrayUtil.addToArray(holders, servlet, ServletHolder.class)); + } ServletMapping mapping = new ServletMapping(); mapping.setServletName(servlet.getName()); @@ -908,7 +903,14 @@ public class ServletHandler extends ScopedHandler */ public void addServlet(ServletHolder holder) { - setServlets(ArrayUtil.addToArray(getServlets(), holder, ServletHolder.class)); + if (holder == null) + return; + + synchronized (this) + { + if (!containsServletHolder(holder)) + setServlets(ArrayUtil.addToArray(getServlets(), holder, ServletHolder.class)); + } } /* ------------------------------------------------------------ */ @@ -990,7 +992,11 @@ public class ServletHandler extends ScopedHandler try { - setFilters(ArrayUtil.addToArray(holders, holder, FilterHolder.class)); + synchronized (this) + { + if (holder != null && !containsFilterHolder(holder)) + setFilters(ArrayUtil.addToArray(holders, holder, FilterHolder.class)); + } FilterMapping mapping = new FilterMapping(); mapping.setFilterName(holder.getName()); @@ -1052,7 +1058,11 @@ public class ServletHandler extends ScopedHandler try { - setFilters(ArrayUtil.addToArray(holders, holder, FilterHolder.class)); + synchronized (this) + { + if (holder != null && !containsFilterHolder(holder)) + setFilters(ArrayUtil.addToArray(holders, holder, FilterHolder.class)); + } FilterMapping mapping = new FilterMapping(); mapping.setFilterName(holder.getName()); @@ -1093,7 +1103,13 @@ public class ServletHandler extends ScopedHandler public void addFilter (FilterHolder filter, FilterMapping filterMapping) { if (filter != null) - setFilters(ArrayUtil.addToArray(getFilters(), filter, FilterHolder.class)); + { + synchronized (this) + { + if (!containsFilterHolder(filter)) + setFilters(ArrayUtil.addToArray(getFilters(), filter, FilterHolder.class)); + } + } if (filterMapping != null) addFilterMapping(filterMapping); } @@ -1106,8 +1122,14 @@ public class ServletHandler extends ScopedHandler */ public void addFilter (FilterHolder filter) { - if (filter != null) - setFilters(ArrayUtil.addToArray(getFilters(), filter, FilterHolder.class)); + if (filter == null) + return; + + synchronized (this) + { + if (!containsFilterHolder(filter)) + setFilters(ArrayUtil.addToArray(getFilters(), filter, FilterHolder.class)); + } } /* ------------------------------------------------------------ */ @@ -1450,7 +1472,36 @@ public class ServletHandler extends ScopedHandler if (getHandler()!=null) nextHandle(URIUtil.addPaths(request.getServletPath(),request.getPathInfo()),baseRequest,request,response); } + + + protected synchronized boolean containsFilterHolder (FilterHolder holder) + { + if (_filters == null) + return false; + boolean found = false; + for (FilterHolder f:_filters) + { + if (f == holder) + found = true; + } + return found; + } + + protected synchronized boolean containsServletHolder (ServletHolder holder) + { + if (_servlets == null) + return false; + boolean found = false; + for (ServletHolder s:_servlets) + { + if (s == holder) + found = true; + } + return found; + } + + /* ------------------------------------------------------------ */ /** * @param filterChainsCached The filterChainsCached to set. diff --git a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java index 774300e8302..5763c506f37 100644 --- a/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java +++ b/jetty-servlet/src/main/java/org/eclipse/jetty/servlet/ServletHolder.java @@ -72,7 +72,6 @@ public class ServletHolder extends Holder implements UserIdentity.Scope private static final Logger LOG = Log.getLogger(ServletHolder.class); private int _initOrder = -1; private boolean _initOnStartup=false; - private boolean _initialized = false; private Map _roleMap; private String _forcedPath; private String _runAsRole; @@ -409,7 +408,8 @@ public class ServletHolder extends Holder implements UserIdentity.Scope public void initialize () throws Exception { - if(!_initialized){ + if(!_initialized) + { super.initialize(); if (_extInstance || _initOnStartup) { diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/AsyncContextTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/AsyncContextTest.java index 6b873349e41..c7aef90e5a5 100644 --- a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/AsyncContextTest.java +++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/AsyncContextTest.java @@ -34,7 +34,6 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; -import org.eclipse.jetty.http.HttpParser; import org.eclipse.jetty.server.Handler; import org.eclipse.jetty.server.HttpChannel; import org.eclipse.jetty.server.HttpConnectionFactory; @@ -169,9 +168,7 @@ public class AsyncContextTest BufferedReader br = new BufferedReader(new StringReader(responseString)); assertEquals("HTTP/1.1 500 Server Error", br.readLine()); - br.readLine();// connection close - br.readLine();// server - br.readLine();// empty + readHeader(br); Assert.assertEquals("ERROR: /error", br.readLine()); Assert.assertEquals("PathInfo= /IOE", br.readLine()); Assert.assertEquals("EXCEPTION: org.eclipse.jetty.server.QuietServletException: java.io.IOException: Test", br.readLine()); @@ -192,9 +189,7 @@ public class AsyncContextTest BufferedReader br = new BufferedReader(new StringReader(responseString)); assertEquals("HTTP/1.1 200 OK",br.readLine()); - br.readLine();// connection close - br.readLine();// server - br.readLine();// empty + readHeader(br); Assert.assertEquals("error servlet","completeBeforeThrow",br.readLine()); } @@ -273,10 +268,15 @@ public class AsyncContextTest @Test public void testDispatch() throws Exception { - String request = "GET /ctx/forward HTTP/1.1\r\n" + "Host: localhost\r\n" + "Content-Type: application/x-www-form-urlencoded\r\n" + "Connection: close\r\n" - + "\r\n"; + String request = + "GET /ctx/forward HTTP/1.1\r\n" + + "Host: localhost\r\n" + + "Content-Type: application/x-www-form-urlencoded\r\n" + + "Connection: close\r\n" + + "\r\n"; - String responseString = _connector.getResponses(request); + String responseString = _connector.getResponse(request); + System.err.println(responseString); BufferedReader br = parseHeader(responseString); assertThat("!ForwardingServlet", br.readLine(), equalTo("Dispatched back to ForwardingServlet")); } @@ -300,14 +300,17 @@ public class AsyncContextTest private BufferedReader parseHeader(String responseString) throws IOException { BufferedReader br = new BufferedReader(new StringReader(responseString)); - assertEquals("HTTP/1.1 200 OK", br.readLine()); - - br.readLine();// connection close - br.readLine();// server - br.readLine();// empty + readHeader(br); return br; } + + private void readHeader(BufferedReader br) throws IOException + { + String line = br.readLine(); + while (line!=null && !line.isEmpty()) + line = br.readLine(); + } private class ForwardingServlet extends HttpServlet { @@ -371,11 +374,7 @@ public class AsyncContextTest BufferedReader br = new BufferedReader(new StringReader(responseString)); assertEquals("HTTP/1.1 500 Server Error", br.readLine()); - - br.readLine();// connection close - br.readLine();// server - br.readLine();// empty - + readHeader(br); Assert.assertEquals("error servlet", "ERROR: /error", br.readLine()); } @@ -392,9 +391,7 @@ public class AsyncContextTest BufferedReader br = new BufferedReader(new StringReader(responseString)); assertEquals("HTTP/1.1 500 Server Error", br.readLine()); - br.readLine();// connection close - br.readLine();// server - br.readLine();// empty + readHeader(br); Assert.assertEquals("error servlet", "ERROR: /error", br.readLine()); Assert.assertEquals("error servlet", "PathInfo= /500", br.readLine()); diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/AsyncListenerTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/AsyncListenerTest.java index f50b2ef9417..ae9b8e36338 100644 --- a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/AsyncListenerTest.java +++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/AsyncListenerTest.java @@ -32,12 +32,14 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.http.HttpStatus; -import org.eclipse.jetty.io.RuntimeIOException; +import org.eclipse.jetty.http.HttpTester; import org.eclipse.jetty.server.LocalConnector; import org.eclipse.jetty.server.QuietServletException; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.ErrorHandler; +import org.eclipse.jetty.util.thread.QueuedThreadPool; import org.junit.After; +import org.junit.Assert; import org.junit.Test; import static org.hamcrest.Matchers.containsString; @@ -45,12 +47,13 @@ import static org.junit.Assert.assertThat; public class AsyncListenerTest { + private QueuedThreadPool threadPool; private Server server; private LocalConnector connector; public void startServer(ServletContextHandler context) throws Exception { - server = new Server(); + server = threadPool == null ? new Server() : new Server(threadPool); connector = new LocalConnector(server); connector.setIdleTimeout(20 * 60 * 1000L); server.addConnector(connector); @@ -407,6 +410,42 @@ public class AsyncListenerTest assertThat(httpResponse, containsString("DATA")); } + @Test + public void test_StartAsync_OnTimeout_CalledBy_PooledThread() throws Exception + { + String threadNamePrefix = "async_listener"; + threadPool = new QueuedThreadPool(); + threadPool.setName(threadNamePrefix); + ServletContextHandler context = new ServletContextHandler(); + context.addServlet(new ServletHolder(new HttpServlet() + { + @Override + protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException + { + AsyncContext asyncContext = request.startAsync(); + asyncContext.setTimeout(1000); + asyncContext.addListener(new AsyncListenerAdapter() + { + @Override + public void onTimeout(AsyncEvent event) throws IOException + { + if (Thread.currentThread().getName().startsWith(threadNamePrefix)) + response.setStatus(HttpStatus.OK_200); + else + response.setStatus(HttpStatus.INTERNAL_SERVER_ERROR_500); + asyncContext.complete(); + } + }); + } + }), "/*"); + startServer(context); + + HttpTester.Response response = HttpTester.parseResponse(connector.getResponse("" + + "GET / HTTP/1.1\r\n" + + "Host: localhost\r\n" + + "\r\n")); + Assert.assertEquals(HttpStatus.OK_200, response.getStatus()); + } // Unique named RuntimeException to help during debugging / assertions. public static class TestRuntimeException extends RuntimeException diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DefaultServletRangesTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DefaultServletRangesTest.java index 20696666ca8..7be6aff00f4 100644 --- a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DefaultServletRangesTest.java +++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DefaultServletRangesTest.java @@ -115,7 +115,6 @@ public class DefaultServletRangesTest "\r\n"); assertResponseContains("206 Partial", response); assertResponseContains("Content-Type: text/plain", response); - assertResponseContains("Content-Length: 10", response); assertResponseContains("Content-Range: bytes 0-9/80", response); assertResponseContains(DATA.substring(0,10), response); } @@ -133,7 +132,6 @@ public class DefaultServletRangesTest "\r\n"); assertResponseContains("206 Partial", response); assertResponseContains("Content-Type: text/plain", response); - assertResponseContains("Content-Length: 7", response); assertResponseContains("Content-Range: bytes 3-9/80", response); assertResponseContains(DATA.substring(3,10), response); } @@ -156,7 +154,6 @@ public class DefaultServletRangesTest assertResponseContains("Content-Range: bytes 0-9/80", response); assertResponseContains("Content-Range: bytes 20-29/80", response); assertResponseContains("Content-Range: bytes 40-49/80", response); - assertResponseContains("Content-Length: " + body.length(), response); assertResponseContains(DATA.substring(0,10), response); assertResponseContains(DATA.substring(20,30), response); assertResponseContains(DATA.substring(40,50), response); @@ -177,7 +174,6 @@ public class DefaultServletRangesTest assertResponseContains("206 Partial", response); assertResponseNotContains("Content-Type: multipart/byteranges; boundary=", response); assertResponseContains("Content-Range: bytes 20-79/80", response); - assertResponseContains("Content-Length: 60", response); assertResponseContains(DATA.substring(60), response); } @@ -194,7 +190,6 @@ public class DefaultServletRangesTest assertResponseContains("206 Partial", response); assertResponseNotContains("Content-Type: multipart/byteranges; boundary=", response); assertResponseContains("Content-Range: bytes 60-79/80", response); // yes the spec says it is these bytes - assertResponseContains("Content-Length: 20", response); assertResponseContains(DATA.substring(60), response); } diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DefaultServletTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DefaultServletTest.java index 830a0d8031a..90f09c9d271 100644 --- a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DefaultServletTest.java +++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DefaultServletTest.java @@ -591,18 +591,24 @@ public class DefaultServletTest response = connector.getResponse("GET /context/data.txt HTTP/1.1\r\n" + "Host: localhost\r\n" + - "Connection: close\r\n"+ "Range: bytes=0-9\r\n" + "\r\n"); assertResponseContains("206 Partial", response); assertResponseContains("Content-Type: text/plain", response); assertResponseContains("Content-Length: 10", response); assertResponseContains("Content-Range: bytes 0-9/80", response); - + + response = connector.getResponse("GET /context/data.txt HTTP/1.1\r\n" + + "Host: localhost\r\n" + + "Range: bytes=0-9\r\n" + + "Connection: close\r\n" + + "\r\n"); + assertResponseContains("206 Partial", response); + assertResponseContains("Content-Type: text/plain", response); + assertResponseContains("Content-Range: bytes 0-9/80", response); response = connector.getResponse("GET /context/data.txt HTTP/1.1\r\n" + "Host: localhost\r\n" + - "Connection: close\r\n"+ "Range: bytes=0-9,20-29,40-49\r\n" + "\r\n"); int start = response.indexOf("--jetty"); @@ -617,7 +623,6 @@ public class DefaultServletTest response = connector.getResponse("GET /context/data.txt HTTP/1.1\r\n" + "Host: localhost\r\n" + - "Connection: close\r\n"+ "Range: bytes=0-9,20-29,40-49,70-79\r\n" + "\r\n"); start = response.indexOf("--jetty"); @@ -633,7 +638,6 @@ public class DefaultServletTest response = connector.getResponse("GET /context/data.txt HTTP/1.1\r\n" + "Host: localhost\r\n" + - "Connection: close\r\n"+ "Range: bytes=0-9,20-29,40-49,60-60,70-79\r\n" + "\r\n"); start = response.indexOf("--jetty"); @@ -655,7 +659,6 @@ public class DefaultServletTest response = connector.getResponse("GET /context/nofilesuffix HTTP/1.1\r\n" + "Host: localhost\r\n" + - "Connection: close\r\n"+ "\r\n"); assertResponseContains("200 OK", response); assertResponseContains("Accept-Ranges: bytes", response); @@ -664,7 +667,6 @@ public class DefaultServletTest response = connector.getResponse("GET /context/nofilesuffix HTTP/1.1\r\n" + "Host: localhost\r\n" + - "Connection: close\r\n"+ "Range: bytes=0-9\r\n" + "\r\n"); assertResponseContains("206 Partial", response); @@ -673,8 +675,7 @@ public class DefaultServletTest assertResponseContains("Content-Range: bytes 0-9/80", response); response = connector.getResponse("GET /context/nofilesuffix HTTP/1.1\r\n" + - "Host: localhost\r\n" + - "Connection: close\r\n"+ + "Host: localhost\r\n" + "Range: bytes=0-9,20-29,40-49\r\n" + "\r\n"); start = response.indexOf("--jetty"); @@ -687,11 +688,8 @@ public class DefaultServletTest assertResponseContains("Content-Length: " + body.length(), response); assertTrue(body.endsWith(boundary + "--\r\n")); - - response = connector.getResponse("GET /context/nofilesuffix HTTP/1.1\r\n" + - "Host: localhost\r\n" + - "Connection: close\r\n"+ + "Host: localhost\r\n" + "Range: bytes=0-9,20-29,40-49,60-60,70-79\r\n" + "\r\n"); start = response.indexOf("--jetty"); diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DispatcherTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DispatcherTest.java index d5214992c7a..6dfa30e160a 100644 --- a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DispatcherTest.java +++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/DispatcherTest.java @@ -165,7 +165,6 @@ public class DispatcherTest String expected= "HTTP/1.1 200 OK\r\n"+ - "Content-Length: 0\r\n"+ "\r\n"; String responses = _connector.getResponses("GET /context/IncludeServlet?do=assertinclude&do=more&test=1 HTTP/1.0\n\n"); @@ -182,7 +181,6 @@ public class DispatcherTest String expected= "HTTP/1.1 200 OK\r\n"+ - "Content-Length: 0\r\n"+ "\r\n"; String responses = _connector.getResponses("GET /context/ForwardServlet/forwardpath?do=include HTTP/1.0\n\n"); diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/FilterHolderTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/FilterHolderTest.java new file mode 100644 index 00000000000..ca720071064 --- /dev/null +++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/FilterHolderTest.java @@ -0,0 +1,103 @@ +// +// ======================================================================== +// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + + +package org.eclipse.jetty.servlet; + +import static org.junit.Assert.*; + +import java.io.IOException; +import java.util.concurrent.atomic.AtomicInteger; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +import org.eclipse.jetty.util.log.StacklessLogging; +import org.junit.Test; + +/** + * FilterHolderTest + * + * + */ +public class FilterHolderTest +{ + + @Test + public void testInitialize() + throws Exception + { + ServletHandler handler = new ServletHandler(); + + final AtomicInteger counter = new AtomicInteger(0); + Filter filter = new Filter () + { + @Override + public void init(FilterConfig filterConfig) throws ServletException + { + counter.incrementAndGet(); + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException + { + } + + @Override + public void destroy() + { + } + + }; + + FilterHolder fh = new FilterHolder(); + fh.setServletHandler(handler); + + fh.setName("xx"); + fh.setFilter(filter); + + try (StacklessLogging stackless = new StacklessLogging(FilterHolder.class)) + { + fh.initialize(); + fail("Not started"); + } + catch (Exception e) + { + //expected + } + + fh.start(); + fh.initialize(); + assertEquals(1, counter.get()); + + fh.initialize(); + assertEquals(1, counter.get()); + + fh.stop(); + assertEquals(1, counter.get()); + fh.start(); + assertEquals(1, counter.get()); + fh.initialize(); + assertEquals(2, counter.get()); + } + +} diff --git a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletHandlerTest.java b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletHandlerTest.java index 989455bea5b..71ba9e665ef 100644 --- a/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletHandlerTest.java +++ b/jetty-servlet/src/test/java/org/eclipse/jetty/servlet/ServletHandlerTest.java @@ -99,6 +99,136 @@ public class ServletHandlerTest } + @Test + public void testAddFilterIgnoresDuplicates() throws Exception + { + + ServletHandler handler = new ServletHandler(); + FilterHolder h = new FilterHolder(); + h.setName("x"); + handler.addFilter(h); + FilterHolder[] holders = handler.getFilters(); + assertNotNull(holders); + assertTrue(holders[0]==h); + + handler.addFilter(h); + holders = handler.getFilters(); + assertNotNull(holders); + assertTrue(holders.length == 1); + assertTrue(holders[0] == h); + + FilterHolder h2 = new FilterHolder(); + h2.setName("x"); //not allowed by servlet spec, just here to test object equality + handler.addFilter(h2); + holders = handler.getFilters(); + assertNotNull(holders); + assertTrue(holders.length == 2); + assertTrue(holders[1] == h2); + } + + @Test + public void testAddFilterIgnoresDuplicates2() throws Exception + { + + ServletHandler handler = new ServletHandler(); + FilterHolder h = new FilterHolder(); + h.setName("x"); + FilterMapping m = new FilterMapping(); + m.setPathSpec("/*"); + m.setFilterHolder(h); + + + handler.addFilter(h,m); + FilterHolder[] holders = handler.getFilters(); + assertNotNull(holders); + assertTrue(holders[0]==h); + + + FilterMapping m2 = new FilterMapping(); + m2.setPathSpec("/*"); + m2.setFilterHolder(h); + handler.addFilter(h, m2); + holders = handler.getFilters(); + assertNotNull(holders); + assertTrue(holders.length == 1); + assertTrue(holders[0] == h); + + FilterHolder h2 = new FilterHolder(); + h2.setName("x"); //not allowed by servlet spec, just here to test object equality + FilterMapping m3 = new FilterMapping(); + m3.setPathSpec("/*"); + m3.setFilterHolder(h); + + handler.addFilter(h2, m3); + holders = handler.getFilters(); + assertNotNull(holders); + assertTrue(holders.length == 2); + assertTrue(holders[1] == h2); + } + + + @Test + public void testAddFilterWithMappingIgnoresDuplicateFilters() throws Exception + { + ServletHandler handler = new ServletHandler(); + FilterHolder h = new FilterHolder(); + h.setName("x"); + + + + handler.addFilterWithMapping(h,"/*", 0); + FilterHolder[] holders = handler.getFilters(); + assertNotNull(holders); + assertTrue(holders[0]==h); + + handler.addFilterWithMapping(h, "/*", 1); + holders = handler.getFilters(); + assertNotNull(holders); + assertTrue(holders.length == 1); + assertTrue(holders[0] == h); + + FilterHolder h2 = new FilterHolder(); + h2.setName("x"); //not allowed by servlet spec, just here to test object equality + + handler.addFilterWithMapping(h2, "/*", 0); + holders = handler.getFilters(); + assertNotNull(holders); + assertTrue(holders.length == 2); + assertTrue(holders[1] == h2); + } + + + @Test + public void testAddFilterWithMappingIngoresDuplicateFilters2 () throws Exception + { + ServletHandler handler = new ServletHandler(); + FilterHolder h = new FilterHolder(); + h.setName("x"); + + + + handler.addFilterWithMapping(h,"/*", EnumSet.allOf(DispatcherType.class)); + FilterHolder[] holders = handler.getFilters(); + assertNotNull(holders); + assertTrue(holders[0]==h); + + handler.addFilterWithMapping(h, "/x", EnumSet.allOf(DispatcherType.class)); + holders = handler.getFilters(); + assertNotNull(holders); + assertTrue(holders.length == 1); + assertTrue(holders[0] == h); + + FilterHolder h2 = new FilterHolder(); + h2.setName("x"); //not allowed by servlet spec, just here to test object equality + + handler.addFilterWithMapping(h2, "/*", EnumSet.allOf(DispatcherType.class)); + holders = handler.getFilters(); + assertNotNull(holders); + assertTrue(holders.length == 2); + assertTrue(holders[1] == h2); + } + + @Test public void testDuplicateMappingsForbidden() throws Exception { diff --git a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java index d68e016d704..6232a1f9dd7 100644 --- a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java +++ b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/MultiPartFilter.java @@ -149,7 +149,6 @@ public class MultiPartFilter implements Filter return; } - InputStream in = new BufferedInputStream(request.getInputStream()); String content_type=srequest.getContentType(); //Get current parameters so we can merge into them @@ -164,12 +163,12 @@ public class MultiPartFilter implements Filter } MultipartConfigElement config = new MultipartConfigElement(tempdir.getCanonicalPath(), _maxFileSize, _maxRequestSize, _fileOutputBuffer); - MultiPartInputStreamParser mpis = new MultiPartInputStreamParser(in, content_type, config, tempdir); + MultiPartInputStreamParser mpis = new MultiPartInputStreamParser(request.getInputStream(), content_type, config, tempdir); mpis.setDeleteOnExit(_deleteFiles); mpis.setWriteFilesWithFilenames(_writeFilesWithFilenames); request.setAttribute(MULTIPART, mpis); try - { + { Collection parts = mpis.getParts(); if (parts != null) { diff --git a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/PushCacheFilter.java b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/PushCacheFilter.java index 74623f3ea1b..c97cf95b850 100644 --- a/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/PushCacheFilter.java +++ b/jetty-servlets/src/main/java/org/eclipse/jetty/servlets/PushCacheFilter.java @@ -44,6 +44,7 @@ import javax.servlet.http.PushBuilder; import org.eclipse.jetty.http.HttpField; import org.eclipse.jetty.http.HttpFields; import org.eclipse.jetty.http.HttpHeader; +import org.eclipse.jetty.http.HttpMethod; import org.eclipse.jetty.http.HttpURI; import org.eclipse.jetty.http.HttpVersion; import org.eclipse.jetty.server.Request; @@ -114,17 +115,20 @@ public class PushCacheFilter implements Filter @Override public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { - if (HttpVersion.fromString(req.getProtocol()).getVersion() < 20) + HttpServletRequest request = (HttpServletRequest)req; + + if (HttpVersion.fromString(req.getProtocol()).getVersion() < 20 || + !HttpMethod.GET.is(request.getMethod())) { chain.doFilter(req, resp); return; } long now = System.nanoTime(); - HttpServletRequest request = (HttpServletRequest)req; // Iterating over fields is more efficient than multiple gets - HttpFields fields = Request.getBaseRequest(request).getHttpFields(); + Request jettyRequest = Request.getBaseRequest(request); + HttpFields fields = jettyRequest.getHttpFields(); boolean conditional = false; String referrer = null; loop: @@ -173,7 +177,7 @@ public class PushCacheFilter implements Filter if (referredFromHere) { - if ("GET".equalsIgnoreCase(request.getMethod())) + if (HttpMethod.GET.is(request.getMethod())) { String referrerPath = referrerURI.getPath(); if (referrerPath == null) @@ -254,7 +258,7 @@ public class PushCacheFilter implements Filter // Push associated resources. if (!isPushRequest(request) && !conditional && !primaryResource._associated.isEmpty()) { - PushBuilder pushBuilder = Request.getBaseRequest(request).getPushBuilder(); + PushBuilder pushBuilder = jettyRequest.getPushBuilder(); // Breadth-first push of associated resources. Queue queue = new ArrayDeque<>(); diff --git a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/MultipartFilterTest.java b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/MultipartFilterTest.java index 7b5db490119..7552ed83f78 100644 --- a/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/MultipartFilterTest.java +++ b/jetty-servlets/src/test/java/org/eclipse/jetty/servlets/MultipartFilterTest.java @@ -31,6 +31,7 @@ import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; +import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; import java.nio.charset.StandardCharsets; @@ -38,18 +39,27 @@ import java.util.EnumSet; import java.util.Map; import javax.servlet.DispatcherType; +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.FilterConfig; import javax.servlet.ServletException; +import javax.servlet.ServletInputStream; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.eclipse.jetty.http.HttpTester; import org.eclipse.jetty.http.MimeTypes; +import org.eclipse.jetty.server.HttpChannel; import org.eclipse.jetty.servlet.FilterHolder; +import org.eclipse.jetty.servlet.FilterMapping; import org.eclipse.jetty.servlet.ServletHandler; import org.eclipse.jetty.servlet.ServletTester; import org.eclipse.jetty.util.IO; import org.eclipse.jetty.util.MultiPartInputStreamParser; +import org.eclipse.jetty.util.ReadLineInputStream; import org.eclipse.jetty.util.log.Log; import org.eclipse.jetty.util.log.Logger; import org.eclipse.jetty.util.log.StacklessLogging; @@ -64,6 +74,44 @@ public class MultipartFilterTest private ServletTester tester; FilterHolder multipartFilter; + public static class ReadAllFilter implements Filter + { + + @Override + public void init(FilterConfig filterConfig) throws ServletException + { + } + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException + { + ServletInputStream is = request.getInputStream(); + ReadLineInputStream rlis = new ReadLineInputStream(request.getInputStream()); + String line = ""; + while (line != null) + { + line = rlis.readLine(); + } + chain.doFilter(request, response); + } + + @Override + public void destroy() + { + } + } + + + public static class NullServlet extends HttpServlet + { + @Override + protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException + { + resp.setStatus(200); + } + + } + public static class FilenameServlet extends TestServlet { @Override @@ -143,6 +191,70 @@ public class MultipartFilterTest tester.stop(); tester=null; } + + @Test + public void testFinalBoundaryOnly() throws Exception + { + + tester.addServlet(NullServlet.class,"/null"); + HttpTester.Request request = HttpTester.newRequest(); + HttpTester.Response response; + + // test GET + request.setMethod("POST"); + request.setVersion("HTTP/1.0"); + request.setHeader("Host","tester"); + request.setURI("/context/null"); + + String delimiter = "\r\n"; + final String boundary = "MockMultiPartTestBoundary"; + String content = + delimiter + + "Hello world" + + delimiter + // Two delimiter markers, which make an empty line. + delimiter + + "--" + boundary + "--" + delimiter; + + request.setHeader("Content-Type","multipart/form-data; boundary="+boundary); + request.setContent(content); + + try(StacklessLogging stackless = new StacklessLogging(ServletHandler.class, HttpChannel.class)) + { + response = HttpTester.parseResponse(tester.getResponses(request.generate())); + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + } + } + + @Test + public void testEmpty() throws Exception + { + + tester.addServlet(NullServlet.class,"/null"); + + HttpTester.Request request = HttpTester.newRequest(); + HttpTester.Response response; + + // test GET + request.setMethod("POST"); + request.setVersion("HTTP/1.0"); + request.setHeader("Host","tester"); + request.setURI("/context/null"); + + String delimiter = "\r\n"; + final String boundary = "MockMultiPartTestBoundary"; + String content = + delimiter + + "--" + boundary + "--" + delimiter; + + request.setHeader("Content-Type","multipart/form-data; boundary="+boundary); + request.setContent(content); + + try(StacklessLogging stackless = new StacklessLogging(ServletHandler.class, HttpChannel.class)) + { + response = HttpTester.parseResponse(tester.getResponses(request.generate())); + assertEquals(HttpServletResponse.SC_OK,response.getStatus()); + } + } @Test public void testBadPost() throws Exception @@ -170,7 +282,7 @@ public class MultipartFilterTest request.setContent(content); - try(StacklessLogging stackless = new StacklessLogging(ServletHandler.class)) + try(StacklessLogging stackless = new StacklessLogging(ServletHandler.class, HttpChannel.class);) { response = HttpTester.parseResponse(tester.getResponses(request.generate())); assertEquals(HttpServletResponse.SC_INTERNAL_SERVER_ERROR,response.getStatus()); @@ -623,13 +735,49 @@ public class MultipartFilterTest request.setURI("/context/dump"); request.setHeader("Content-Type","multipart/form-data; boundary="+boundary); - try(StacklessLogging stackless = new StacklessLogging(ServletHandler.class)) + try(StacklessLogging stackless = new StacklessLogging(ServletHandler.class, HttpChannel.class)) { response = HttpTester.parseResponse(tester.getResponses(request.generate())); assertEquals(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, response.getStatus()); assertTrue(response.getContent().indexOf("Missing content")>=0); } } + + + @Test + public void testBodyAlreadyConsumed() + throws Exception + { + tester.addServlet(NullServlet.class,"/null"); + + FilterHolder holder = new FilterHolder(); + holder.setName("reader"); + holder.setFilter(new ReadAllFilter()); + tester.getContext().getServletHandler().addFilter(holder); + FilterMapping mapping = new FilterMapping(); + mapping.setFilterName("reader"); + mapping.setPathSpec("/*"); + tester.getContext().getServletHandler().prependFilterMapping(mapping); + String boundary="XyXyXy"; + // generated and parsed test + HttpTester.Request request = HttpTester.newRequest(); + HttpTester.Response response; + + request.setMethod("POST"); + request.setVersion("HTTP/1.0"); + request.setHeader("Host","tester"); + request.setURI("/context/null"); + request.setHeader("Content-Type","multipart/form-data; boundary="+boundary); + request.setContent("How now brown cow"); + + try(StacklessLogging stackless = new StacklessLogging(ServletHandler.class)) + { + response = HttpTester.parseResponse(tester.getResponses(request.generate())); + assertEquals(HttpServletResponse.SC_OK, response.getStatus()); + } + } + + @Test public void testWhitespaceBodyWithCRLF() @@ -648,7 +796,7 @@ public class MultipartFilterTest request.setHeader("Content-Type","multipart/form-data; boundary="+boundary); request.setContent(whitespace); - try(StacklessLogging stackless = new StacklessLogging(ServletHandler.class)) + try(StacklessLogging stackless = new StacklessLogging(ServletHandler.class, HttpChannel.class)) { response = HttpTester.parseResponse(tester.getResponses(request.generate())); assertEquals(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, response.getStatus()); @@ -674,7 +822,7 @@ public class MultipartFilterTest request.setHeader("Content-Type","multipart/form-data; boundary="+boundary); request.setContent(whitespace); - try(StacklessLogging stackless = new StacklessLogging(ServletHandler.class)) + try(StacklessLogging stackless = new StacklessLogging(ServletHandler.class, HttpChannel.class)) { response = HttpTester.parseResponse(tester.getResponses(request.generate())); assertEquals(HttpServletResponse.SC_INTERNAL_SERVER_ERROR, response.getStatus()); @@ -805,7 +953,7 @@ public class MultipartFilterTest } request.setContent(baos.toString()); - try(StacklessLogging stackless = new StacklessLogging(ServletHandler.class)) + try(StacklessLogging stackless = new StacklessLogging(ServletHandler.class, HttpChannel.class)) { response = HttpTester.parseResponse(tester.getResponses(request.generate())); assertTrue(response.getContent().contains("Buffer size exceeded")); @@ -892,9 +1040,6 @@ public class MultipartFilterTest public void testWithCharSet() throws Exception { - ((StdErrLog)Log.getLogger(MultiPartFilter.class)).setDebugEnabled(true); - ((StdErrLog)Log.getLogger(MultiPartInputStreamParser.class)).setDebugEnabled(true); - // generated and parsed test HttpTester.Request request = HttpTester.newRequest(); HttpTester.Response response; diff --git a/jetty-spring/pom.xml b/jetty-spring/pom.xml index cf602d219af..194a9ef07b1 100644 --- a/jetty-spring/pom.xml +++ b/jetty-spring/pom.xml @@ -17,6 +17,13 @@ install + + org.jacoco + jacoco-maven-plugin + + true + + diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/BaseBuilder.java b/jetty-start/src/main/java/org/eclipse/jetty/start/BaseBuilder.java index cb95adbcd67..e9d42eadb3c 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/BaseBuilder.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/BaseBuilder.java @@ -34,6 +34,7 @@ import org.eclipse.jetty.start.builders.StartDirBuilder; import org.eclipse.jetty.start.builders.StartIniBuilder; import org.eclipse.jetty.start.fileinits.BaseHomeFileInitializer; import org.eclipse.jetty.start.fileinits.MavenLocalRepoFileInitializer; +import org.eclipse.jetty.start.fileinits.LocalFileInitializer; import org.eclipse.jetty.start.fileinits.TestFileInitializer; import org.eclipse.jetty.start.fileinits.UriFileInitializer; @@ -73,19 +74,25 @@ public class BaseBuilder { // Copy from basehome fileInitializers.add(new BaseHomeFileInitializer(baseHome)); + + // Handle local directories + fileInitializers.add(new LocalFileInitializer(baseHome)); // No downloads performed - fileInitializers.add(new TestFileInitializer()); + fileInitializers.add(new TestFileInitializer(baseHome)); } - else if (args.isDownload()) + else if (args.isCreateFiles()) { + // Handle local directories + fileInitializers.add(new LocalFileInitializer(baseHome)); + // Downloads are allowed to be performed // Setup Maven Local Repo - Path localRepoDir = args.getMavenLocalRepoDir(); + Path localRepoDir = args.findMavenLocalRepoDir(); if (localRepoDir != null) { // Use provided local repo directory - fileInitializers.add(new MavenLocalRepoFileInitializer(baseHome,localRepoDir)); + fileInitializers.add(new MavenLocalRepoFileInitializer(baseHome,localRepoDir,args.getMavenLocalRepoDir()==null)); } else { @@ -258,104 +265,35 @@ public class BaseBuilder /** * Process a specific file resource * - * @param arg - * the fileArg to work with - * @param file - * the resolved file reference to work with + * @param arg the fileArg to work with * @return true if change was made as a result of the file, false if no change made. * @throws IOException - * if there was an issue in processing this file + * if there was an issue in processing this file */ - private boolean processFileResource(FileArg arg, Path file) throws IOException + private boolean processFileResource(FileArg arg) throws IOException { - // now on copy/download paths (be safe above all else) - if (!file.startsWith(baseHome.getBasePath())) - throw new IOException("For security reasons, Jetty start is unable to process maven file resource not in ${jetty.base} - " + file); - - if (startArgs.isDownload() && (arg.uri != null)) - { - // make the directories in ${jetty.base} that we need - boolean modified = FS.ensureDirectoryExists(file.getParent()); - if (modified) - StartLog.log("MKDIR",baseHome.toShortForm(file.getParent())); - - URI uri = URI.create(arg.uri); + URI uri = arg.uri==null?null:URI.create(arg.uri); - // Process via initializers + if (startArgs.isCreateFiles()) + { for (FileInitializer finit : fileInitializers) { - if (finit.init(uri,file,arg.location)) - { - // Completed successfully - return true; - } + if (finit.isApplicable(uri)) + return finit.create(uri,arg.location); } - - if (!FS.exists(file)) - System.err.println("Failed to initialize: "+arg.uri+"|"+arg.location); - return modified; + throw new IOException(String.format("Unable to create %s",arg)); } - else + + for (FileInitializer finit : fileInitializers) { - // Process directly - boolean isDir = arg.location.endsWith("/"); - - if (FS.exists(file)) - { - // Validate existence - if (isDir) - { - if (!Files.isDirectory(file)) - { - throw new IOException("Invalid: path should be a directory (but isn't): " + file); - } - if (!FS.canReadDirectory(file)) - { - throw new IOException("Unable to read directory: " + file); - } - } - else - { - if (!FS.canReadFile(file)) - { - throw new IOException("Unable to read file: " + file); - } - } - - return false; - } - - if (isDir) - { - // Create directory - boolean mkdir = FS.ensureDirectoryExists(file); - if (mkdir) - StartLog.log("MKDIR",baseHome.toShortForm(file)); - return mkdir; - } - else - { - // Warn on missing file (this has to be resolved manually by user) - String shortRef = baseHome.toShortForm(file); - if (startArgs.isTestingModeEnabled()) - { - StartLog.log("TESTING MODE","Skipping required file check on: %s",shortRef); - return false; - } - - StartLog.warn("Missing Required File: %s",baseHome.toShortForm(file)); - startArgs.setRun(false); - if (arg.uri != null) - { - StartLog.warn(" Can be downloaded From: %s",arg.uri); - StartLog.warn(" Run start.jar --create-files to download"); - } - - return false; - } + if (finit.isApplicable(uri)) + if (!finit.check(uri,arg.location)) + startArgs.setRun(false); } + return false; } + /** * Process the {@link FileArg} for startup, assume that all licenses have @@ -378,16 +316,15 @@ public class BaseBuilder for (FileArg arg : files) { - Path file = baseHome.getBasePath(arg.location); try { - boolean processed = processFileResource(arg,file); + boolean processed = processFileResource(arg); dirty |= processed; } catch (Throwable t) { StartLog.warn(t); - failures.add(String.format("[%s] %s - %s",t.getClass().getSimpleName(),t.getMessage(),file.toAbsolutePath().toString())); + failures.add(String.format("[%s] %s - %s",t.getClass().getSimpleName(),t.getMessage(),arg.location)); } } diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/FS.java b/jetty-start/src/main/java/org/eclipse/jetty/start/FS.java index 10d993e17b9..ffc281e50cd 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/FS.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/FS.java @@ -71,6 +71,10 @@ public class FS { if (exists(dir)) { + // Is it a directory? + if (!Files.isDirectory(dir)) + throw new IOException("Path is not directory: " + dir.toAbsolutePath()); + // exists already, nothing to do return false; } diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/FileArg.java b/jetty-start/src/main/java/org/eclipse/jetty/start/FileArg.java index b934649f280..ba8c6f57e1f 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/FileArg.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/FileArg.java @@ -46,6 +46,7 @@ public class FileArg err.append(LN).append("Valid Syntaxes: "); err.append(LN).append(" - eg: resources/"); err.append(LN).append(" or - eg: /var/run/jetty.pid"); + err.append(LN).append(" or - eg: basehome:some/path"); err.append(LN).append(" or | - eg: http://machine/my.conf|resources/my.conf"); err.append(LN).append(" or | - eg: http://machine/glob.dat|/opt/run/glob.dat"); err.append(LN).append("Known uri schemes: http, maven, home"); @@ -56,6 +57,11 @@ public class FileArg this.uri = parts[0]; this.location = parts[1]; } + else if (uriLocation.contains(":")) + { + this.uri = uriLocation; + this.location = null; + } else { this.uri = null; @@ -118,11 +124,7 @@ public class FileArg public String toString() { StringBuilder builder = new StringBuilder(); - builder.append("DownloadArg [uri="); - builder.append(uri); - builder.append(", location="); - builder.append(location); - builder.append("]"); + builder.append("DownloadArg [uri=").append(uri).append(", location=").append(location).append("]"); return builder.toString(); } } diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/FileInitializer.java b/jetty-start/src/main/java/org/eclipse/jetty/start/FileInitializer.java index 715b1329f19..0ac8d75bdd9 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/FileInitializer.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/FileInitializer.java @@ -19,28 +19,216 @@ package org.eclipse.jetty.start; import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.HttpURLConnection; import java.net.URI; +import java.nio.file.DirectoryStream; +import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.StandardOpenOption; +import java.util.HashSet; +import java.util.Set; +import java.util.stream.Stream; /** * Interface for initializing a file resource. */ -public interface FileInitializer +public abstract class FileInitializer { + protected final Set _scheme = new HashSet<>(); + protected final BaseHome _basehome; + + protected FileInitializer(BaseHome basehome, String... scheme) + { + _basehome = basehome; + if (scheme!=null) + for (String s:scheme) + _scheme.add(s.toLowerCase()); + } + + public boolean isApplicable(URI uri) + { + if (_scheme.isEmpty()) + return uri==null; + + return uri!=null && _scheme.contains(uri.getScheme().toLowerCase()); + } + /** * Initialize a file resource * * @param uri - * the remote URI of the resource acting as its source - * @param file - * the local file resource to initialize. (often in ${jetty.base} directory) - * @param fileRef + * the URI of the resource acting as its source + * @param location * the simple string reference to the output file, suitable for searching - * for the file in other locations (like ${jetty.home} or ${jetty.dir}) - * @return true if local file is initialized (resulted in a change on disk), false if this - * {@link FileInitializer} did nothing. + * for the file in other locations (like ${jetty.home} or ${jetty.dir}) * + * @return true if local file system is modified. * @throws IOException * if there was an attempt to initialize, but an error occurred. */ - public boolean init(URI uri, Path file, String fileRef) throws IOException; + + public abstract boolean create(URI uri, String location) throws IOException; + + public boolean check(URI uri, String location) throws IOException + { + if (location!=null) + { + // Process directly + boolean isDir = location.endsWith("/"); + Path destination = getDestination(uri,location); + + if (FS.exists(destination)) + { + // Validate existence + if (isDir) + { + if (!Files.isDirectory(destination)) + { + throw new IOException("Invalid: path should be a directory (but isn't): " + location); + } + if (!FS.canReadDirectory(destination)) + { + throw new IOException("Unable to read directory: " + location); + } + } + else + { + if (!FS.canReadFile(destination)) + { + throw new IOException("Unable to read file: " + location); + } + } + return true; + } + + StartLog.error("Missing Required File: %s",_basehome.toShortForm(location)); + return false; + } + + return true; + } + + + protected Path getDestination(URI uri, String location) throws IOException + { + if (location==null) + return null; + + Path destination = _basehome.getBasePath(location); + + // now on copy/download paths (be safe above all else) + if (destination!=null && !destination.startsWith(_basehome.getBasePath())) + throw new IOException("For security reasons, Jetty start is unable to process file resource not in ${jetty.base} - " + location); + + boolean isDestDir = Files.isDirectory(destination) || !Files.exists(destination) && location.endsWith("/"); + if (isDestDir && uri!=null && uri.getSchemeSpecificPart().contains("/") && !uri.getSchemeSpecificPart().endsWith("/")) + destination = destination.resolve(uri.getSchemeSpecificPart().substring(uri.getSchemeSpecificPart().lastIndexOf('/')+1)); + + return destination; + } + + + protected void download(URI uri, Path destination) throws IOException + { + if (FS.ensureDirectoryExists(destination.getParent())) + StartLog.log("MKDIR",_basehome.toShortForm(destination.getParent())); + + StartLog.log("DOWNLD","%s to %s",uri,_basehome.toShortForm(destination)); + + HttpURLConnection http = (HttpURLConnection)uri.toURL().openConnection(); + http.setInstanceFollowRedirects(true); + http.setAllowUserInteraction(false); + + int status = http.getResponseCode(); + + if(status != HttpURLConnection.HTTP_OK) + { + throw new IOException("URL GET Failure [" + status + "/" + http.getResponseMessage() + "] on " + uri); + } + + byte[] buf = new byte[8192]; + try (InputStream in = http.getInputStream(); OutputStream out = Files.newOutputStream(destination,StandardOpenOption.CREATE_NEW,StandardOpenOption.WRITE)) + { + while (true) + { + int len = in.read(buf); + + if (len > 0) + { + out.write(buf,0,len); + } + if (len < 0) + { + break; + } + } + } + } + + + /** + * Test if any of the Paths exist (as files) + * + * @param paths + * the list of paths to check + * @return true if the path exist (as a file), false if it doesn't exist + * @throws IOException + * if the path points to a non-file, or is not readable. + */ + protected boolean isFilePresent(Path... paths) throws IOException + { + for (Path file : paths) + { + if (Files.exists(file)) + { + if (Files.isDirectory(file)) + { + throw new IOException("Directory in the way: " + file.toAbsolutePath()); + } + + if (!Files.isReadable(file)) + { + throw new IOException("File not readable: " + file.toAbsolutePath()); + } + + return true; + } + } + + return false; + } + + + public boolean copyDirectory(Path source, Path destination) throws IOException + { + boolean modified=false; + + try(DirectoryStream stream = Files.newDirectoryStream(source)) + { + for (Path from : stream) + { + Path to = destination.resolve(from.getFileName()); + if (Files.isDirectory(from)) + { + if (FS.ensureDirectoryExists(to)) + { + StartLog.log("MKDIR",_basehome.toShortForm(to)); + modified = true; + } + + if (copyDirectory(from,to)) + modified = true; + } + else if (!Files.exists(to)) + { + StartLog.log("COPY ","%s to %s",_basehome.toShortForm(from),_basehome.toShortForm(to)); + Files.copy(from,to); + modified = true; + } + } + } + + return modified; + } } diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java b/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java index 09c7692e959..9f7fc6c62a8 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/Main.java @@ -404,7 +404,7 @@ public class Main BaseBuilder baseBuilder = new BaseBuilder(baseHome,args); if(baseBuilder.build()) StartLog.info("Base directory was modified"); - else if (args.isDownload() || !args.getStartModules().isEmpty()) + else if (args.isCreateFiles() || !args.getStartModules().isEmpty()) StartLog.info("Base directory was not modified"); // Check module dependencies diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/Module.java b/jetty-start/src/main/java/org/eclipse/jetty/start/Module.java index 898d1cd7eb8..73216c31aa8 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/Module.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/Module.java @@ -474,9 +474,9 @@ public class Module implements Comparable } /** - * @param source - * @param transitive - * @return True if the module was not previously enabled + * @param source String describing where the module was enabled from + * @param transitive True if the enable is transitive + * @return true if the module was not previously enabled */ public boolean enable(String source,boolean transitive) { diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java b/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java index 68904ba6107..aa3715c42ab 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/StartArgs.java @@ -163,8 +163,8 @@ public class StartArgs /** Should the server be run? */ private boolean run = true; - /** Download related args */ - private boolean download = false; + /** Files related args */ + private boolean createFiles = false; private boolean licenseCheckRequired = false; private boolean testingMode = false; @@ -620,24 +620,33 @@ public class StartArgs return System.getProperty("main.class",mainclass); } - public Path getMavenLocalRepoDir() + public String getMavenLocalRepoDir() { - // Try property first String localRepo = getProperties().getString("maven.local.repo"); if (Utils.isBlank(localRepo)) - { - // Try jetty specific env variable localRepo = System.getenv("JETTY_MAVEN_LOCAL_REPO"); - } + + if (Utils.isBlank(localRepo)) + localRepo = System.getenv("MAVEN_LOCAL_REPO"); + + return localRepo; + } + + public Path findMavenLocalRepoDir() + { + // Try property first + String localRepo = getMavenLocalRepoDir(); if (Utils.isBlank(localRepo)) { // Try generic env variable - localRepo = System.getenv("MAVEN_LOCAL_REPO"); + String home = System.getenv("HOME"); + Path home_m2_repository = new File(new File(home,".m2"),"repository").toPath(); + if (Files.exists(home_m2_repository)) + localRepo = home_m2_repository.toString(); } - // TODO: load & use $HOME/.m2/settings.xml ? // TODO: possibly use Eclipse Aether to manage it ? // TODO: see https://bugs.eclipse.org/bugs/show_bug.cgi?id=449511 @@ -710,9 +719,9 @@ public class StartArgs return approveAllLicenses; } - public boolean isDownload() + public boolean isCreateFiles() { - return download; + return createFiles; } public boolean isDryRun() @@ -859,14 +868,14 @@ public class StartArgs { addFile(null,Props.getValue(arg)); run = false; - download = true; + createFiles = true; return; } if (arg.equals("--create-files")) { run = false; - download = true; + createFiles = true; licenseCheckRequired = true; return; } @@ -959,7 +968,7 @@ public class StartArgs { createStartd=true; run = false; - download = true; + createFiles = true; licenseCheckRequired = true; return; } @@ -970,7 +979,7 @@ public class StartArgs createStartd=true; startModules.addAll(Props.getValues(arg)); run = false; - download = true; + createFiles = true; licenseCheckRequired = true; return; } @@ -978,7 +987,7 @@ public class StartArgs { startModules.addAll(Props.getValues(arg)); run = false; - download = true; + createFiles = true; licenseCheckRequired = true; return; } diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/BaseHomeFileInitializer.java b/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/BaseHomeFileInitializer.java index 39615a4e2fc..7c0356df638 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/BaseHomeFileInitializer.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/BaseHomeFileInitializer.java @@ -33,33 +33,66 @@ import org.eclipse.jetty.start.StartLog; * "basehome:some/path" * {@link FileInitializer} */ -public class BaseHomeFileInitializer implements FileInitializer -{ - private final BaseHome _basehome; - +public class BaseHomeFileInitializer extends FileInitializer +{ public BaseHomeFileInitializer(BaseHome basehome) { - _basehome=basehome; + super(basehome,"basehome"); } @Override - public boolean init(URI uri, Path file, String fileRef) throws IOException + public boolean create(URI uri, String location) throws IOException { - if (!"basehome".equalsIgnoreCase(uri.getScheme()) || uri.getSchemeSpecificPart().startsWith("/")) - return false; + if (uri.getSchemeSpecificPart().startsWith("/")) + throw new IllegalArgumentException(String.format("Bad file arg: %s",uri)); Path source = _basehome.getPath(uri.getSchemeSpecificPart()); - if (FS.exists(source) && !FS.exists(file)) - { - if (FS.ensureDirectoryExists(file.getParent())) - StartLog.log("MKDIR",_basehome.toShortForm(file.getParent())); - - StartLog.log("COPY ","%s to %s",_basehome.toShortForm(source),_basehome.toShortForm(file)); - Files.copy(source,file); - return true; - } + if (!FS.exists(source)) + throw new IllegalArgumentException(String.format("File does not exist: %s",uri)); - return false; + Path destination = location==null?_basehome.getBasePath():getDestination(uri,location); + + boolean modified=false; + + if (Files.isDirectory(source)) + { + // Check destination + if (destination!=null && Files.exists(destination)) + { + if (!Files.isDirectory(destination)) + { + StartLog.error("Cannot copy directory %s to file %s",source,destination); + return false; + } + } + else if (FS.ensureDirectoryExists(destination)) + { + modified = true; + StartLog.log("MKDIR",_basehome.toShortForm(destination)); + } + + copyDirectory(source,destination); + } + else + { + if (FS.ensureDirectoryExists(destination.getParent())) + { + modified = true; + StartLog.log("MKDIR",_basehome.toShortForm(destination.getParent())); + } + + if (!FS.exists(destination)) + { + StartLog.log("COPY ","%s to %s",_basehome.toShortForm(source),_basehome.toShortForm(destination)); + Files.copy(source,destination); + modified = true; + } + } + + return modified; } + + + } diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/LocalFileInitializer.java b/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/LocalFileInitializer.java new file mode 100644 index 00000000000..bf4bb28681e --- /dev/null +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/LocalFileInitializer.java @@ -0,0 +1,87 @@ +// +// ======================================================================== +// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.start.fileinits; + +import java.io.IOException; +import java.net.URI; +import java.nio.file.Files; +import java.nio.file.Path; + +import org.eclipse.jetty.start.BaseHome; +import org.eclipse.jetty.start.FS; +import org.eclipse.jetty.start.FileInitializer; +import org.eclipse.jetty.start.StartLog; + +public class LocalFileInitializer extends FileInitializer +{ + public LocalFileInitializer(BaseHome basehome) + { + super(basehome); + } + + @Override + public boolean create(URI uri, String location) throws IOException + { + Path destination = getDestination(uri,location); + + if (destination == null) + { + StartLog.error("Bad file arg %s",uri); + return false; + } + + boolean isDir = location.endsWith("/"); + + if (FS.exists(destination)) + { + // Validate existence + if (isDir) + { + if (!Files.isDirectory(destination)) + { + throw new IOException("Invalid: path should be a directory (but isn't): " + location); + } + if (!FS.canReadDirectory(destination)) + { + throw new IOException("Unable to read directory: " + location); + } + } + else + { + if (!FS.canReadFile(destination)) + { + throw new IOException("Unable to read file: " + location); + } + } + + return false; + } + + if (isDir) + { + // Create directory + boolean mkdir = FS.ensureDirectoryExists(destination); + if (mkdir) + StartLog.log("MKDIR",_basehome.toShortForm(destination)); + return mkdir; + } + + throw new IOException("Unable to create "+_basehome.toShortForm(destination)); + } +} diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/MavenLocalRepoFileInitializer.java b/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/MavenLocalRepoFileInitializer.java index 79c22a1c5a5..a74bf43517e 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/MavenLocalRepoFileInitializer.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/MavenLocalRepoFileInitializer.java @@ -25,6 +25,7 @@ import java.nio.file.Path; import org.eclipse.jetty.start.BaseHome; import org.eclipse.jetty.start.FS; +import org.eclipse.jetty.start.FileInitializer; import org.eclipse.jetty.start.StartLog; import org.eclipse.jetty.start.Utils; @@ -46,7 +47,7 @@ import org.eclipse.jetty.start.Utils; *

    optional type and classifier requirement
    * */ -public class MavenLocalRepoFileInitializer extends UriFileInitializer +public class MavenLocalRepoFileInitializer extends FileInitializer { public static class Coordinates { @@ -79,20 +80,22 @@ public class MavenLocalRepoFileInitializer extends UriFileInitializer } private Path localRepositoryDir; + private final boolean readonly; public MavenLocalRepoFileInitializer(BaseHome baseHome) { - this(baseHome,null); + this(baseHome,null,true); } - public MavenLocalRepoFileInitializer(BaseHome baseHome, Path localRepoDir) + public MavenLocalRepoFileInitializer(BaseHome baseHome, Path localRepoDir, boolean readonly) { - super(baseHome); + super(baseHome,"maven"); this.localRepositoryDir = localRepoDir; + this.readonly = readonly; } @Override - public boolean init(URI uri, Path file, String fileRef) throws IOException + public boolean create(URI uri, String location) throws IOException { Coordinates coords = getCoordinates(uri); if (coords == null) @@ -101,26 +104,31 @@ public class MavenLocalRepoFileInitializer extends UriFileInitializer return false; } - if (isFilePresent(file, baseHome.getPath(fileRef))) - { - // All done + Path destination = getDestination(uri,location); + + if (isFilePresent(destination)) return false; - } + // If using local repository if (this.localRepositoryDir != null) { // Grab copy from local repository (download if needed to local // repository) Path localRepoFile = getLocalRepoFile(coords); - StartLog.log("COPY ","%s to %s",localRepoFile,baseHome.toShortForm(file)); - Files.copy(localRepoFile,file); - } - else - { - // normal non-local repo version - download(coords.toCentralURI(),file); + + if (localRepoFile!=null) + { + if (FS.ensureDirectoryExists(destination.getParent())) + StartLog.log("MKDIR",_basehome.toShortForm(destination.getParent())); + StartLog.log("COPY ","%s to %s",localRepoFile,_basehome.toShortForm(destination)); + Files.copy(localRepoFile,destination); + return true; + } } + + // normal non-local repo version + download(coords.toCentralURI(),destination); return true; } @@ -128,13 +136,16 @@ public class MavenLocalRepoFileInitializer extends UriFileInitializer { Path localFile = localRepositoryDir.resolve(coords.toPath()); if (FS.canReadFile(localFile)) - { return localFile; - } // Download, if needed - download(coords.toCentralURI(),localFile); - return localFile; + if (!readonly) + { + download(coords.toCentralURI(),localFile); + return localFile; + } + + return null; } public Coordinates getCoordinates(URI uri) diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/TestFileInitializer.java b/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/TestFileInitializer.java index 9dfaf696f05..afdf4722d5d 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/TestFileInitializer.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/TestFileInitializer.java @@ -22,6 +22,7 @@ import java.io.IOException; import java.net.URI; import java.nio.file.Path; +import org.eclipse.jetty.start.BaseHome; import org.eclipse.jetty.start.FS; import org.eclipse.jetty.start.FileInitializer; import org.eclipse.jetty.start.StartLog; @@ -31,14 +32,33 @@ import org.eclipse.jetty.start.StartLog; * or initialize a file, this implementation is merely a no-op for the * {@link FileInitializer} */ -public class TestFileInitializer implements FileInitializer +public class TestFileInitializer extends FileInitializer { - @Override - public boolean init(URI uri, Path file, String fileRef) throws IOException + public TestFileInitializer(BaseHome basehome) { - FS.ensureDirectoryExists(file.getParent()); + super(basehome); + } - StartLog.log("TESTING MODE","Skipping download of " + uri); + @Override + public boolean isApplicable(URI uri) + { return true; } + + + @Override + public boolean create(URI uri, String location) throws IOException + { + Path destination = getDestination(uri,location); + if (destination!=null) + { + if (location.endsWith("/")) + FS.ensureDirectoryExists(destination); + else + FS.ensureDirectoryExists(destination.getParent()); + } + + StartLog.log("TESTING MODE","Skipping download of " + uri); + return Boolean.TRUE; + } } diff --git a/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/UriFileInitializer.java b/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/UriFileInitializer.java index 8e5814aeed0..b2c979102dc 100644 --- a/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/UriFileInitializer.java +++ b/jetty-start/src/main/java/org/eclipse/jetty/start/fileinits/UriFileInitializer.java @@ -32,119 +32,26 @@ import org.eclipse.jetty.start.FS; import org.eclipse.jetty.start.FileInitializer; import org.eclipse.jetty.start.StartLog; -public class UriFileInitializer implements FileInitializer -{ - private final static String[] SUPPORTED_SCHEMES = { "http", "https" }; - protected final BaseHome baseHome; - +public class UriFileInitializer extends FileInitializer +{ public UriFileInitializer(BaseHome baseHome) { - this.baseHome = baseHome; + super(baseHome,"http", "https"); } @Override - public boolean init(URI uri, Path file, String fileRef) throws IOException + public boolean create(URI uri, String location) throws IOException { - if (!isSupportedScheme(uri)) - { - // Not a supported scheme. + Path destination = getDestination(uri,location); + + if (Files.isDirectory(destination)) + destination = destination.resolve(uri.getSchemeSpecificPart().substring(uri.getRawSchemeSpecificPart().lastIndexOf('/')+1)); + + if(isFilePresent(destination)) return false; - } - if(isFilePresent(file, baseHome.getPath(fileRef))) - { - // All done - return false; - } - - download(uri,file); + download(uri,destination); return true; } - - protected void download(URI uri, Path file) throws IOException - { - StartLog.log("DOWNLOAD","%s to %s",uri,baseHome.toShortForm(file)); - - if (FS.ensureDirectoryExists(file.getParent())) - StartLog.log("MKDIR",baseHome.toShortForm(file.getParent())); - - HttpURLConnection http = (HttpURLConnection)uri.toURL().openConnection(); - http.setInstanceFollowRedirects(true); - http.setAllowUserInteraction(false); - - int status = http.getResponseCode(); - - if(status != HttpURLConnection.HTTP_OK) - { - throw new IOException("URL GET Failure [" + status + "/" + http.getResponseMessage() + "] on " + uri); - } - - byte[] buf = new byte[8192]; - try (InputStream in = http.getInputStream(); OutputStream out = Files.newOutputStream(file,StandardOpenOption.CREATE_NEW,StandardOpenOption.WRITE)) - { - while (true) - { - int len = in.read(buf); - - if (len > 0) - { - out.write(buf,0,len); - } - if (len < 0) - { - break; - } - } - } - } - - /** - * Test if any of the Paths exist (as files) - * - * @param paths - * the list of paths to check - * @return true if the path exist (as a file), false if it doesn't exist - * @throws IOException - * if the path points to a non-file, or is not readable. - */ - protected boolean isFilePresent(Path... paths) throws IOException - { - for (Path file : paths) - { - if (Files.exists(file)) - { - if (Files.isDirectory(file)) - { - throw new IOException("Directory in the way: " + file.toAbsolutePath()); - } - - if (!Files.isReadable(file)) - { - throw new IOException("File not readable: " + file.toAbsolutePath()); - } - - return true; - } - } - - return false; - } - - private boolean isSupportedScheme(URI uri) - { - String scheme = uri.getScheme(); - if (scheme == null) - { - return false; - } - for (String supported : SUPPORTED_SCHEMES) - { - if (supported.equalsIgnoreCase(scheme)) - { - return true; - } - } - return false; - } } diff --git a/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_111.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_111.mod new file mode 100644 index 00000000000..eebd2a92550 --- /dev/null +++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_111.mod @@ -0,0 +1,5 @@ +[files] +http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/8.1.9.v20160720/alpn-boot-8.1.9.v20160720.jar|lib/alpn/alpn-boot-8.1.9.v20160720.jar + +[exec] +-Xbootclasspath/p:lib/alpn/alpn-boot-8.1.9.v20160720.jar diff --git a/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_112.mod b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_112.mod new file mode 100644 index 00000000000..3887113d09b --- /dev/null +++ b/jetty-start/src/test/resources/dist-home/modules/alpn-impl/alpn-1.8.0_112.mod @@ -0,0 +1,5 @@ +[files] +http://central.maven.org/maven2/org/mortbay/jetty/alpn/alpn-boot/8.1.10.v20161026/alpn-boot-8.1.10.v20161026.jar|lib/alpn/alpn-boot-8.1.10.v20161026.jar + +[exec] +-Xbootclasspath/p:lib/alpn/alpn-boot-8.1.10.v20161026.jar diff --git a/jetty-start/src/test/resources/usecases/barebones.alreadyEnabled.assert.txt b/jetty-start/src/test/resources/usecases/barebones.alreadyEnabled.assert.txt index a122fc3419d..450ae4f3cef 100644 --- a/jetty-start/src/test/resources/usecases/barebones.alreadyEnabled.assert.txt +++ b/jetty-start/src/test/resources/usecases/barebones.alreadyEnabled.assert.txt @@ -14,4 +14,4 @@ PROP|main.prop=value0 EXISTS|maindir/ EXISTS|start.ini -OUTPUT|INFO : main already enabled by \[\$\{jetty.base}/start.ini] +OUTPUT|INFO : main already enabled by \[\$\{jetty.base}[\\/]start.ini\] diff --git a/jetty-start/src/test/resources/usecases/basehome.withfiles.assert.txt b/jetty-start/src/test/resources/usecases/basehome.withfiles.assert.txt new file mode 100644 index 00000000000..54f679f6208 --- /dev/null +++ b/jetty-start/src/test/resources/usecases/basehome.withfiles.assert.txt @@ -0,0 +1,15 @@ + +DOWNLOAD|basehome:modules/withfiles/test.txt|one/renamed.txt +DOWNLOAD|basehome:modules/withfiles/test.txt|two/ +DOWNLOAD|basehome:modules/withfiles/test.txt|three +DOWNLOAD|basehome:modules/withfiles|null +DOWNLOAD|basehome:modules/withfiles/four/|five/ +DOWNLOAD|basehome:modules/withfiles/four/sub|six + +EXISTS|test.txt +EXISTS|one/renamed.txt +EXISTS|two/test.txt +EXISTS|three/test.txt +EXISTS|four/sub/dir/test.txt +EXISTS|five/sub/dir/test.txt +EXISTS|six/sub/dir/test.txt \ No newline at end of file diff --git a/jetty-start/src/test/resources/usecases/basehome.withfiles.prepare.txt b/jetty-start/src/test/resources/usecases/basehome.withfiles.prepare.txt new file mode 100644 index 00000000000..e6527ad8759 --- /dev/null +++ b/jetty-start/src/test/resources/usecases/basehome.withfiles.prepare.txt @@ -0,0 +1,2 @@ +--create-startd +--add-to-start=withfiles \ No newline at end of file diff --git a/jetty-start/src/test/resources/usecases/basehome/modules/withfiles.mod b/jetty-start/src/test/resources/usecases/basehome/modules/withfiles.mod new file mode 100644 index 00000000000..0dc7d6eed54 --- /dev/null +++ b/jetty-start/src/test/resources/usecases/basehome/modules/withfiles.mod @@ -0,0 +1,12 @@ + +[files] + +basehome:modules/withfiles/test.txt|one/renamed.txt +basehome:modules/withfiles/test.txt|two/ +three/ +basehome:modules/withfiles/test.txt|three + +basehome:modules/withfiles +basehome:modules/withfiles/four/|five/ +six/ +basehome:modules/withfiles/four/sub|six diff --git a/jetty-start/src/test/resources/usecases/basehome/modules/withfiles/four/sub/dir/test.txt b/jetty-start/src/test/resources/usecases/basehome/modules/withfiles/four/sub/dir/test.txt new file mode 100644 index 00000000000..6f8178886be --- /dev/null +++ b/jetty-start/src/test/resources/usecases/basehome/modules/withfiles/four/sub/dir/test.txt @@ -0,0 +1 @@ +sub/dir/test.txt diff --git a/jetty-start/src/test/resources/usecases/basehome/modules/withfiles/four/test.txt b/jetty-start/src/test/resources/usecases/basehome/modules/withfiles/four/test.txt new file mode 100644 index 00000000000..4871fd52755 --- /dev/null +++ b/jetty-start/src/test/resources/usecases/basehome/modules/withfiles/four/test.txt @@ -0,0 +1 @@ +test.txt diff --git a/jetty-start/src/test/resources/usecases/basehome/modules/withfiles/test.txt b/jetty-start/src/test/resources/usecases/basehome/modules/withfiles/test.txt new file mode 100644 index 00000000000..541cb64f9b8 --- /dev/null +++ b/jetty-start/src/test/resources/usecases/basehome/modules/withfiles/test.txt @@ -0,0 +1 @@ +test.txt \ No newline at end of file diff --git a/jetty-start/src/test/resources/usecases/empty.addToStartCreateStartd.assert.txt b/jetty-start/src/test/resources/usecases/empty.addToStartCreateStartd.assert.txt index 1f52c89edba..1919711ff0d 100644 --- a/jetty-start/src/test/resources/usecases/empty.addToStartCreateStartd.assert.txt +++ b/jetty-start/src/test/resources/usecases/empty.addToStartCreateStartd.assert.txt @@ -23,4 +23,4 @@ EXISTS|start.d/extra.ini EXISTS|start.d/optional.ini # Output Assertions [regex!] (order is irrelevant) -OUTPUT|MKDIR : \$\{jetty.base\}/maindir \ No newline at end of file +OUTPUT|MKDIR : \$\{jetty.base\}[\\/]maindir diff --git a/jetty-unixsocket/src/test/java/org/eclipse/jetty/unixsocket/UnixSocketServer.java b/jetty-unixsocket/src/test/java/org/eclipse/jetty/unixsocket/UnixSocketServer.java index 32482cef377..8f62a69fe89 100644 --- a/jetty-unixsocket/src/test/java/org/eclipse/jetty/unixsocket/UnixSocketServer.java +++ b/jetty-unixsocket/src/test/java/org/eclipse/jetty/unixsocket/UnixSocketServer.java @@ -41,12 +41,11 @@ public class UnixSocketServer UnixSocketConnector connector = new UnixSocketConnector(server,proxy,http); server.addConnector(connector); - server.setHandler(new AbstractHandler() + server.setHandler(new AbstractHandler.ErrorDispatchHandler() { - @Override - protected void doHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) - throws IOException, ServletException + protected void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) + throws IOException, ServletException { baseRequest.setHandled(true); response.setStatus(200); diff --git a/jetty-util/src/main/config/modules/jcl/commons-logging.properties b/jetty-util/src/main/config/modules/jcl/commons-logging.properties deleted file mode 100644 index 8cc45de2c72..00000000000 --- a/jetty-util/src/main/config/modules/jcl/commons-logging.properties +++ /dev/null @@ -1 +0,0 @@ -org.apache.commons.logging.Log=org.apache.commons.logging.impl.SimpleLog diff --git a/jetty-util/src/main/config/modules/jul-impl.mod b/jetty-util/src/main/config/modules/jul-impl.mod index bcb61de4b5c..33beabdab4e 100644 --- a/jetty-util/src/main/config/modules/jul-impl.mod +++ b/jetty-util/src/main/config/modules/jul-impl.mod @@ -6,16 +6,12 @@ logging jul internal -[depends] -resources - [provides] jul-api jul-impl [files] -basehome:modules/jul-impl/java-util-logging.properties|etc/java-util-logging.properties -logs/ +basehome:modules/jul-impl [exec] -Djava.util.logging.config.file=etc/java-util-logging.properties diff --git a/jetty-util/src/main/config/modules/jul-impl/java-util-logging.properties b/jetty-util/src/main/config/modules/jul-impl/etc/java-util-logging.properties similarity index 100% rename from jetty-util/src/main/config/modules/jul-impl/java-util-logging.properties rename to jetty-util/src/main/config/modules/jul-impl/etc/java-util-logging.properties diff --git a/jetty-util/src/main/config/modules/jul-slf4j.mod b/jetty-util/src/main/config/modules/jul-slf4j.mod index 08a4486c0dd..81bb2330c3d 100644 --- a/jetty-util/src/main/config/modules/jul-slf4j.mod +++ b/jetty-util/src/main/config/modules/jul-slf4j.mod @@ -11,12 +11,13 @@ slf4j-api slf4j-impl [provides] +jul-api jul-impl slf4j+jul [files] maven://org.slf4j/jul-to-slf4j/${slf4j.version}|lib/slf4j/jul-to-slf4j-${slf4j.version}.jar -basehome:modules/jul-slf4j/java-util-logging.properties|etc/java-util-logging.properties +basehome:modules/jul-slf4j [lib] lib/slf4j/jul-to-slf4j-${slf4j.version}.jar diff --git a/jetty-util/src/main/config/modules/jul-slf4j/java-util-logging.properties b/jetty-util/src/main/config/modules/jul-slf4j/etc/java-util-logging.properties similarity index 100% rename from jetty-util/src/main/config/modules/jul-slf4j/java-util-logging.properties rename to jetty-util/src/main/config/modules/jul-slf4j/etc/java-util-logging.properties diff --git a/jetty-util/src/main/config/modules/log4j-impl.mod b/jetty-util/src/main/config/modules/log4j-impl.mod index 3d5ee8bbc20..da0b1e20763 100644 --- a/jetty-util/src/main/config/modules/log4j-impl.mod +++ b/jetty-util/src/main/config/modules/log4j-impl.mod @@ -15,9 +15,8 @@ log4j-api log4j-impl [files] -basehome:modules/log4j/log4j.xml|resources/log4j.xml maven://log4j/log4j/${log4j.version}|lib/log4j/log4j-${log4j.version}.jar -logs/ +basehome:modules/log4j-impl [lib] lib/log4j/log4j-${log4j.version}.jar diff --git a/jetty-util/src/main/config/modules/log4j/log4j.xml b/jetty-util/src/main/config/modules/log4j-impl/resources/log4j.xml similarity index 100% rename from jetty-util/src/main/config/modules/log4j/log4j.xml rename to jetty-util/src/main/config/modules/log4j-impl/resources/log4j.xml diff --git a/jetty-util/src/main/config/modules/log4j2-impl.mod b/jetty-util/src/main/config/modules/log4j2-impl.mod index ab34b0f36b9..e069ecd62b1 100644 --- a/jetty-util/src/main/config/modules/log4j2-impl.mod +++ b/jetty-util/src/main/config/modules/log4j2-impl.mod @@ -17,8 +17,7 @@ log4j2-impl [files] maven://org.apache.logging.log4j/log4j-core/${log4j2.version}|lib/log4j2/log4j-core-${log4j2.version}.jar -basehome:modules/log4j2/log4j2.xml|resources/log4j2.xml -logs/ +basehome:modules/log4j2-impl [lib] lib/log4j2/*.jar diff --git a/jetty-util/src/main/config/modules/log4j2/log4j2.xml b/jetty-util/src/main/config/modules/log4j2-impl/resources/log4j2.xml similarity index 87% rename from jetty-util/src/main/config/modules/log4j2/log4j2.xml rename to jetty-util/src/main/config/modules/log4j2-impl/resources/log4j2.xml index bc05dad0a6b..9fa555d3d68 100644 --- a/jetty-util/src/main/config/modules/log4j2/log4j2.xml +++ b/jetty-util/src/main/config/modules/log4j2-impl/resources/log4j2.xml @@ -11,7 +11,9 @@ - + + %d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n + undefined @@ -150,6 +150,27 @@ org.jacoco jacoco-maven-plugin 0.7.7.201606060606 + + + + **/org/eclipse/jetty/ant/** + **/org/eclipse/jetty/maven/** + **/org/eclipse/jetty/jspc/** + + **/org/eclipse/jetty/embedded/** + **/org/eclipse/jetty/asyncrest/** + **/org/eclipse/jetty/demo/** + + **/org/eclipse/jetty/gcloud/** + **/org/eclipse/jetty/infinispan/** + **/org/eclipse/jetty/osgi/** + **/org/eclipse/jetty/spring/** + **/org/eclipse/jetty/http/spi/** + + **/org/eclipse/jetty/tests/** + **/org/eclipse/jetty/test/** + + jacoco-initialize @@ -164,6 +185,16 @@ report + + + + **/org/eclipse/jetty/** + + @@ -1405,6 +1436,30 @@ 8.1.9.v20160720 + + 8u111 + + + java.version + 1.8.0_111 + + + + 8.1.9.v20160720 + + + + 8u112 + + + java.version + 1.8.0_112 + + + + 8.1.10.v20161026 + + diff --git a/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/AsyncIOServletTest.java b/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/AsyncIOServletTest.java index 1110eac8f64..393f4197ac4 100644 --- a/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/AsyncIOServletTest.java +++ b/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/AsyncIOServletTest.java @@ -471,6 +471,112 @@ public class AsyncIOServletTest extends AbstractTest assertTrue(clientLatch.await(5, TimeUnit.SECONDS)); } + @Test + public void testAsyncWriteLessThanContentLengthFlushed() throws Exception + { + CountDownLatch complete = new CountDownLatch(1); + start(new HttpServlet() + { + @Override + protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException + { + response.setContentLength(10); + + AsyncContext async = request.startAsync(); + ServletOutputStream out = response.getOutputStream(); + AtomicInteger state = new AtomicInteger(0); + + out.setWriteListener(new WriteListener() + { + @Override + public void onWritePossible() throws IOException + { + while(true) + { + if (!out.isReady()) + return; + + switch(state.get()) + { + case 0: + state.incrementAndGet(); + WriteListener listener = this; + new Thread(()-> + { + try + { + Thread.sleep(50); + listener.onWritePossible(); + } + catch(Exception e) + {} + }).start(); + return; + + case 1: + state.incrementAndGet(); + out.flush(); + break; + + case 2: + state.incrementAndGet(); + out.write("12345".getBytes()); + break; + + case 3: + async.complete(); + complete.countDown(); + return; + } + } + } + + @Override + public void onError(Throwable t) + { + } + }); + } + }); + + AtomicBoolean failed = new AtomicBoolean(false); + CountDownLatch clientLatch = new CountDownLatch(3); + client.newRequest(newURI()) + .path(servletPath) + .onResponseHeaders(response -> + { + if (response.getStatus() == HttpStatus.OK_200) + clientLatch.countDown(); + }) + .onResponseContent(new Response.ContentListener() + { + @Override + public void onContent(Response response, ByteBuffer content) + { + // System.err.println("Content: "+BufferUtil.toDetailString(content)); + } + }) + .onResponseFailure(new Response.FailureListener() + { + @Override + public void onFailure(Response response, Throwable failure) + { + clientLatch.countDown(); + } + }) + .send(result -> + { + failed.set(result.isFailed()); + clientLatch.countDown(); + clientLatch.countDown(); + clientLatch.countDown(); + }); + + assertTrue(complete.await(10, TimeUnit.SECONDS)); + assertTrue(clientLatch.await(10, TimeUnit.SECONDS)); + assertTrue(failed.get()); + } + @Test public void testIsReadyAtEOF() throws Exception { @@ -895,6 +1001,7 @@ public class AsyncIOServletTest extends AbstractTest @Override public void onAllDataRead() throws IOException { + asyncContext.complete(); } @Override @@ -979,7 +1086,7 @@ public class AsyncIOServletTest extends AbstractTest while (input.isReady() && !input.isFinished()) { int read = input.read(); - System.err.printf("%x%n", read); + // System.err.printf("%x%n", read); readLatch.countDown(); } } diff --git a/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/ServerTimeoutsTest.java b/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/ServerTimeoutsTest.java index eaa4b74bd86..92fbc2aed88 100644 --- a/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/ServerTimeoutsTest.java +++ b/tests/test-http-client-transport/src/test/java/org/eclipse/jetty/http/client/ServerTimeoutsTest.java @@ -495,10 +495,10 @@ public class ServerTimeoutsTest extends AbstractTest int bytesPerSecond = 20; httpConfig.setMinRequestDataRate(bytesPerSecond); CountDownLatch handlerLatch = new CountDownLatch(1); - start(new AbstractHandler() + start(new AbstractHandler.ErrorDispatchHandler() { @Override - public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException + public void doNonErrorHandle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { try { @@ -517,6 +517,7 @@ public class ServerTimeoutsTest extends AbstractTest throw x; } } + }); DeferredContentProvider contentProvider = new DeferredContentProvider(); diff --git a/tests/test-quickstart/src/test/java/org/eclipse/jetty/quickstart/AttributeNormalizerPathTest.java b/tests/test-quickstart/src/test/java/org/eclipse/jetty/quickstart/AttributeNormalizerPathTest.java deleted file mode 100644 index 6b838272e27..00000000000 --- a/tests/test-quickstart/src/test/java/org/eclipse/jetty/quickstart/AttributeNormalizerPathTest.java +++ /dev/null @@ -1,242 +0,0 @@ - // -// ======================================================================== -// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd. -// ------------------------------------------------------------------------ -// All rights reserved. This program and the accompanying materials -// are made available under the terms of the Eclipse Public License v1.0 -// and Apache License v2.0 which accompanies this distribution. -// -// The Eclipse Public License is available at -// http://www.eclipse.org/legal/epl-v10.html -// -// The Apache License v2.0 is available at -// http://www.opensource.org/licenses/apache2.0.php -// -// You may elect to redistribute this code under either of these licenses. -// ======================================================================== -// - -package org.eclipse.jetty.quickstart; - -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; -import java.nio.file.FileSystems; -import java.nio.file.Files; -import java.nio.file.Path; -import java.util.Arrays; -import java.util.List; - -import org.eclipse.jetty.util.resource.Resource; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameters; - -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; - -@RunWith(Parameterized.class) -public class AttributeNormalizerPathTest -{ - @Parameters(name="{0} = {1}") - public static List data() - { - String[][] tests = { - // Can't test 'WAR' property, as its not a Path (which this testcase works with) - // { "WAR", toSystemPath("http://localhost/resources/webapps/root") }, - { "jetty.home", toSystemPath("/opt/jetty-distro") }, - { "jetty.base", toSystemPath("/opt/jetty-distro/demo.base") }, - { "user.home", toSystemPath("/home/user") }, - { "user.dir", toSystemPath("/etc/init.d") }, - }; - - return Arrays.asList(tests); - } - - /** - * As the declared paths in this testcase might be actual paths on the system - * running these tests, the expected paths should be cleaned up to represent - * the actual system paths. - *

    - * Eg: on fedora /etc/init.d is a symlink to /etc/rc.d/init.d - */ - public static String toSystemPath(String rawpath) - { - Path path = FileSystems.getDefault().getPath(rawpath); - if (Files.exists(path)) - { - // It exists, resolve it to the real path - try - { - path = path.toRealPath(); - } - catch (IOException e) - { - // something prevented us from resolving to real path, fallback to - // absolute path resolution (not as accurate) - path = path.toAbsolutePath(); - e.printStackTrace(); - } - } - else - { - // File doesn't exist, resolve to absolute path - // We can't rely on File.toCanonicalPath() here - path = path.toAbsolutePath(); - } - return path.toString(); - } - - private static String origJettyBase; - private static String origJettyHome; - private static String origUserHome; - private static String origUserDir; - - @BeforeClass - public static void initProperties() - { - origJettyBase = System.getProperty("jetty.base"); - origJettyHome = System.getProperty("jetty.home"); - origUserHome = System.getProperty("user.home"); - origUserDir = System.getProperty("user.dir"); - - System.setProperty("jetty.home","/opt/jetty-distro"); - System.setProperty("jetty.base","/opt/jetty-distro/demo.base"); - System.setProperty("user.home","/home/user"); - System.setProperty("user.dir","/etc/init.d"); - } - - @AfterClass - public static void restoreProperties() - { - if(origJettyBase != null) System.setProperty("jetty.base",origJettyBase); - if(origJettyHome != null) System.setProperty("jetty.home",origJettyHome); - if(origUserHome != null) System.setProperty("user.home",origUserHome); - if(origUserDir != null) System.setProperty("user.dir",origUserDir); - } - - public String key; - public String path; - - private AttributeNormalizer normalizer; - - public AttributeNormalizerPathTest(String key, String path) throws MalformedURLException, IOException - { - this.key = key; - this.path = AttributeNormalizer.uriSeparators(path); - this.normalizer = new AttributeNormalizer(Resource.newResource("/opt/jetty-distro/demo.base/webapps/root")); - } - - @Test - public void testEqual() - { - assertThat(normalizer.normalize("file:" + path), is("file:${" + key + "}")); - } - - @Test - public void testEqualsSlash() - { - assertThat(normalizer.normalize("file:" + path + "/"), is("file:${" + key + "}")); - } - - @Test - public void testEqualsSlashFile() - { - assertThat(normalizer.normalize("file:" + path + "/file"), is("file:${" + key + "}/file")); - } - - @Test - public void testURIEquals() throws URISyntaxException - { - assertThat(normalizer.normalize(new URI("file:" + path)), is("file:${" + key + "}")); - } - - @Test - public void testURIEqualsSlash() throws URISyntaxException - { - assertThat(normalizer.normalize(new URI("file:" + path + "/")), is("file:${" + key + "}")); - } - - @Test - public void testURIEqualsSlashFile() throws URISyntaxException - { - assertThat(normalizer.normalize(new URI("file:" + path + "/file")), is("file:${" + key + "}/file")); - } - - @Test - public void testURLEquals() throws MalformedURLException - { - assertThat(normalizer.normalize(new URL("file:" + path)), is("file:${" + key + "}")); - } - - @Test - public void testURLEqualsSlash() throws MalformedURLException - { - assertThat(normalizer.normalize(new URL("file:" + path + "/")), is("file:${" + key + "}")); - } - - @Test - public void testURLEqualsSlashFile() throws MalformedURLException - { - assertThat(normalizer.normalize(new URL("file:" + path + "/file")), is("file:${" + key + "}/file")); - } - - @Test - public void testJarFileEquals_BangFile() - { - assertThat(normalizer.normalize("jar:file:" + path + "!/file"), is("jar:file:${" + key + "}!/file")); - } - - @Test - public void testJarFileEquals_SlashBangFile() - { - assertThat(normalizer.normalize("jar:file:" + path + "/!/file"), is("jar:file:${" + key + "}!/file")); - } - - @Test - public void testJarFileEquals_FileBangFile() - { - assertThat(normalizer.normalize("jar:file:" + path + "/file!/file"), is("jar:file:${" + key + "}/file!/file")); - } - - @Test - public void testJarFileEquals_URIBangFile() throws URISyntaxException - { - assertThat(normalizer.normalize(new URI("jar:file:" + path + "!/file")), is("jar:file:${" + key + "}!/file")); - } - - @Test - public void testJarFileEquals_URISlashBangFile() throws URISyntaxException - { - assertThat(normalizer.normalize(new URI("jar:file:" + path + "/!/file")), is("jar:file:${" + key + "}!/file")); - } - - @Test - public void testJarFileEquals_URIFileBangFile() throws URISyntaxException - { - assertThat(normalizer.normalize(new URI("jar:file:" + path + "/file!/file")), is("jar:file:${" + key + "}/file!/file")); - } - - @Test - public void testJarFileEquals_URLBangFile() throws MalformedURLException - { - assertThat(normalizer.normalize(new URL("jar:file:" + path + "!/file")), is("jar:file:${" + key + "}!/file")); - } - - @Test - public void testJarFileEquals_URLSlashBangFile() throws MalformedURLException - { - assertThat(normalizer.normalize(new URL("jar:file:" + path + "/!/file")), is("jar:file:${" + key + "}!/file")); - } - - @Test - public void testJarFileEquals_URLFileBangFile() throws MalformedURLException - { - assertThat(normalizer.normalize(new URL("jar:file:" + path + "/file!/file")), is("jar:file:${" + key + "}/file!/file")); - } -} diff --git a/tests/test-quickstart/src/test/java/org/eclipse/jetty/quickstart/AttributeNormalizerTest.java b/tests/test-quickstart/src/test/java/org/eclipse/jetty/quickstart/AttributeNormalizerTest.java index 575d972e011..e5c6a3e9890 100644 --- a/tests/test-quickstart/src/test/java/org/eclipse/jetty/quickstart/AttributeNormalizerTest.java +++ b/tests/test-quickstart/src/test/java/org/eclipse/jetty/quickstart/AttributeNormalizerTest.java @@ -18,54 +18,241 @@ package org.eclipse.jetty.quickstart; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URI; - -import org.eclipse.jetty.util.resource.Resource; -import org.junit.Test; - -import static org.hamcrest.Matchers.anyOf; -import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.not; import static org.junit.Assert.assertThat; +import java.io.File; +import java.io.IOException; +import java.net.URI; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.eclipse.jetty.toolchain.test.FS; +import org.eclipse.jetty.toolchain.test.MavenTestingUtils; +import org.eclipse.jetty.toolchain.test.OS; +import org.eclipse.jetty.util.resource.Resource; +import org.junit.After; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; + +@RunWith(Parameterized.class) public class AttributeNormalizerTest { - @Test - public void testNormalizeWAR() throws MalformedURLException, IOException + @Parameterized.Parameters(name = "[{index}] {0} - {1}") + public static List data() { - String webref = "http://localhost/resource/webapps/root"; - Resource webresource = Resource.newResource(webref); - AttributeNormalizer normalizer = new AttributeNormalizer(webresource); - String result = null; - - result = normalizer.normalize(URI.create(webref)); - assertThat(result, is("${WAR}")); - - result = normalizer.normalize(URI.create(webref + "/deep/ref")); - assertThat(result, is("${WAR}/deep/ref")); + List data = new ArrayList<>(); + + String arch = String.format("%s/%s", System.getProperty("os.name"), System.getProperty("os.arch")); + + String title; + Map env; + + // ------ + title = "Typical Setup"; + + env = new HashMap<>(); + env.put("jetty.home", asTargetPath(title,"jetty-distro")); + env.put("jetty.base", asTargetPath(title,"jetty-distro/demo.base")); + env.put("WAR", asTargetPath(title,"jetty-distro/demo.base/webapps/FOO")); + + data.add(new Object[]{arch, title, env}); + + // ------ + // This puts the jetty.home inside of the jetty.base + title = "Overlap Setup"; + env = new HashMap<>(); + env.put("jetty.home", asTargetPath(title,"app/dist")); + env.put("jetty.base", asTargetPath(title,"app")); + env.put("WAR", asTargetPath(title,"app/webapps/FOO")); + + data.add(new Object[]{arch, title, env}); + + // ------ + // This tests a path scenario often seen on various automatic deployments tooling + // such as Kubernetes, CircleCI, TravisCI, and Jenkins. + title = "Nasty Path Setup"; + env = new HashMap<>(); + env.put("jetty.home", asTargetPath(title,"app%2Fnasty/dist")); + env.put("jetty.base", asTargetPath(title,"app%2Fnasty/base")); + env.put("WAR", asTargetPath(title,"app%2Fnasty/base/webapps/FOO")); + + data.add(new Object[]{arch, title, env}); + return data; } - - @Test - public void testWindowsTLD() throws MalformedURLException, IOException + + private static final String asTargetPath(String title, String subpath) { - // Setup AttributeNormalizer - String webref = "http://localhost/resource/webapps/root"; - Resource webresource = Resource.newResource(webref); - AttributeNormalizer normalizer = new AttributeNormalizer(webresource); - - // Setup example from windows - String javaUserHome = System.getProperty("user.home"); - String realUserHome = AttributeNormalizerPathTest.toSystemPath(javaUserHome); - String userHome = AttributeNormalizer.uriSeparators(realUserHome); - String path = "jar:file:" + userHome + "/.m2/repository/something/somejar.jar!/META-INF/some.tld"; - - String result = normalizer.normalize(path); - assertThat(result, is("jar:file:${user.home}/.m2/repository/something/somejar.jar!/META-INF/some.tld")); - - String expanded = normalizer.expand(result); - assertThat(expanded, not(anyOf(containsString("\\"), containsString("${")))); + Path rootPath = MavenTestingUtils.getTargetTestingPath(title); + FS.ensureDirExists(rootPath); + Path path = rootPath.resolve(OS.separators(subpath)); + FS.ensureDirExists(path); + + return path.toString(); + } + + private Map oldValues = new HashMap<>(); + private final String jettyHome; + private final String jettyBase; + private final String war; + private final String arch; + private final String title; + private final Map env; + private final AttributeNormalizer normalizer; + + public AttributeNormalizerTest(String arch, String title, Map env) throws IOException + { + this.arch = arch; + this.title = title; + this.env = env; + + // Remember old values + env.keySet().stream().forEach((key) -> + { + String old = System.getProperty(key); + oldValues.put(key, old); + }); + + // Grab specific values of interest in general + jettyHome = env.get("jetty.home"); + jettyBase = env.get("jetty.base"); + war = env.get("WAR"); + + // Set environment (skipping null and WAR) + env.entrySet().stream() + .filter((e) -> e.getValue() != null && !e.getKey().equalsIgnoreCase("WAR")) + .forEach((entry) -> System.setProperty(entry.getKey(), entry.getValue())); + + // Setup normalizer + Resource webresource = Resource.newResource(war); + this.normalizer = new AttributeNormalizer(webresource); + } + + @After + public void restoreEnv() + { + // Restore old values + oldValues.entrySet().stream().forEach((entry) -> + EnvUtils.restoreSystemProperty(entry.getKey(), entry.getValue()) + ); + } + + private void assertNormalize(Object o, String expected) + { + String result = normalizer.normalize(o); + assertThat("normalize((" + o.getClass().getSimpleName() + ") " + o.toString() + ")", + result, is(expected)); + } + + private void assertExpandPath(String line, String expected) + { + String result = normalizer.expand(line); + + // Treat output as strings + assertThat("expand('" + line + "')", result, is(expected)); + } + + private void assertExpandURI(String line, URI expected) + { + String result = normalizer.expand(line); + + URI resultURI = URI.create(result); + assertThat("expand('" + line + "')", resultURI.getScheme(), is(expected.getScheme())); + assertThat("expand('" + line + "')", resultURI.getPath(), is(expected.getPath())); + } + + @Test + public void testNormalizeWarAsString() + { + // Normalize WAR as String path + assertNormalize(war, war); // only URL, File, URI are supported + } + + @Test + public void testNormalizeJettyBaseAsFile() + { + // Normalize jetty.base as File path + assertNormalize(new File(jettyBase), "${jetty.base}"); + } + + @Test + public void testNormalizeJettyHomeAsFile() + { + // Normalize jetty.home as File path + assertNormalize(new File(jettyHome), "${jetty.home}"); + } + + @Test + public void testNormalizeJettyBaseAsURI() + { + // Normalize jetty.base as URI path + assertNormalize(new File(jettyBase).toURI(), "${jetty.base.uri}"); + } + + @Test + public void testNormalizeJettyHomeAsURI() + { + // Normalize jetty.home as URI path + assertNormalize(new File(jettyHome).toURI(), "${jetty.home.uri}"); + } + + @Test + public void testExpandJettyBase() + { + // Expand jetty.base + assertExpandPath("${jetty.base}", jettyBase); + } + + @Test + public void testExpandJettyHome() + { + // Expand jetty.home + assertExpandPath("${jetty.home}", jettyHome); + } + + @Test + public void testNormalizeWarAsURI() + { + // Normalize WAR as URI + URI testWarURI = new File(war).toURI(); + assertNormalize(testWarURI, "${WAR.uri}"); + } + + @Test + public void testNormalizeWarDeepAsFile() + { + // Normalize WAR deep path as File + File testWarDeep = new File(new File(war), OS.separators("deep/ref")).getAbsoluteFile(); + assertNormalize(testWarDeep, "${WAR.path}/deep/ref"); + } + + @Test + public void testNormalizeWarDeepAsString() + { + // Normalize WAR deep path as String + File testWarDeep = new File(new File(war), OS.separators("deep/ref")).getAbsoluteFile(); + assertNormalize(testWarDeep.toString(), testWarDeep.toString()); + } + + @Test + public void testNormalizeWarDeepAsURI() + { + // Normalize WAR deep path as URI + File testWarDeep = new File(new File(war), OS.separators("deep/ref")).getAbsoluteFile(); + assertNormalize(testWarDeep.toURI(), "${WAR.uri}/deep/ref"); + } + + @Test + public void testExpandWarDeep() + { + // Expand WAR deep path + File testWarDeep = new File(new File(war), OS.separators("deep/ref")); + URI uri = URI.create("jar:" + testWarDeep.toURI().toASCIIString() + "!/other/file"); + assertExpandURI("jar:${WAR.uri}/deep/ref!/other/file", uri); } } + diff --git a/tests/test-quickstart/src/test/java/org/eclipse/jetty/quickstart/EnvUtils.java b/tests/test-quickstart/src/test/java/org/eclipse/jetty/quickstart/EnvUtils.java new file mode 100644 index 00000000000..7bc51932756 --- /dev/null +++ b/tests/test-quickstart/src/test/java/org/eclipse/jetty/quickstart/EnvUtils.java @@ -0,0 +1,76 @@ +// +// ======================================================================== +// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + +package org.eclipse.jetty.quickstart; + +import java.io.IOException; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; + +/** + * Common utility methods for quickstart tests + */ +public class EnvUtils +{ + /** + * As the declared paths in this testcase might be actual paths on the system + * running these tests, the expected paths should be cleaned up to represent + * the actual system paths. + *

    + * Eg: on fedora /etc/init.d is a symlink to /etc/rc.d/init.d + */ + public static String toSystemPath(String rawpath) + { + Path path = FileSystems.getDefault().getPath(rawpath); + if (Files.exists(path)) + { + // It exists, resolve it to the real path + try + { + path = path.toRealPath(); + } + catch (IOException e) + { + // something prevented us from resolving to real path, fallback to + // absolute path resolution (not as accurate) + path = path.toAbsolutePath(); + e.printStackTrace(); + } + } + else + { + // File doesn't exist, resolve to absolute path + // We can't rely on File.toCanonicalPath() here + path = path.toAbsolutePath(); + } + return path.toString(); + } + + public static void restoreSystemProperty(String key, String value) + { + if (value == null) + { + System.clearProperty(key); + } + else + { + System.setProperty(key, value); + } + } +} diff --git a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/FileTestServer.java b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/FileTestServer.java index 30c13ded244..23269093272 100644 --- a/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/FileTestServer.java +++ b/tests/test-sessions/test-file-sessions/src/test/java/org/eclipse/jetty/server/session/FileTestServer.java @@ -139,7 +139,7 @@ public class FileTestServer extends AbstractTestServer public SessionHandler newSessionHandler() { - SessionHandler handler = new SessionHandler(); + SessionHandler handler = new TestSessionHandler(); DefaultSessionCache ss = new DefaultSessionCache(handler); handler.setSessionCache(ss); FileSessionDataStore ds = new FileSessionDataStore(); diff --git a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/GCloudTestServer.java b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/GCloudTestServer.java index 57367872561..7d279112bcc 100644 --- a/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/GCloudTestServer.java +++ b/tests/test-sessions/test-gcloud-sessions/src/test/java/org/eclipse/jetty/gcloud/session/GCloudTestServer.java @@ -22,6 +22,7 @@ package org.eclipse.jetty.gcloud.session; import org.eclipse.jetty.server.session.AbstractTestServer; import org.eclipse.jetty.server.session.DefaultSessionCache; import org.eclipse.jetty.server.session.SessionHandler; +import org.eclipse.jetty.server.session.TestSessionHandler; /** * GCloudTestServer @@ -51,7 +52,7 @@ public class GCloudTestServer extends AbstractTestServer @Override public SessionHandler newSessionHandler() { - SessionHandler handler = new SessionHandler(); + SessionHandler handler = new TestSessionHandler(); handler.setSessionIdManager(_sessionIdManager); GCloudSessionDataStore ds = new GCloudSessionDataStore(); ds.setDatastore(GCloudTestSuite.__testSupport.getDatastore()); diff --git a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/HashTestServer.java b/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/HashTestServer.java index 1090bcc56b8..151e3ccff4a 100644 --- a/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/HashTestServer.java +++ b/tests/test-sessions/test-hash-sessions/src/test/java/org/eclipse/jetty/server/session/HashTestServer.java @@ -34,7 +34,7 @@ public class HashTestServer extends AbstractTestServer public SessionHandler newSessionHandler() { - SessionHandler handler = new SessionHandler(); + SessionHandler handler = new TestSessionHandler(); DefaultSessionCache ss = new DefaultSessionCache(handler); handler.setSessionCache(ss); ss.setSessionDataStore(new NullSessionDataStore()); diff --git a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/InfinispanTestSessionServer.java b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/InfinispanTestSessionServer.java index ca705937688..bb6be3f5a88 100644 --- a/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/InfinispanTestSessionServer.java +++ b/tests/test-sessions/test-infinispan-sessions/src/test/java/org/eclipse/jetty/server/session/InfinispanTestSessionServer.java @@ -41,7 +41,7 @@ public class InfinispanTestSessionServer extends AbstractTestServer @Override public SessionHandler newSessionHandler() { - SessionHandler handler = new SessionHandler(); + SessionHandler handler = new TestSessionHandler(); InfinispanSessionDataStore sds = new InfinispanSessionDataStore(); sds.setCache((BasicCache)_config); DefaultSessionCache ss = new DefaultSessionCache(handler); diff --git a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/JdbcTestServer.java b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/JdbcTestServer.java index 13cdc12ebdf..39acaad0bb5 100644 --- a/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/JdbcTestServer.java +++ b/tests/test-sessions/test-jdbc-sessions/src/test/java/org/eclipse/jetty/server/session/JdbcTestServer.java @@ -96,7 +96,7 @@ public class JdbcTestServer extends AbstractTestServer @Override public SessionHandler newSessionHandler() { - SessionHandler handler = new SessionHandler(); + SessionHandler handler = new TestSessionHandler(); DefaultSessionCache sessionStore = new DefaultSessionCache(handler); handler.setSessionCache(sessionStore); JDBCSessionDataStore ds = new JDBCSessionDataStore(); diff --git a/tests/test-sessions/test-memcached-sessions/src/test/java/org/eclipse/jetty/memcached/sessions/MemcachedTestServer.java b/tests/test-sessions/test-memcached-sessions/src/test/java/org/eclipse/jetty/memcached/sessions/MemcachedTestServer.java index fbd6b31f78d..af00dd7aefa 100644 --- a/tests/test-sessions/test-memcached-sessions/src/test/java/org/eclipse/jetty/memcached/sessions/MemcachedTestServer.java +++ b/tests/test-sessions/test-memcached-sessions/src/test/java/org/eclipse/jetty/memcached/sessions/MemcachedTestServer.java @@ -31,6 +31,7 @@ import org.eclipse.jetty.server.session.CachingSessionDataStore; import org.eclipse.jetty.server.session.DefaultSessionCache; import org.eclipse.jetty.server.session.SessionData; import org.eclipse.jetty.server.session.SessionHandler; +import org.eclipse.jetty.server.session.TestSessionHandler; /** * MemcachedTestServer @@ -161,7 +162,7 @@ public class MemcachedTestServer extends AbstractTestServer @Override public SessionHandler newSessionHandler() { - SessionHandler handler = new SessionHandler(); + SessionHandler handler = new TestSessionHandler(); handler.setSessionIdManager(_sessionIdManager); MockDataStore persistentStore = new MockDataStore(); MemcachedSessionDataMap sdm = new MemcachedSessionDataMap("localhost", "11211"); diff --git a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTestServer.java b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTestServer.java index 06a58c0bfbe..73723c61129 100644 --- a/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTestServer.java +++ b/tests/test-sessions/test-mongodb-sessions/src/test/java/org/eclipse/jetty/nosql/mongodb/MongoTestServer.java @@ -24,6 +24,7 @@ import org.eclipse.jetty.server.SessionIdManager; import org.eclipse.jetty.server.session.AbstractTestServer; import org.eclipse.jetty.server.session.DefaultSessionCache; import org.eclipse.jetty.server.session.SessionHandler; +import org.eclipse.jetty.server.session.TestSessionHandler; import com.mongodb.DBCollection; import com.mongodb.Mongo; @@ -74,7 +75,7 @@ public class MongoTestServer extends AbstractTestServer public SessionHandler newSessionHandler() { - SessionHandler handler = new SessionHandler(); + SessionHandler handler = new TestSessionHandler(); try { MongoSessionDataStore ds = new MongoSessionDataStore(); diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLocalSessionScavengingTest.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLocalSessionScavengingTest.java index 6f31f17d870..2a9422e0034 100644 --- a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLocalSessionScavengingTest.java +++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/AbstractLocalSessionScavengingTest.java @@ -122,7 +122,12 @@ public abstract class AbstractLocalSessionScavengingTest extends AbstractTestBas pause(2*inactivePeriod); assertEquals(1, m1.getSessionsCreated()); + + if (m1 instanceof TestSessionHandler) + { + ((TestSessionHandler)m1).assertCandidatesForExpiry(0); + } //check a session removed listener did not get called assertEquals(1, listener.count.getCurrent()); diff --git a/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/TestSessionHandler.java b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/TestSessionHandler.java new file mode 100644 index 00000000000..d89ea60851b --- /dev/null +++ b/tests/test-sessions/test-sessions-common/src/main/java/org/eclipse/jetty/server/session/TestSessionHandler.java @@ -0,0 +1,43 @@ +// +// ======================================================================== +// Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd. +// ------------------------------------------------------------------------ +// All rights reserved. This program and the accompanying materials +// are made available under the terms of the Eclipse Public License v1.0 +// and Apache License v2.0 which accompanies this distribution. +// +// The Eclipse Public License is available at +// http://www.eclipse.org/legal/epl-v10.html +// +// The Apache License v2.0 is available at +// http://www.opensource.org/licenses/apache2.0.php +// +// You may elect to redistribute this code under either of these licenses. +// ======================================================================== +// + + +package org.eclipse.jetty.server.session; + +import static org.junit.Assert.assertEquals; + + + +/** + * TestSessionHandler + * + * For testing convenience, allows access to some protected fields in SessionHandler + * + */ +public class TestSessionHandler extends SessionHandler +{ + + /** + * @param size the size of the expiry candidates to check + */ + public void assertCandidatesForExpiry (int size) + { + assertEquals(size, _candidateSessionIdsForExpiry.size()); + } + +} diff --git a/tests/test-webapps/pom.xml b/tests/test-webapps/pom.xml index 4bf55942088..c587bf984f8 100644 --- a/tests/test-webapps/pom.xml +++ b/tests/test-webapps/pom.xml @@ -21,6 +21,13 @@ true + + org.jacoco + jacoco-maven-plugin + + true + +