17.3 Body Tags

Various uses of body tags can make a difference in performance.

17.3.1 Use Include Directive, Not Action

The include directive <%@ include file="somefile.html" %> is a compile-time action, so it doesn't affect runtime performance (it takes effect when the JSP is compiled into a servlet). The include action <jsp:include page="somefile.jsp" flush="true"/> is a runtime action, so it adds overhead and decreases performance. Use the include directive whenever possible.

17.3.2 Minimize Scope of useBean Action

The useBean action has a scope associated with the bean created by the action. The scope defines the lifetime of the bean. Minimize the scope to minimize the resources taken by the beane.g., <jsp:useBean id="mybean" scope="page" />. You will need to use a wider scope (request, session, or application) to use beans with pages that are included.

17.3.3 Minimize Custom Tags

Custom tags have a performance cost, but they are useful. Try to minimize custom tags to only those required. BodyTags are more costly to performance than simpler custom tags. Using BodyTags to iterate on the page section contents makes the page significantly slower. (On the other hand, Jim Elliott wanted me to point out that custom tags are so much better than the alternative of mixing presentation and logic that eliminating custom tags may not be worth the performance gain.)

17.3.4 Use Redirects Versus Forwards

Redirect s (using sendRedirect( )) are slower than forwards (<jsp:forward ...>) because the browser has to make a new request for the redirect. The forward is a simple call that is internal to the servlet, and a redirect tells the browser to make a new request to the redirected target page.