| <!-- |
| 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> |