I know a best choice for you to solve the problem -- RAQ Report.
With it, you need only 2 steps:
1. Set rows and columns you want to freeze as "table head rows" and "table head columns".
2. Set needScroll="yes" in tag properties.
Have a try of free report journey at http://www.raqsoft.com/[/url].
RAQ Report: Web-based Excel-like Java reporting tool[/url]