tomcat除了基本的下载之外,还有一些比较重要的模块下载。
1.mod_jk
Tomcat 可以替代 Apache,Nginx这种Web服务器,这个是肯定没有问题的,对于静态资源(也就是html,css这种),在Tomcat中提供了DefaultServlet作为url的路由,效率比较低。因此,在项目中可以放 Apache,Nginx这种高效的Web服务器的前提下,可以将Tomcat仅仅作为web容器,支撑JSP,Servlet的java后端业务逻辑,在前端摆上 Apache,Nginx。
对于APache而言,并不支持JSP,Servlet,而需要类似PHP这种模块一样,编写插件安装在Apache的扩展中,对于PHP是php的解析模块,模块直接可以将php语言解析成html,而无需任何其他的服务器,而JAVA不是一样,即使JSP这种脚本语言,它并不解析成html,而是解析成Servlet,Servlet是JAVA EE规范的一种组件,它既然遵循JAVA EE规范,那么它首先要运行在JVM中,这就是tomcat的Apache插件和PHP插件的本质区别,PHP插件直接装到Apache中,就像给Apache服务器增添了php解析的功能,而Tomcat插件顶多算是一个连接Tomcat和Apache的桥梁,在桥梁中还需要架设协议。
这个插件的名就是mod_jk,需要进行下载:

可以看到Tomcat提供了源码方式和二进制包的下载。
二进制包其实就是mod_jk.so这个文件,该文件是编译好的,基于不同的操作系统,直接安装在Apache上就OK了;
而由于不同的操作系统,特别是Linux这些衍生版,最好采用源码编译的方式进行,这依赖于操作系统底层的库。
对于mod_jk,其实这个文件是安装在Apache的modules里面,但是要想配置成功,还需要其它的配置文件。
a.需要在Apache的http.conf中,最后加上一行 Include conf/mod_jk.conf,这个 mod_jk.conf文件是需要创建的
虽然也可以在http.conf中写,但是最好还是将其分开为好。
b.mod_jk.conf中就定义了Tomcat搞出来的插件开放的一些配置,例如JK的配置,JK插件的位置,负载均衡器的名称
等等,这些配置都是和JK插件相关的。
c.需要创建worker.properties,这个配置文件是与负载均衡算法相关的,配置的内容为指定哪个Tomcat,端口是什么
模块和Tomcat通讯的协议是什么(AJP12或者是AJP13)等等。
d.需要创建uriworkermap.properties,这个配置文件是描述请求的servlet的path,与前面在mod_jk.conf的配置的哪个负载均 衡器挂钩,是否需要JK做转发。
配置的过程很简单,Tomcat这端基本不需要改什么内容,如果有静态资源,可以将静态资源拷贝一份放在前端的各个Apache中,配置http.conf即可由Apache返回html,而无需由后端的tomcat指定静态资源,这样节省了很多的力气。
2.Tomcat native

在Tomcat的老版本中,JVM的性能再6之前,一直被人诟病,经常有C++的人说,我使用C++发送网络包,和JAVA发送网络包,差距10倍这种话,但这些随着JVM性能的提升烟消云散,从目前的JVM的性能来看,其JNI调用的时间消耗和整个的系统级的调用比起来,占据的时间很低,而原来的Tomcat Native的主要作用是:
Tomcat can use the Apache Portable Runtime to provide superior scalability, performance, and better integration with native server technologies. The Apache Portable Runtime is a highly portable library that is at the heart of Apache HTTP Server 2.x. APR has many uses, including access to advanced IO functionality (such as sendfile, epoll and OpenSSL),OS level functionality (random number generation, system status, etc), and native process handling (shared memory, NT pipes and Unix sockets).
上述官网的这段话,主要分析出来的是,Tomcat的native包主要是基于操作系统调用,IO的高级功能,如sendfile,epoll,还有能和openssl集成用以SSL的双向认证,其次,使用了很多的操作系统机制,如随机数,系统状态,共享内存,管道,Unix的socket等等。
可以看到,这些机制确实非常的高效,但是需要注意一点的是,这些机制随着JVM的升级,很多都加到了JVM的实现中了,例如epoll技术,在JDK7之后的在linux系统中的NIO应该是默认的选项,这些功能的可能会导致这个Tomcat Native确实没有以前那么优势;
可以看到网上的一些评测:
http://stackoverflow.com/questions/3927088/performance-benefits-of-apache-tomcat-native-connectors
基本上没有什么差异。当你的java程序逻辑很简单,并没有调用更多的消耗系统资源的系统调用,并且JVM内部逻辑其实也是这些系统调用,那么这个结果其实一点都不够意外。
但是类似于SSL这种交互过程,一次连接需要发送n个包,并且还有验证等环节,这个就是很好的场景,目前的Tomcat Native包其实主要也是在这种场景中,发挥了很大的作用:

一个是基于Keep alive的NIO,还有就是SSL,TLS协议的场景,并且需要有openssl的库。
当你有对SSL优化的,可以配置这个APR的连接器试一试。
3.Tomcat taglib

jstl规范最开始独立了一段时间,后来合并到el规范中,作为其中的一章。
对于Tomcat来说,其标签实现是作为独立的taglib来实现的,并没有涵盖在tomcat的Core下载的lib中:

如果项目中需要使用大量的taglib,需要将这些lib引入到tomcathome/lib目录下(或者一些项目组一般都会
在自己的项目的Web-inf/lib下面放自己的taglib的实现)
总结一下,Tomcat的可以下载的内容为如下:

在下载的过程中,我们经常会看到:

这些算法就是摘要算法:

OpenPGP签名推荐的摘要算法,当然SHA1和MD5系列的算法也被默认支持。
这些算法的目的是,因为Tomcat主站点容量有限,有很多的镜像站点,例如北京理工大学的站点,还有一些,
当你下载完文件之后,很有可能你这个站点是假冒的,或者修改了一些文件中的东西,做一些广告,
你下载的这个key就是和你文件经过摘要算法产生的字符串唯一对应的,当你下载的文件被修改后,
你使用java或者其它语言的MD5和SHA1程序进行计算,肯定不一致。




