blob: c8d8fed8102313884e2ac2983b421830cc1faad3 [file] [log] [blame]
<!--
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 2 - Help</title>
<meta http-equiv="Content-type" content="text/html; charset=ISO-8859-1">
</head>
<body>
<h1>FreeMarker Example Web Application 2</h1>
<p>To try this example you should visit
<a href="index.a"><code>http://<i>yourServer</i>/<i>thisWebApp</i>/index.a</code></a>
<p><b>Note:</b> To simplify the example, the guest-book entries are not stored
persistently. If you reload the servlet all guest-book entry will lose.
<h2>What's this example about?</h2>
<p>This is a very primitive controller servlet class (was written based on FreeMarker Example Web Application 1)
and a simple guest-book appliction that uses the conroller servlet class. This whole stuff is a very
primitive thing. It is only to get you started if you plan to develop some custom "framework" for your
Web applications, rather than using an already written framework.
Note that a Web application framework can use very different approach than this
example.
<h2>How this example works?</h2>
<p>This example uses a primitive controller servlet, <code>example.ControllerServlet</code>.
To add application specific behavior, you should extend this servlet
with an application specific subclass, that adds the so-called action
methods. Here we implement a primitive guest book application by
extending <code>ControllerServlet</code> with <code>GuestbookServlet</code>, that adds 3
action methods:
<ul>
<li><code>indexAction</code>: Shows the whole guest-book.
<li><code>formAction</code>: Show the from where you enter a guest-book entry.
<li><code>addAction</code>: Adds a new guest-book entry.
</ul>
<p>The <code>ControllerServlet</code> calls the action methods when it receives client requests.
It deduces the name of the action methods to call
from the request URL. The servlet will be invoked only if the request URL is
ending with ".a", as you can see in the <code>WEB-INF/web.xml</code>, otherwise a static file
(for example this html file, or an image file) will be returned as is.
To deduce the method name, the servlet removes the <code>.a</code> and the Web-application directory
from the request URL, and then appends <code>"Action"</code>. Thus, if you type
<code>http://<i>yourServler</i>/<i>thisWebApp</i>/foo.a</code>, then it will try to
call the <code>fooAction</code> method.
<p>Each action method gets two parameters: the <code>HttpServletRequest</code>, and
the <code>Page</code> object. The <code>Page</code> object plays the role of
<code>HttpServletResponse</code>, but instead of calling low lever methods,
you add objects to the data model with <code>put(<i>name</i>, <i>value</i>)</code>, and
choose the template (the view) with <code>setTemplate(<i>templateName</i>)</code>; the
tedious dirty work is done by <code>ControllerServlet</code>.
<p>The templates are stored in the <code>WEB-INF/templates</code> directory.
<p>For more details read the source code.
<hr>
<p><a href="index.a">Back to the index page</a>
</body>
</html>