Include directive vs Include standard action

Directive
<%@ include file=”Header.jsp”%>
This says “Insert complete Header.jsp into this point in THIS page
The include directive happens at translation time.
The include directive inserts the source at the translation time.

Action
<jsp:include page=”Header.jsp” />
This says “Insert the response of Header.jsp into this page at this point.
<jsp:include> happens at runtime.
Jsp:include inserts the response at the Runtime.

You can send parameter value for the header.jsp using the standard action tag
<jsp:include page=”Header.jsp”>
          <jsp:param name=”subTitle” value=”We take the sting out of SOAP.” />

</jsp:include>

With the include directive, there is NO difference between you opening your
JSP page and pasting in the contents of “Header.jsp”. In other words, it really is
just as though you duplicated the code from the header file into your other JSP.
Except the Container does it at translation time for you, so that you don’t have
to duplicate the code everywhere. You can write all your pages with an include
directive, and the Container will go through the trouble of copying the header
code into each JSP before translating and compiling the generated servlet.

But <jsp:include> is a completely different story. Rather than copying in the
source code from “Header.jsp”, the include standard action inserts the response
of “Header.jsp”, at runtime. The key to <jsp:include> is that the Container is
creating a RequestDispatcher from the page attribute and applying the include()
method. The dispatched/included JSP executes against the same request and
response objects, within the same thread.

<jsp:forward> standard action
You CAN forward from one JSP to another. Or from one
JSP to a servlet. Or from one JSP to any other resource in

your web app.