Conditionally Generating Output Using JSTL in a JSP Page

Any non-JSP code in a JSP file is called template text and is automatically written to the output stream. The JSTL tags <c:if> and <c:choose> make it possible to dynamically generate template text depending on a condition. The <c:if> tag generates its body if the expression in the test attribute evaluates to the boolean value true or the string value "true":
<%-- Declare the core library --%>
<%@ taglib uri="/WEB-INF/tld/c.tld" prefix="c" %>

<%-- Simple if conditions --%>
<c:if test='${param.p == "someValue"}'>
    Generate this template text if p equals someValue
</c:if>

<c:if test='${param.p}'>
    Generate this template text if p equals "true"
</c:if>
An if/else action requires the use of the <c:choose> tag:
<%-- A simple if/else condition --%>
<c:choose>
    <c:when test='${param.p == "someValue"}'>
        Generate this template text if p equals someValue
    </c:when>
    <c:otherwise>
        Otherwise generate this template text
    </c:otherwise>
</c:choose>
Multiple conditions can be evaluated using the <c:choose> tag:
<c:choose>
    <c:when test='${param.p == "0"}'>
        Generate this template text if p equals 0
    </c:when>
    <c:when test='${param.p == "1"}'>
        Generate this template text if p equals 1
    </c:when>
    <c:otherwise>
       Generate this template text if p equals anything else
    </c:otherwise>
</c:choose>
The <c:out> can also be used to conditionally generate template text. If the value attribute is null, a default value (if specified) is generated. The default value can be specified using the default attribute or can be specified in the body content. This example demonstrates both methods:
<%-- Default value in an attribute --%>
<c:out value='${param.p}' default="Generate this if p is null" />

<%-- Default value in the body content --%>
<c:out value='${param.p}'>
    Generate this if p is null
</c:out>