Bei jedem Ihrer Beispiele geschieht genau das:
<c:out value="${java.lang.Math.PI}" />
Es wird nach der Variablen oder Bean mit dem Namen java gesucht und versucht, eine Methode namens lang auszuführen. Wahrscheinlich gibt es in Ihrer JSP-Seite keine Variable oder Bean mit dem Namen Java, so dass es keine Ausgabe gibt.
${java.lang.Math.PI}
Dies ist dasselbe wie oben, nur eben in EL geschrieben. Es ist dasselbe, weil es nach einer Variablen oder Bean namens java sucht.
<%= java.lang.Math.PI %>
Das bedeutet, dass während der JSP-Kompilierung java.lang.Math.PI berechnet und in die JSP geschrieben wird. Wenn Sie sich die kompilierte JSP ansehen, sehen Sie den Wert dort geschrieben.
Im dritten Beispiel wird der Ausdruck so ausgewertet, als befände man sich in einer Java-Klasse. Die ersten beiden Beispiele erwarten, dass "java" ein Variablenname ist.