When you use scripting elements you must be prepared to deal with a new class of syntax errors. The scripting code is inserted into the servlet code, generated based on the JSP page in the translation-phase, more or less as-is. A syntax error in a scripting element may therefore result in an error the compiler can’t report in a sensible way.
Directives and action elements don’t have this problem. The container reads the JSP page and generates servlet code by replacing all JSP directives and action elements with code that produces the appropriate result. To do this, it needs to analyze these types of elements in detail. If there’s a syntax error in a directive or action element, it can easily tell which element is incorrect (as you saw in Chapter 9). A syntax error in a scripting element, on the other hand, isn’t discovered when the JSP page is read, but instead when the generated servlet is compiled. The compiler reports an error in terms of its location in the generated servlet code (as opposed to the location in the JSP page), with messages that don’t always make sense to a JSP page author.
Before we look at some real error examples, let’s briefly look at how the scripting code is embedded in the generated servlet to really understand the problem. Example 15-6 shows a simple JSP page that uses all three scripting element types.
Example 15-6. JSP page with all scripting element types (allinone.jsp)
<%@ page language="java" contentType="text/html" ...