The whole Enterprise mentality (aside from the many ways in which it is already monolithically stupid) of deployables & artifacts &c. is all very nice, but you can't build a development cycle around that. That's why PHP and RoR is so nice. To continue incoherently:
  • How do you implement visitor pattern widget rendering when what your visitor does, is output HTML? If you're trying to play nice with JSP?
  • In fact, the whole template/code dichotomy is false.
  • Why can't you write JSP functions?
  • In scripting languages, you can have your configuration in the same language as your code. Because Java is compiled, you can't.
  • 90% of webapp operations involve reading from storage, interleaving the data with HTML, and outputting the response. Why on Earth would you want an MVC paradigm in the middle of that? Putting the model in memory increases your memory load, the controller does nothing interesting. How did this become best practice in the world of Java for simple read views?
  • JSTL is crap. The Collections support is pitiful, it can't even support Collection.contains(), and (what would actually fix this stuff) you can't invoke arbitrary methods. When you see people making their configuration classes override Maps and doing crap like this and this to work around these stupid self-imposed limitations, then you know you've messed up.

AND, maybe I'm wrong, but why aren't JSTL variables as 'scriptlet' variables, like most semi-sane tag libraries (e.g. Struts) does? WTF. Oh dear, I've lost my temper again.