<!--
  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.
-->
<html>
<head>
  <title>FreeMarker Example Web Application 1 - Help</title>
  <meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1">
</head>
<body>

<h1>FreeMarker Example Web Application 1</h1>

<p>To try this example you should visit
<a href="hello"><code>http://<i>yourServer</i>/<i>thisWebApp</i>/hello</code></a>

<h2>What's this example about?</h2>

<p>This Servlet does not do anything useful, just prints "Hello World!". The
intent is to help you to get started if you want to build your own Controller
servlet that uses FreeMarker for the View. For more advanced example, see the
2nd Web application example.
  
</body>
</html>