<!--

     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>System properties</title>
</head>
<body>

<h1>System properties</h1>
<% keys = System.getProperties().keySet();
   if (keys.isEmpty()) {
     out.println('No keys.');
   }
   else {
  %>
<dl>
    <% for (key in keys) { %>
    <dt> <b> ${key} </b> </dt> 
    <dd> <tt> ${System.getProperty(key)} </tt> </dd>
    <% } %>
</dl>
<% } %>
</body>
</html>
