Based on my experience with struts 1.x on the usage of logic and bean tags are troublesome and performance overhead. So, I always favor to JSTL. How about in struts 2 ? Any improvements?
In Struts 1 JSTL should be used when there is functional overlap between the S1 and JSTL tags--recall that the S1 tags were created before JSTL existed.
JSTL can also be used in S2 apps where functionality overlaps and there's more of a performance reason to do so (in S1 the tags weren't significantly slower than JSTL for most purposes). The expression language currently used in S2 (OGNL) is fairly slow, however. I haven't had serious performance issues in my own applications, but some users have on tag-heavy pages.