One of my co-workers is a big fan of Watir which I'm guessing is similar to Watij. I like Selenium, and have been considering playing with Tellurium lately.
In any case, tying any of those together with a Continuous Integration engine like CruiseControl or Hudson (my favorite) is a great way to handle functional testing for web applications. And JUnit is great for unit tests and even integration tests.
Limitations to functional web application testing:
While you can tell a user to click on "the first item in the menu on the left-hand side", telling the computer to do the same isn't so easy. Web application testing frameworks can't look at the screen and readily discern what elements on the page constitute a menu. They need more specifics on what element to interact with, and that in turn requires some knowledge of how the HTML page is constructed. And as the page changes, so can the tests.
When every little change in one part of the page breaks the tests in other, unrelated parts of page, those tests are called "brittle". Making sure the tests are more stable takes some experience, just as it does in regular unit testing. For example, use element ID or name to refer to the elements on a page, not their full XPath (could be long and unreadable as well as brittle) or their text content (if it might change).