Apache JSPWiki 2.10 - Documentation
===============================================

    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.  

The license file can be found in LICENSE.


What is JSPWiki?
----------------

JSPWiki is a simple (well, not any more) WikiWiki clone, written in Java
and JSP.  A WikiWiki is a web site which allows anyone to participate
in its development.  JSPWiki supports all the traditional wiki features,
as well as very detailed access control and security integration using JAAS. 


Pre-requirements
----------------

Okay, so you wanna Wiki?  You'll need the following things:

REQUIRED:

* A JSP engine that supports Servlet API 2.5.  We recommend Tomcat from
  http://tomcat.apache.org/ for a really easy installation.
  Tomcat 6.x or later is supported.

* Some previous administration experience...  If you've ever installed
  Apache or any other web server, you should be pretty well off.

* And of course, a server to run the JSP engine on.

* JDK 1.6+


OPTIONAL:

* JavaMail package from java.sun.com, if you want to use log4j mailing
  capabilities.  You'll also need the Java Activation Framework.



Really simple installation
--------------------------

This section is meant for you, if you just want to have a really quick
install without much worries.  If you want to have a more complicated
installation (with more power as to how to do things), 
check out the "Install" section below.

Since JSPWiki 2.1.153, JSPWiki comes with a really simple installation
engine.  Just do the following:

1) Install Tomcat from http://tomcat.apache.org/ (or any other servlet
   container)

2) Rename the JSPWiki.war file from the download and rename it based on
   your desired URL (if you want it different from /JSPWiki).  For example,
   if you want your URL to be http://.../wiki, rename it to wiki.war.
   This name will be referred to as <appname> below.
   Place this WAR in your $TOMCAT_HOME/webapps folder and then start Tomcat.

3) Point your browser at http://<myhost>/<appname>/Install.jsp

4) Answer a couple of simple questions

5) Restart your container

6) Point your browser to http://<myhost>/<appname>/

That's it!


Advanced Installation
---------------------

In the $TOMCAT_HOME/lib folder (or equivalent based on your servlet container),
place a jspwiki-custom.properties file, which can contain any overrides to the 
default ini/jspwiki.properties file in the JSPWiki JAR.  For any values not 
placed in jspwiki-custom.properties file JSPWiki will rely on the default file.
Review the default file to look for values you may wish to override in the custom
file.  Some common values to override in your custom file include 
jspwiki.xmlUserDatabaseFile, jspwiki.xmlGroupDatabaseFile
jspwiki.fileSystemProvider.pageDir, jspwiki.basicAttachmentProvider.storageDir, 
and log4j.appender.FileLog.File.  The comments in the default file will suggest 
appropriate values to override them with. 

The custom file can also be placed in the WEB-INF/ folder of the WAR, but storing
this file in TOMCAT_HOME/lib allows you to upgrade the JSPWiki WAR without needing
to re-insert your customizations.

Unzip the contents of jspwiki-corepages.zip into your newly created
directory.  You can find the rest of the documentation in the
JSPWiki-doc.zip file.

(Re)start tomcat.

Point your browser at http://<where your Tomcat is installed>/MyWiki/.
You should see the Main Wiki page.  See the next section if you want
to edit the pages =).

The WEB-INF/jspwiki.policy file is used to change access permissions for 
the Wiki.

Check the Apache JSPWiki website and project documentation for additional
setup and configuration suggestions.

Upgrading from previous versions
--------------------------------

Please read ReleaseNotes and the UPGRADING document available with this
distribution.

Contact
-------

Questions can be asked to JSPWiki team members and fellow users via the jspwiki-users
mailing list: See http://jspwiki.apache.org/community/mailing_lists.html.
Please use the user mailing list instead of contacting team members directly, 
and as this is a public list stored in public archives, be sure to avoid including
any sensitive information (passwords, data, etc.) in your questions.

