I want to write a simple web application, on J2EE, with these characteristics:
- I don't need any AJAX, and it should even work with JavaScript disabled on the browser.
- It is a simple CRUD application
- I would need full control on the way each element is laid out on the page - no compromise on the GUI's look and feel.
- I can use plain old JDBC for data access - no o/r mappers necessary
- Bookmarking of pages is necessary (wherever it makes sense to bookmark, that is).
- Many of my users use tabbed browsing very much.
What I'd like the framework to do is:
- Give me a nice abstraction to retrieve GET and POST parameters
- Give me a nice facility to display validation errors and other errors to the user
- Give a set of standard safety features - prevent cross-site scripting, prevent the user from setting a dropdown input to a value that isn't there in the dropdown, et.al
- Be performant, scale well for over 200 concurrent users, on a not-so-powerful server. (no clusters - single node, a shared app server with multiple production applications)
- Be stable; because I'd like to have that application running without a major refactor for at least 3-4 years
I looked at a few frameworks, and this is what I felt..
- Plain Servlets/JSP - I need to code everything myself - this would take time, and probably have many bugs
- Struts (1.x) - Doesn't provide too many advantages over the plain servlet approach; while it does map POST and GET parameters to form beans, the other features I'm looking for aren't there; and I need to invest a lot of time coding them myself
- JSF - I'm scared of it because of the performance problem I've read about. It seems like the view construction and maintenance takes up too much memory. Also, JSF won't work well with bookmarks and tabbed browsers.
- Tapestry - I took a look at Tapestry 5. While it looked good, it too seemed to be incompatible with tabbed browsing and bookmarking. While there is certainly support for "activation context", it is only a single string. It can't restore the state with GET parameters and hidden form fields (yet). Additionally, there seemed to be concern about the longevity of the framework - it appeared that it evolves without backward compatibility.
- Apache Turbine - It looked good at first; but the fact that it's quite old and there's no much activity going on scares me.
Any suggestions on what would be good for me? Thank you!
PS: I'm constrained to use one that's licensed under Apache license (v2, preferably) or BSD license