====
     Licensed to the Apache Software Foundation (ASF) under one
     or more contributor license agreements.  See the NOTICE file
     distributed with this work for additional information
     regarding copyright ownership.  The ASF licenses this file
     to you under the Apache License, Version 2.0 (the
     "License"); you may not use this file except in compliance
     with the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing,
     software distributed under the License is distributed on an
     "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
     KIND, either express or implied.  See the License for the
     specific language governing permissions and limitations
     under the License.
====


GroovyServlet examples

[ / ]
Only contains the "index.groovy", "codehaus-style.css" and "readme.txt" files.

[ /hello ]
Contains a single welcome file named "hello.groovy" showing a simple groovlet.

[ /zoo ]
The zoo demonstrates a groovy setup of scripts, that are partly <i>hidden</i>
beneath the "WEB-INF/groovy" directory. Note the different package names in the
script files.
