Integrating/Improving Performances of Tomcat and IIS on Windows Server

    May 21, 2004

IIS is Microsoft’s Internet Information Server running on Windows Servers family. Tomcat is world wide used web server built on Java platform for JSP/Servlets. Due to ease of operating and maintaining IIS in windows environment, we still prefer to buy the windows server and run IIS for websites and by default we run Tomcat on port 8080 as the default installation.

Two Web Servers, Two Ports: No two applications can start server on same port so IIS and Tomcat both operates on different ports. According to preference we give default port to one of the servers. Usually we keep IIS as it is and keep Tomcat running on port 8080. This way whenever we want to refer to Jsp page, we have to put 8080 in the URL (Web addresses). This is not a good software design as it involves some hard coding of addresses and any change in future leads to modification in source files.

Software Design : Different Hard Coded addresses: To access Tomcat application we specify 8080 port, but when we have multiple portals and applications running on server and we want to integrate all under one website then hard coding becomes big issue. Its a poor software design. If someone forgets to specify the port 8080 then, 1) Page can not be found by IIS server. 2) IIS may give source code of Jsp file for download.

Performance of Tomcat and IIS: As IIS is built on native code, the execution of delivery of web contents is faster then in Tomcat. Tomcat is built on Java Virtual Machine which makes it slow. For static web content like images and static html files, Tomcat still delivers it slower then IIS. IIS delivers static web contents faster with HTTP Compression and HTTP Keep Alives and with content caching.

SSL: Setting up SSL on tomcat is again a big lengthy task as no better user interface exists as it exists for IIS. IIS is better then tomcat in view point of user’s GUI. After setting up SSL on Tomcat, for every HTTPS connections, Tomcat runs very very slow and putting huge load on system as it runs on Java Virtual Machine. Though faster machines are available in market but still when too many users visits your website, the crashing of Server is very frequent.

NTLM & Directory Security: Setting up NTLM on tomcat web applications? Isnt it time consuming and involves lots of errors? First is to program all NTLM protocol and making sure that it works on all browsers and all operating systems. Also part of web application you want to give to some users and some users you want to deny, with JNDI and other interfaces it will take hell lot of time to make such security available for Tomcat Web application. Guess what if IIS handles this NTLM & Directory Security by default and easily, how easy it would be if you could use that for tomcat?

Control of Processor Usage and Bandwidth Usage: IIS gives better control over processor usage and bandwidth usage per website. You can configure and tune every website in IIS to control the processor usage and bandwidth used by website. So even if on one website you have huge request traffic coming in, other website still serves, they do not crash down. Tomcat doesn’t offer this feature.

To overcome problems discussed above, We have found out the better solution which takes care of all problems and works as win win situation for IIS and Tomcat.

Delegation of Responsibilities: We require Tomcat only to execute Servlets and JSP files. IIS can Deliver Static Contents fast, IIS executes HTTPS (SSL) faster then Tomcat, IIS offers HTTP Keep Alive, IIS can do content caching and HTTP Compression.

How to achieve above solution?

For Single Host:

1) Create a Website in IIS, point it to ROOT directory of WebApps folder, and for every other folders in WebApps, create virtual directory under this website.

2) Use JspISAPI filter to proxy the jsp requests to tomcat. Detailed configuration is given on the website.

For Many Virtual Hosts:

1) Create websites for every virtual hosts existing in Server. xml file, and point every website to ROOT of every virtual hosts.

2) Use JspISAPI filter to proxy the jsp requests to tomcat. Detailed configuration is given on the website.

Benefits: After applying this ISAPI filter on IIS, you get following benefits.

1) You don’t need to specify 8080 in your addresses, it helps in improved software design.

2) IIS delivers static contents faster then Tomcat, thus saving your processor usage for other websites and processes.

3) You can control bandwidth and process of websites having jsp/servlets.

4) This IIS ISAPI dll makes Tomcat transparent to the user.

5) You can configure SSL easily on IIS, no need to do any changes on Tomcat, block the port 8080 on your firewall.

6) NTLM & Directory Security, no need to program anything in java or JSP, get it done easily through IIS

7) Execution of HTTPS sessions of JSP is faster through IIS rather then on Tomcat.

8) IIS by default offers HTTP Keep Alives, improving the performance.

9) IIS also offers HTTP Compression and various modes of caching and content expiration.

More Info or help at

Jayant Hudar and Akash Kava Are Internet marketeers.
there Email is one of the best ever email service
available on the internet.
for more details or mailto: