

                        JSPWiki documentation
                        =====================

                         $Revision: 1.31 $
                             $Date: 2007-05-05 10:35:45 $
                           $Author: jalkanen $

What is it?
-----------

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. 


    Copyright (C) 2001-2007 JSPWiki development team

    This program is free software; you can redistribute it and/or
    modify it under the terms of the GNU Lesser General Public License
    as published by the Free Software Foundation; either version 2.1
    of the License, or (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public
    License along with this program; if not, write to the Free
    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
    02111-1307 USA


The license file can be found in doc/LICENSE.

(No, the LGPL does not mean that all the content in your new wiki will
be under the LGPL, anymore than any text you write using Emacs becomes
GPL.)

One small request I have.  If you really, really like this software,
donate a small amount of money to the World Wildlife Foundation
(WWF), Free Software Foundation (FSF), or Electronic Freedom
Foundation (EFF), or whichever charity is close to your heart.

The world doesn't need to become a bad place.

Oh yeah, and if you run a Wiki based on this software, let me know.
I'm always interested in hearing from my users =).


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

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

REQUIRED:

* A JSP engine that supports Servlet API 2.3.  I recommend Tomcat from
  http://jakarta.apache.org/tomcat for a really easy installation.
  Tomcat 4.x or later is supported, however, we strongly recommend
  Tomcat 5.x or later.

* 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.4+.  JDK 1.5 is recommended.


OPTIONAL:

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

* RCS versioning system installed and available in your PATH if you
  want to use RCS versioning.  It is also possible (and on Windows, it
  is even recommended) to use the VersioningFileProvider, which does
  not require RCS.


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://jakarta.apache.org/ (or any other servlet
   container)

2) Drop the JSPWiki.war file in your <tomcat home>/webapps/ directory.
   Optional: Rename the JSPWiki.war if you want your URL to end with
   something else than /JSPWiki/.  For example, to get it called "wiki"
   just rename the "JSPWiki.war" file to "wiki.war".

3) Point your browser at http://<myhost>/JSPWiki/Install.jsp
   (Or, if you renamed it in the previous phase, use something like
   http://<myhost>/wiki/Install.jsp)

4) Answer a couple of simple questions

5) Restart your container

6) Point your browser to http://<myhost>/JSPWiki/ (or whatever name you
   chose in point 2)

That's it!


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

First, install a JSP engine and a web server.  You can download Tomcat
from http://jakarta.apache.org/tomcat/.  This software was built
originally on top of Tomcat 5.5, but probably most other versions
work, too, and most other JSP containers.

After you've installed the engine and checked that it works, you just
make a subdirectory under $TOMCAT_HOME/webapps/.  For example, if you
want your application to be called 'MyWiki', just create a directory
called 'MyWiki', then extract all files from the war files into that
directory, preserving the directory structure.

Edit the WEB-INF/jspwiki.properties file to your liking.  The only
thing you need to set is the directory where you want your wiki pages
to be stored.  I recommend a directory that is regularly backed up.

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 =).


Installation with Windows
-------------------------

If you are using a version of Microsoft Windows, you'll find that
getting RCS up and running may be a bit problematic, and thus we
recommend the VersioningFileProvider.

All JSPWiki documentation is in the web; please see
http://doc.jspwiki.org/2.4/wiki/WindowsInstall

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

Please read ReleaseNotes.

All JSPWiki documentation is in the web; please see
http://doc.jspwiki.org/2.4/


Configuring JSPWiki
-------------------

All configuration information is kept in WEB_INF/jspwiki.properties.
The file is pretty well documented, so I recommend you read it through
first. 

There are also some auxiliary configuration files, such as filters.xml.

Also, there is a far more detailed documentation in the web:

http://doc.jspwiki.org/2.4/


Where to go next aka. where is the rest of the documentation?
-------------------------------------------------------------

The rest of the documentation is at

http://doc.jspwiki.org/2.4/


Acknowledgements
----------------

This product includes software developed by the Apache Software Foundation 
(http://www.apache.org/).  See doc/LICENCE.Apache for more information.

This product includes software developed by the OpenSymphony Group
(http://www.opensymphony.org/).  See doc/LICENSE.OpenSymphony for more
information. 

There have been many contributors so far.  Especially thanks go to
Andrew Jaquith, Dirk Fredericx, Murray Altheim, Olaf Kock, Mark
Rawling, Dan Frankowski, Terry Steichen, Chuck Smith, Christoph Sauer,
Erik Bunn, Niilo Neuvo, Alain Ravet, Kalle Kivimaa, Jeff Phillips,
Mahlen Morris, Paul Downes, Michael Gentry, John Volkar, Torsten
Hildebrandt, and Foster Schucker who have given me quite a lot of
support and/or code.  There are also a number of other people who have
generously given their time, and you can find hopefully all of their
names in the ChangeLog.


Contact
-------

JSPWiki authors can be contacted on the jspwiki-users mailing list.
You can see the instructions on http://www.jspwiki.org/wiki/JSPWikiMailingList.

The mailing list should also be your primary place to ask support questions.
There are many wise and knowledgeable people on that list.

If all else fails, feel free to send me (Janne Jalkanen, the lead developer) 
direct email, at jalkanen+jspwiki@ecyrd.com.


LICENSES
========

JSPWiki is licenced under the Lesser General Public License, version
2.1.  See LICENSE.

The various Jakarta libraries are licensed under the Apache Public
License.  See http://www.apache.org/LICENSE.txt

The search_highlight.js script is licensed under the X11 (MIT)
License:

COPYRIGHT AND PERMISSION NOTICE

Copyright (c) 2002  Stuart Langridge

All rights reserved.

Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, and/or sell copies of the Software, and to permit persons
to whom the Software is furnished to do so, provided that the above
copyright notice(s) and this permission notice appear in all copies of
the Software and that both the above copyright notice(s) and this
permission notice appear in supporting documentation.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
HOLDERS INCLUDED IN THIS NOTICE BE LIABLE FOR ANY CLAIM, OR ANY
SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES WHATSOEVER
RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

Except as contained in this notice, the name of a copyright holder
shall not be used in advertising or otherwise to promote the sale, use
or other dealings in this Software without prior written authorization
of the copyright holder.

