JSP programming best practice: Use an appropriate inclusion mechanism
JSP supports two inclusion mechanisms: Static include and Dynamic include.
- Static include
- The static include directive causes the content of the specified file
to be textually inserted into the including file at compile time, that is,
when the JSP page is translated into a Java servlet. JSP elements of the included
file are thus effectively visible anywhere in the resulting JSP page and must
have unique names to avoid name clashes. Typical Web containers are unable
to detect changes made to the included file at run time, and hence the including
file needs to be updated for the changes to take effect. The syntax for the
static include directive is as follows:
<%@ include file=" filename.jspf" %>
- Dynamic include
- The dynamic include actions include the response generated by executing
the specified page during the request processing phase, that is, when the
including page is requested by the user. Since what is included is the response generated
by the page, and not the content of the page itself, scripting
variables declared in the included file are not visible elsewhere in the resulting
JSP page. Changes made to the included file, on the other hand, are transparent
to the including file. Two alternatives exist for the dynamic include:
- <c:import url=" filename.jsp"> ... </c:import>
- <jsp:include page=" filename.jsp" flush=" true|false"> ... </jsp:include>
Unlike jsp:include, the c:import action provides a mechanism to access resources that can be specified through a URL, thus allowing page authors to get access to resources that reside outside the Web application. On the other hand, it lacks the ability to flush the response. Finally, c:import is comparatively more heavyweight and is therefore not appropriate when a lightweight solution is sought.
Important: If your WebSphere Commerce site uses Dynamic caching, you must flush the response. To do so:- Precede and follow every c:import action with a <%out.flush();%> scriptlet.
- Set flush="true" in your jsp:include actions.
Whereas the dynamic include is more flexible than the static include, it falls short in terms of efficiency. As a consequence, use static includes whenever possible so as to avoid performance issues.