<?xml version="1.0"?>
<!-- 
/*
 * Copyright 2001-2004 The Apache Software Foundation.
 * 
 * Licensed 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.
 */
 -->

<document>

 <properties>
  <title>JSP Howto</title>
 </properties>

<body>

<section name="JSP + Turbine Configuration">

<p>
It is quite possible to use JSP with Turbine. In order to do so, you
need to tweak the existing configuration in the
TurbineResources.properties file as described below. This is an evolving
document, if there are still errors in this configuration, <a
href="http://jakarta.apache.org/site/mail.html">please subscribe to the
Turbine Users list and let us know</a>. Also note that this file is
checked into Turbine's CVS tree under xdocs/jsp-configuration.xml. We
appreciate all <a
href="http://jakarta.apache.org/site/source.html">patches and
contributions</a> that improve this document.
</p>

<p>
In TurbineResources.properties, search for the key values and
modify/verify the following settings:
</p>

<source><![CDATA[
template.homepage=/index.jsp (or whatever jsp you want for the start
                              page)

template.login=/login.jsp    (or whatever jsp you want for the login 
                              form)

page.default=JspPage

services.JspService.classname=org.apache.turbine.services.jsp.TurbineJspService
]]></source>

<p>
If you want to use "complete" JSP pages (rather than using Turbine's
model of having separate files for the navigation components, etc.),
then you must set the JspService.default.layout entry so that
DefaultLayout is used:
</p>

<source><![CDATA[
services.JspService.default.layout = DefaultLayout
]]></source>

<p>
Place JSP pages in the &lt;app&gt;/templates/app/screens directory.
</p>

<p>
Refer to the JSP pages in URLs as .../template/app/&lt;xxx&gt;.jsp
</p>

</section>

</body>
</document>
