i'm not the expert on these things, but i'll try to answer your
questions as best i can. i'm sure if i say something that is blatantly
wrong, i will be corrected ;) the information here is pretty much what
i've figured out for myself using tomcat over the last year or so...
>
> I am using mod_jk right now and I am wondering why
> ajp12, ajp13, and mod_webapp protocols were originally
> introduced.
>
i believe the original reason why mod_jserv and ajp were introduced was
for connecting the apache web server to the old JServ servlet
container. when tomcat showed up, mod_jserv was used for it too. i
think mod_jk, which added support for more web servers (i.e.
iis/netscape) was then introduced as a replacement for mod_jserv. ajp13
is an evolution (revolution??) of ajp12. it's faster.
> http protocol can be passed through most firewalls
> whereas ajp12 and ajp13 can not. In some real world
> websites, there are lots of cases that there is an
> inner firewall between Web server and web container.
>
> http protocol version 1.1's "keepalive" could be used
> for consistant connections.
>
> Almost all the available web containers have at least
> one http listener while some of them do not support
> ajpxx protocols, such as the current Orion.
>
i'm not sure what this has to do with mod_jk/ajp...
> I implemented an http worker in mod_jk by myself and
> it works fine for me.
>
> So, my question is, what are the advantages of ajp12,
> ajp13, and mod_webapp protocols versus http protocol?
>
i think you may have missed the point of ajp. mod_jk and ajp are used
to connect web servers to tomcat. essentially what they do is intercept
http requests in a web server and forward them to tomcat to be handled
there. i'm not even sure if http could have been used to do this... it
would have been weird, i think, because you have to forward all
information about the request (headers, posted data, etc.) and if you
made another http request from the web server to tomcat, you'd have a
whole new set of headers and you'd have to have something to decode that
request on the tomcat side and ... well, i'm rambling. i think ajp is
just a cleaner and more efficient approach. also, i don't even know if
the original JServ handled http...
anyway, as i said, i'm not the expert on this subject, so hopefully
someone with a better history with mod_jserv/mod_jk/ajp will correct any
lies i may have told :)
also, you should take a look at the documentation, particularly the
mod_jk-howto and the ajp13 docs that come with tomcat 3.x (maybe only
3.3...).