JK is a replacement to the elderly mod_jserv. It was a completely new Tomcat-Apache plug-in that handles the communication between Tomcat and Apache.
The newest JK2 is a rewrite of JK . The native part has been completly restructured and the configuration has been simplified a lot.
JK is more than just an apache module, since it could be used with majors WebServer :
JK was develop to overcome many limitations of its ancestor, mod_jserv .
mod_jserv was too complex and because it was ported from Apache/JServ, it brought with it lots of JServ specific bits that aren't needed by Apache.
Where mod_jserv supported only Apache webservers on Unix OS, JK supports much more web servers and operating systems through via a compatibility layer named the JK library . The layered approach provided by the JK library makes it easier to support many different webservers and OS.
JK offer better support for SSL, that's was a problem with mod_jserv which couldn't reliably identify whether a request was made via HTTP or HTTPS.
JK can, using the newer Ajpv13 protocol which relay many SSL informations required by servlet 2.2 and 2.3 specs.
JK offers a lot of different and flexible communications between a Web Server and the Tomcat Servlet Engine and could be used today with all of the ASF Tomcat Engines, 3.2.x , 3.3.x , 4.0.x , 4.1.x and 5.x
JK2 is a full rewrite of JK and is much more powerfull.
Even if it works with Apache 1.3, JK2 has been developed with Apache 2.0 in mind, and sus is better suited for multi-threaded servers like IIS, NES/iPlanet.
JK2 has a better separation between protocol and physical layer. As such JK2 support fast unix-socket, and could be extended to support others communications channels. Better it's suited for JNI and JDK 1.4 fast IO APIs
JK2 could be monitored via special URLs (like mod_status)
The alternative ways are better described in mod_webapp documentation.
Check webapp site for it and then decide if you want to go on reading.
The big advantage of mod_webapp is that is very easy to configure, has a well defined protocol named WARP , does not care about the old crappy protocols used in Tomcat-3.x and so. But it would be possible to implement the WARP protocol in JK2 ;-))
The disadvantage is that it requires the Apache Portable Runtime which is still only easily available via Apache 2.0 and that it didn't support webservers like IIS, NES/iPlanet or Domino.