Developing with Tomcat and Eclipse: the Definitive Guide

I'm a big fan of Jetty's clean APIs and I use it both for development and production depending on a project, but since I'm sick and tired of people bashing Tomcat just because they haven't used it or use it wrong, I put this guide together for developing webapps (but obviously mostly Tapestry) in Eclipse with Tomcat.

Here's the toolset that you should be using: Eclipse 3.6, Sysdeo's Tomcat Plugin and Tomcat 7.x ( + M2Eclipse 0.1.x depending on whether you are using Maven or not). Eclipse WTP's generic container support is dog slow and error prone, just don't use it. There are other Tomcat plugins for Eclipse but Sysdeo's plugin is the most comprehensive one. Generic tools that try to support more than one container or technology tend to copy files around for easier deployment but avoid all of that - it slows things down and is completely unnecessary given the right set of tools.

It's assumed you have Java, Eclipse and m2eclipse installed. Below we use one of Tynamo's sample modules as an example but you could use any other web application as well. If you are otherwise starting pretty much from scratch, follow these steps to set everything up:

For src/main/resources folder, set the output to the same as the source folder (i.e. src/main/resources, Eclipse doesn't have a separate checkbox for "don't copy")

For default output folder, set the output to something else than Maven default (/target/classes) so you can use both Eclipse and Maven from command line without them stepping on each other

In project properties / Tomcat

Check "Is a Tomcat Project"

Context name as you like, I often use just /ROOT for simplicity

"Subdirectory to set as web application root", set "src/main/webapp"

On "DevLoader ClassPath" tab, check activate DevLoader. Configure as appropriate, but typically "Check All" libraries, find servlet-api and uncheck it (obviously the container contains those classes and wants to load from there rather than as part of the web application).