webmcp

annotate doc/autodoc-header.htmlpart @ 424:553a1a9dbc4c

Fixed bug which was introduced during code-cleanup of <db_handle>:quote_string(...) function
author jbe
date Tue Jan 12 19:30:59 2016 +0100 (2016-01-12)
parents a932b94a8490
children 29b1f7a04934
rev   line source
jbe/bsw@0 1 <html>
jbe/bsw@0 2 <head>
jbe@381 3 <script type="text/javascript">
jbe@390 4 var expandedSections = {};
jbe@390 5 function toggleSection(ident) {
jbe@390 6 var element = document.getElementById('autodoc_details_' + ident);
jbe@390 7 if (element) {
jbe@390 8 if (expandedSections[ident]) {
jbe@390 9 element.style.display = 'none';
jbe@390 10 delete expandedSections[ident];
jbe@390 11 } else {
jbe@390 12 element.style.display = '';
jbe@390 13 expandedSections[ident] = true;
jbe@390 14 }
jbe@381 15 }
jbe@390 16 }
jbe@391 17 var inProgress = false;
jbe@390 18 window.onload = window.onhashchange = function() {
jbe@391 19 if (inProgress) return;
jbe@390 20 for (var ident in expandedSections) toggleSection(ident);
jbe@390 21 var hash = window.location.hash;
jbe@390 22 if (hash) {
jbe@390 23 toggleSection(hash.replace(/^#/, ''));
jbe@391 24 inProgress = true;
jbe@391 25 window.location.hash = hash; // required after collapsing/expanding
jbe@391 26 inProgress = false;
jbe@390 27 }
jbe@389 28 };
jbe@381 29 </script>
jbe/bsw@0 30 <style>
jbe/bsw@0 31 body {
jbe/bsw@0 32 font-family: "Liberation Sans", sans-serif;
jbe/bsw@0 33 font-size: 11pt;
jbe/bsw@0 34 padding-bottom: 5ex;
jbe/bsw@0 35 }
jbe/bsw@0 36 .warning {
jbe/bsw@0 37 color: #ff0000;
jbe/bsw@0 38 }
jbe/bsw@0 39 h1, h2 {
jbe/bsw@0 40 font-family: "Liberation Serif", Georgia, serif;
jbe/bsw@0 41 }
jbe/bsw@0 42 h2 {
jbe/bsw@0 43 margin-bottom: 0.3ex;
jbe/bsw@0 44 }
jbe/bsw@0 45 p {
jbe/bsw@0 46 margin: 0px;
jbe/bsw@0 47 line-height: 130%;
jbe/bsw@0 48 }
jbe/bsw@0 49 tt, pre {
jbe/bsw@0 50 font-size: 10pt;
jbe/bsw@0 51 }
jbe/bsw@0 52 tt {
jbe/bsw@0 53 font-weight: bold;
jbe/bsw@0 54 white-space: nowrap;
jbe/bsw@0 55 }
jbe/bsw@0 56 .autodoc_entry {
jbe/bsw@0 57 margin-top: 1ex;
jbe/bsw@0 58 margin-bottom: 1ex;
jbe/bsw@0 59 }
jbe/bsw@0 60 .autodoc_comment_tail {
jbe/bsw@0 61 font-style: italic;
jbe/bsw@0 62 }
jbe/bsw@0 63 .autodoc_entry .short_synopsis {
jbe/bsw@0 64 cursor: pointer;
jbe/bsw@0 65 }
jbe/bsw@0 66 .autodoc_details {
jbe/bsw@0 67 padding-left: 1em;
jbe/bsw@0 68 padding-right: 1em;
jbe/bsw@0 69 border: 1px solid #777;
jbe/bsw@0 70 }
jbe/bsw@0 71 .autodoc_synopsis {
jbe/bsw@0 72 font-weight: bold;
jbe/bsw@0 73 }
jbe/bsw@0 74 .autodoc_synopsis .autodoc_comment_tail {
jbe/bsw@0 75 font-weight: normal;
jbe/bsw@0 76 color: #008000;
jbe/bsw@0 77 }
jbe/bsw@0 78 .autodoc_entry .autodoc_comment {
jbe/bsw@0 79 color: #400080;
jbe/bsw@0 80 }
jbe/bsw@0 81 .autodoc_source {
jbe/bsw@0 82 color: #505050;
jbe/bsw@0 83 }
jbe/bsw@0 84 </style>
jbe@388 85 <title>WebMCP 2.0.4 Documentation</title>
jbe/bsw@0 86 </head>
jbe/bsw@0 87 <body>
jbe@388 88 <h1>WebMCP 2.0.4 Documentation</h1>
jbe/bsw@0 89 <p>
jbe@278 90 WebMCP is a web development framework based on the Lua programming language (read more about Lua <a href="http://www.lua.org/about.html">here</a>).
jbe/bsw@0 91 </p>
jbe/bsw@0 92 <h2>Requirements</h2>
jbe/bsw@0 93 <p>
jbe@387 94 WebMCP has been developed on Linux and FreeBSD. Using it with Mac&nbsp;OS&nbsp;X is untested as of yet; Microsoft Windows is not supported. Beside the operating system, the only mandatory dependencies for WebMCP are the <a href="http://www.lua.org/">programming language Lua</a> version 5.2 or 5.3, the <a href="http://www.public-software-group.org/moonbridge">Moonbridge Network Server for Lua Applications</a> version 1.0.1 or higher, <a href="http://www.postgresql.org/">PostgreSQL</a> version 8.2 or higher, and a C compiler.
jbe/bsw@0 95 </p>
jbe/bsw@0 96 <h2>Installation</h2>
jbe/bsw@0 97 <p>
jbe@278 98 After downloading the tar.gz package, unpack it, enter the unpacked directory and type <tt>make</tt>. If you use Mac OS X or if you experience problems during compilation, you need to edit the <tt>Makefile.options</tt> file prior to compilation. The framework itself will be available in the <tt>framework/</tt> directory, while a demo application is available in the <tt>demo-app/</tt> directory. The <tt>framework.precompiled/</tt> and <tt>demo-app.precompiled/</tt> directories will contain a version with all Lua files being byte-code pre-compiled, which can be used instead. You may copy these directories (with <tt>cp -L</tt> to follow links) to any other place you like. Don't forget to setup a database, and make the <tt>tmp/</tt> directory of the application writable for the web server process. Good luck and have fun!
jbe@278 99 </p>
jbe@278 100 <h2>Configuration, pre-fork and post-fork initializers</h2>
jbe@278 101 <p>
jbe@278 102 The Moonbridge Network Server creates forks (i.e. clones) of the application server process in order to handle concurrent requests. Certain initializations may be performed before forking, other initializations must be performed after forking. The application's configuration files as well as its pre-fork initializers are executed before forking. The application's post-fork initializers are executed after forking. In particular, any libraries that open file or network handles during initialization must not be loaded before the server process is forked. Opening database connections must be performed after forking as well. Execution order is as follows:
jbe@278 103 </p>
jbe@278 104 <ol>
jbe@278 105 <li>
jbe@278 106 Loading all WebMCP libraries except the "multirand" library (multirand opens /dev/urandom and thus must not be loaded prior to forking)
jbe@278 107 </li>
jbe@278 108 <li>
jbe@278 109 Executing the selected configuration file: <tt>config/</tt><i>configuration_name</i><tt>.lua</tt>
jbe@278 110 </li>
jbe@278 111 <li>
jbe@278 112 Executing all pre-fork initializers (both those in the <tt>app/_prefork/</tt> and those in the <tt>app/</tt><i>application_name</i><tt>/_prefork/</tt> directory) until call of <tt>execute.inner()</tt> within each initializer
jbe@278 113 </li>
jbe@278 114 <li>
jbe@278 115 The Moonbridge Network Server forks the process (i.e. cloning the whole Lua machine)<br />
jbe@278 116 <span style="color: red">Note: no file handles or network connections must be opened prior to this point!</span>
jbe@278 117 </li>
jbe@278 118 <li>
jbe@281 119 Loading WebMCP's "multirand" library
jbe@281 120 </li>
jbe@281 121 <li>
jbe@278 122 Executing all post-fork initializers (both those in the <tt>app/_postfork/</tt> and those in the <tt>app/</tt><i>application_name</i><tt>/_postfork/</tt> directory) until call of <tt>execute.inner()</tt> within each initializer
jbe@278 123 </li>
jbe@278 124 <li>
jbe@278 125 For each request:
jbe@278 126 <ul>
jbe@278 127 <li>
jbe@278 128 Execution of all applicable filters until call of <tt>execute.inner()</tt> within each filter
jbe@278 129 </li>
jbe@278 130 <li>
jbe@278 131 Handling of the request by calling the appropriate view or action
jbe@278 132 </li>
jbe@278 133 <li>
jbe@278 134 Resuming execution of all filters in reverse order from that position where <tt>execute.inner()</tt> had been called
jbe@278 135 </li>
jbe@278 136 </ul>
jbe@278 137 </li>
jbe@278 138 <li>
jbe@278 139 Resuming execution of all post-fork initializers in reverse order from that position where <tt>execute.inner()</tt> had been called
jbe@278 140 </li>
jbe@278 141 <li>
jbe@278 142 Resuming execution of all pre-fork initializers in reverse order from that position where <tt>execute.inner()</tt> had been called
jbe@278 143 </li>
jbe@278 144 </ol>
jbe/bsw@0 145 </p>
jbe/bsw@0 146 <h2>Using the atom library</h2>
jbe/bsw@0 147 <p>
jbe/bsw@0 148 Lua itself has only very few built-in data types. The atom library gives support for extra data types. Currently the following extra data types are provided:
jbe/bsw@0 149 </p>
jbe/bsw@0 150 <ul>
jbe/bsw@0 151 <li>atom.fraction</li>
jbe/bsw@0 152 <li>atom.date</li>
jbe/bsw@0 153 <li>atom.time</li>
jbe/bsw@0 154 <li>atom.timestamp (date and time combined in one data type)</li>
jbe/bsw@0 155 </ul>
jbe/bsw@0 156 <p>
jbe/bsw@0 157 In addition the following pseudo-types are existent, corresponding to Lua's base types:
jbe/bsw@0 158 </p>
jbe/bsw@0 159 <ul>
jbe/bsw@0 160 <li>atom.boolean</li>
jbe/bsw@0 161 <li>atom.string</li>
jbe/bsw@0 162 <li>atom.integer</li>
jbe/bsw@0 163 <li>atom.number</li>
jbe/bsw@0 164 </ul>
jbe/bsw@0 165 <p>
jbe/bsw@0 166 Both atom.integer and atom.number refer to Lua's base type &ldquo;number&rdquo;.
jbe/bsw@0 167 </p>
jbe/bsw@0 168 <p>
jbe/bsw@0 169 New values of atom data types are created by either calling <tt>atom.<i>type</i>:load(string_representation)</tt> or by calling <tt>atom.<i>type</i>{...}</tt>, e.g. <tt>atom.date{year=1970, month=1, day=1}</tt>. You can dump any atom value as a string by calling <tt>atom.dump(value)</tt> and later reload it with <tt>atom.<i>type</i>:load(string)</tt>.
jbe/bsw@0 170 </p>
jbe/bsw@0 171 <h2>Using the Object-Relational Mapper &ldquo;mondelefant&rdquo;</h2>
jbe/bsw@0 172 <p>
jbe@278 173 The library &ldquo;mondelefant&rdquo; shipping with WebMCP can be used to access PostgreSQL databases. It also serves as an Object-Relational Mapper (ORM). The database connection is usually configured in the config file (e.g. in <tt>config/devel.lua</tt>):
jbe@278 174 </p>
jbe@278 175 <pre>
jbe@278 176 config.db = { engine="postgresql", dbname="webmcp_demo" }
jbe@278 177 config.db_trace = true</pre>
jbe@278 178 <p>
jbe@278 179 In addition to configuring the database, it must be opened within a post-fork initializer (e.g. in <tt>app/_postfork/01_database.lua</tt>):
jbe/bsw@0 180 </p>
jbe/bsw@0 181 <pre>
jbe@278 182 _G.db = assert(mondelefant.connect(config.db))
jbe@295 183 function mondelefant.class_prototype:get_db_conn() return db end</pre>
jbe/bsw@0 184 <p>
jbe@295 185 The parameters for <tt>mondelefant.connect</tt> are directly passed to PostgreSQL's client library libpq. See <a href="http://www.postgresql.org/docs/9.4/static/libpq-connect.html">PostgreSQL's documentation on PQconnect</a> for information about supported parameters.
jbe/bsw@0 186 </p>
jbe/bsw@0 187 <p>
jbe/bsw@0 188 To define a model to be used within a WebMCP application, create a file named with the name of the model and <tt>.lua</tt> as extension in the <tt>model/</tt> directory of your application. The most basic definition of a model (named &ldquo;movie&rdquo; in this example) is:
jbe/bsw@0 189 </p>
jbe/bsw@0 190 <pre>
jbe/bsw@0 191 Movie = mondelefant.new_class()
jbe/bsw@0 192 Movie.table = 'movie'</pre>
jbe/bsw@0 193 <p>
jbe/bsw@0 194 Note: Model classes are always written CamelCase, while the name of the file in <tt>model/</tt> is written lower_case.
jbe/bsw@0 195 </p>
jbe/bsw@0 196 <p>
jbe/bsw@0 197 To select objects from the database, the mondelefant library provides a selector framework:
jbe/bsw@0 198 </p>
jbe/bsw@0 199 <pre>
jbe/bsw@0 200 local s = Movie:new_selector()
jbe/bsw@0 201 s:add_where{ 'id = ?', param.get_id() }
jbe/bsw@0 202 s:single_object_mode() -- return single object instead of list
jbe/bsw@0 203 local movie = s:exec()</pre>
jbe/bsw@0 204 <p>
jbe/bsw@0 205 A short form of the above query would be:
jbe/bsw@0 206 </p>
jbe/bsw@0 207 <pre>
jbe/bsw@0 208 local movie = Movie:new_selector():add_where{ 'id = ?', param.get_id() }:single_object_mode():exec()</pre>
jbe/bsw@0 209 <p>
jbe/bsw@0 210 For more examples about how to use the model system, please take a look at the demo application.
jbe/bsw@0 211 </p>
jbe/bsw@0 212 <h2>The Model-View-Action (MVA) concept</h2>
jbe/bsw@0 213 <p>
jbe/bsw@0 214 As opposed to other web application frameworks, WebMCP does not use a Model-View-Controller (MVC) concept, but a Model-View-Action (MVA) concept.
jbe/bsw@0 215 </p>
jbe/bsw@0 216 <h3>Models</h3>
jbe/bsw@0 217 <p>
jbe/bsw@0 218 The models in MVA are like the models in MVC; they are used to access data stored in a relational database (PostgreSQL) in an object oriented way. They can also be used to provide methods for working with objects representing the database entries.
jbe/bsw@0 219 </p>
jbe/bsw@0 220 <h3>Views</h3>
jbe/bsw@0 221 <p>
jbe/bsw@0 222 The views in the MVA concept are different from the views in the MVC concept. As WebMCP has no controllers, the views are responsible for processing the GET/POST parameters from the webbrowser, fetching the data to be displayed, and creating the output by directly writing HTML to slots in a layout or by calling helper functions for the user interface.
jbe/bsw@0 223 </p>
jbe/bsw@0 224 <h3>Actions</h3>
jbe/bsw@0 225 <p>
jbe/bsw@0 226 Actions are similar to views, but supposed to change data in the database, hence only callable by HTTP POST requests. They are also responsible for processing the POST parameters from the webbrowser. They can modify the database, but instead of rendering a page to be displayed, they just return a status code. Depending on the status code there will be an internal forward or an HTTP 303 redirect to a view. When calling an action via a POST request, additional POST parameters, which are usually added by hidden form fields, determine the view to be displayed for each status code returned by the action.
jbe/bsw@0 227 </p>
jbe/bsw@0 228 <h2>Directory structure of a WebMCP application</h2>
jbe/bsw@0 229 <ul>
jbe/bsw@0 230 <li>
jbe/bsw@0 231 Base Directory
jbe/bsw@0 232 <ul>
jbe/bsw@0 233 <li>
jbe/bsw@0 234 <tt>app/</tt>
jbe/bsw@0 235 <ul>
jbe/bsw@0 236 <li>
jbe@278 237 <tt>_prefork/</tt>
jbe@278 238 <ul>
jbe@278 239 <li>
jbe@278 240 <tt>10_first_prefork_initializer.lua</tt>
jbe@278 241 </li>
jbe@278 242 <li>
jbe@278 243 <tt>30_third_prefork_initializer.lua</tt>
jbe@278 244 </li>
jbe@278 245 </ul>
jbe@278 246 </li>
jbe@278 247 <li>
jbe@278 248 <tt>_postfork/</tt>
jbe@278 249 <ul>
jbe@278 250 <li>
jbe@278 251 <tt>01_first_postfork_initializer.lua</tt>
jbe@278 252 </li>
jbe@278 253 <li>
jbe@278 254 <tt>03_third_postfork_initializer.lua</tt>
jbe@278 255 </li>
jbe@278 256 </ul>
jbe@278 257 </li>
jbe@278 258 <li>
jbe/bsw@0 259 <tt>main/</tt>
jbe/bsw@0 260 <ul>
jbe/bsw@0 261 <li>
jbe@278 262 <tt>_prefork/</tt>
jbe@278 263 <ul>
jbe@278 264 <li>
jbe@278 265 <tt>20_second_prefork_initializer.lua</tt>
jbe@278 266 </li>
jbe@278 267 </ul>
jbe@278 268 </li>
jbe@278 269 <li>
jbe@278 270 <tt>_postfork/</tt>
jbe@278 271 <ul>
jbe@278 272 <li>
jbe@278 273 <tt>02_second_postfork_initializer.lua</tt>
jbe@278 274 </li>
jbe@278 275 </ul>
jbe@278 276 </li>
jbe@278 277 <li>
jbe/bsw@0 278 <tt>_filter/</tt>
jbe/bsw@0 279 <ul>
jbe/bsw@0 280 <li>
jbe/bsw@0 281 <tt>10_first_filter.lua</tt>
jbe@278 282 </li>
jbe/bsw@0 283 <li>
jbe/bsw@0 284 <tt>30_third_filter.lua</tt>
jbe/bsw@0 285 </li>
jbe/bsw@0 286 <li>&hellip;</li>
jbe/bsw@0 287 </ul>
jbe/bsw@0 288 </li>
jbe/bsw@0 289 <li>
jbe/bsw@0 290 <tt>_filter_action/</tt>
jbe/bsw@0 291 <ul>
jbe/bsw@0 292 <li>
jbe/bsw@0 293 <tt>20_second_filter.lua</tt>
jbe/bsw@0 294 </li>
jbe/bsw@0 295 <li>&hellip;</li>
jbe/bsw@0 296 </ul>
jbe/bsw@0 297 </li>
jbe/bsw@0 298 <li>
jbe/bsw@0 299 <tt>_filter_view/</tt>
jbe/bsw@0 300 <ul>
jbe/bsw@0 301 <li>&hellip;</li>
jbe/bsw@0 302 </ul>
jbe/bsw@0 303 </li>
jbe/bsw@0 304 <li>
jbe/bsw@0 305 <tt>_layout/</tt>
jbe/bsw@0 306 <ul>
jbe/bsw@0 307 <li>&hellip;</li>
jbe/bsw@0 308 </ul>
jbe/bsw@0 309 </li>
jbe/bsw@0 310 <li>
jbe/bsw@0 311 <tt>index/</tt>
jbe/bsw@0 312 <ul>
jbe/bsw@0 313 <li>
jbe/bsw@0 314 <tt>_action/</tt>
jbe/bsw@0 315 <ul>
jbe/bsw@0 316 <li>
jbe/bsw@0 317 <i>action_name</i><tt>.lua</tt>
jbe/bsw@0 318 </li>
jbe/bsw@0 319 <li>
jbe/bsw@0 320 <i>another_action_name</i><tt>.lua</tt>
jbe/bsw@0 321 </li>
jbe/bsw@0 322 <li>&hellip;</li>
jbe/bsw@0 323 </ul>
jbe/bsw@0 324 </li>
jbe/bsw@0 325 <li>
jbe/bsw@0 326 <tt>index.lua</tt>
jbe/bsw@0 327 </li>
jbe/bsw@0 328 <li>
jbe/bsw@0 329 <i>other_view_name</i><tt>.lua</tt>
jbe/bsw@0 330 </li>
jbe/bsw@0 331 <li>&hellip;</li>
jbe/bsw@0 332 </ul>
jbe/bsw@0 333 </li>
jbe/bsw@0 334 <li>
jbe/bsw@0 335 <i>other_module_name</i><tt>/</tt>
jbe/bsw@0 336 <ul>
jbe/bsw@0 337 <li>&hellip;</li>
jbe/bsw@0 338 </ul>
jbe/bsw@0 339 </li>
jbe/bsw@0 340 </ul>
jbe/bsw@0 341 </li>
jbe/bsw@0 342 <li>
jbe/bsw@0 343 <i>other_application_name</i><tt>/</tt>
jbe/bsw@0 344 <ul>
jbe/bsw@0 345 <li>&hellip;</li>
jbe/bsw@0 346 </ul>
jbe/bsw@0 347 </li>
jbe/bsw@0 348 </ul>
jbe/bsw@0 349 </li>
jbe/bsw@0 350 <li>
jbe/bsw@0 351 <tt>config/</tt>
jbe/bsw@0 352 <ul>
jbe/bsw@0 353 <li>
jbe/bsw@0 354 <tt>development.lua</tt>
jbe/bsw@0 355 </li>
jbe/bsw@0 356 <li>
jbe/bsw@0 357 <tt>production.lua</tt>
jbe/bsw@0 358 <li>
jbe/bsw@0 359 <li>
jbe/bsw@0 360 <i>other_config_name</i><tt>.lua</tt>
jbe/bsw@0 361 </li>
jbe/bsw@0 362 <li>&hellip;</li>
jbe/bsw@0 363 </ul>
jbe/bsw@0 364 </li>
jbe/bsw@0 365 <li>
jbe/bsw@0 366 <tt>db/</tt>
jbe/bsw@0 367 <ul>
jbe/bsw@0 368 <li>
jbe/bsw@0 369 <tt>schema.sql</tt>
jbe/bsw@0 370 </li>
jbe/bsw@0 371 </ul>
jbe/bsw@0 372 </li>
jbe/bsw@0 373 <li>
jbe/bsw@0 374 <tt>locale/</tt>
jbe/bsw@0 375 <ul>
jbe/bsw@0 376 <li>
jbe/bsw@0 377 <tt>translations.de.lua</tt>
jbe/bsw@0 378 </li>
jbe/bsw@0 379 <li>
jbe/bsw@0 380 <tt>translations.en.lua</tt>
jbe/bsw@0 381 </li>
jbe/bsw@0 382 <li>
jbe/bsw@0 383 <tt>translations.</tt><i>languagecode</i><tt>.lua</tt>
jbe/bsw@0 384 </li>
jbe/bsw@0 385 <li>&hellip;</li>
jbe/bsw@0 386 </ul>
jbe/bsw@0 387 </li>
jbe/bsw@0 388 <li>
jbe/bsw@0 389 <tt>model/</tt>
jbe/bsw@0 390 <ul>
jbe/bsw@0 391 <li>
jbe/bsw@0 392 <i>model_name</i><tt>.lua</tt>
jbe/bsw@0 393 </li>
jbe/bsw@0 394 <li>
jbe/bsw@0 395 <i>another_model_name</i><tt>.lua</tt>
jbe/bsw@0 396 </li>
jbe/bsw@0 397 <li>&hellip;</li>
jbe/bsw@0 398 </ul>
jbe/bsw@0 399 </li>
jbe/bsw@0 400 <li>
jbe/bsw@0 401 <tt>static/</tt>
jbe/bsw@0 402 <ul>
jbe/bsw@0 403 <li>&hellip; (images, javascript, ...)</li>
jbe/bsw@0 404 </ul>
jbe/bsw@0 405 </li>
jbe/bsw@0 406 <li>
jbe/bsw@0 407 <tt>tmp/</tt> (writable by the web process)
jbe/bsw@0 408 </li>
jbe/bsw@0 409 </ul>
jbe/bsw@0 410 </li>
jbe/bsw@0 411 </ul>
jbe@278 412 <h2>Starting your application</h2>
jbe@278 413 <p>
jbe@278 414 Ensure that the <tt>moonbridge</tt> binary is within your system's search path and that the <tt>moonbridge_http.lua</tt> file is included in the LUA_PATH or linked into the framework's <tt>lib/</tt> directory (alternatively the MOONBR_LUA_PATH option might be set accordingly at compile-time of the Moonbridge Network Server). To start an application, call the <tt>mcp.lua</tt> executable (found in <tt>framework/bin/mcp.lua</tt>) with the following arguments:
jbe@278 415 </p>
jbe@278 416 <ol>
jbe@278 417 <li>
jbe@278 418 Path of the WebMCP framework directory, e.g. <tt>./framework</tt>
jbe@278 419 </li>
jbe@278 420 <li>
jbe@278 421 Path of your application's directory, e.g. <tt>./demo-app</tt>
jbe@278 422 </li>
jbe@278 423 <li>
jbe@278 424 Name of your applicaiton (usually <tt>main</tt>)
jbe@278 425 </li>
jbe@278 426 <li>
jbe@278 427 Name of configuration (e.g. <tt>devel</tt> to use config/devel.lua)
jbe@278 428 </li>
jbe@278 429 </ol>
jbe/bsw@0 430 <h2>Automatically generated reference for the WebMCP environment</h2>
jbe/bsw@0 431 <ul>

Impressum / About Us