Java Programming, Lecture Notes # 760
April 25, 2000
With JSP, fragments of Java code embedded into special HTML tags are presented to a JSP engine. The JSP engine automatically creates, compiles, and executes servlets to implement the behavior of the combined HTML and embedded Java code.
Previous Lessons
Previous lessons have explained the use of the following syntax elements:
Whenever the <jsp.forward> tag is encountered by the JSP engine, the engine forwards the request that was sent to the JSP file to another file. The JSP engine doesn't process the remainder of the current JSP file.
The output buffer
Anything that has been written into the output buffer by the current JSP file will be lost.
There are two possible outcomes regarding the output buffer. If the output from the compiled JSP file is buffered, the buffer is cleared before the request is forwarded.
If the output is not buffered (page directive with buffer=none), and if the buffer is not empty, the use of the <jsp.forward> tag will result in an IllegalStateException being thrown.
Syntax
The syntax of the <jsp.forward> tag is as follows:
<jsp:forward page=
"{ relativeURL | <%= expression %> }" />
The value of the page attribute can either be a String representing a relative URL, or a JSP expression that evaluates to a string representing a relative URL.
The relative URL
Here is what Sun has to say about a relative URL.
"The relative URL looks like a path - it cannot contain a protocol name, port number, or domain name. The URL can be absolute or relative to the current JSP file. If it is absolute (beginning with a /), the path is resolved by your Web or application server." |
<jsp:forward page="jsp007a.jsp"
/>
<jsp:forward page="jsp007a.htm" /> |
I will discuss the behavior of these two examples in detail in the next section.
The second JSP page forwards the request to an HTML page, also clearing the output buffer in the process.
Finally, the contents of the HTML page are placed in the output buffer and sent back to the client that requested the first JSP page.
The first JSP file
Figure 1 shows the first JSP page in the sequence. This page is contained in a file named jsp007.jsp. I have highlighted the forwarding tag in this file using boldface.
I also highlighted a paragraph tag and its content in green, immediately ahead of the forwarding tag.
Significance of the green code
The significance of the green line of code is that even though it is placed in the output buffer before the forwarding action occurs, we will see later that it is never sent back to the client. This is because the output buffer is cleared when the forwarding action occurs.
Significance of the red code
I also highlighted a paragraph tag and its content in red. The significance of the red line of code is that it is never executed. As soon as the forwarding tag is encountered, all remaining code in the current JSP page is ignored.
The second JSP file
Figure 2 shows the second JSP page in the sequence. This page is contained in a file named jsp007a.jsp. As in the Figure 1, I have highlighted the forwarding tag in boldface.
Output from green code is lost
The output produced by the two green statements is lost when the forwarding action occurs, because the output buffer is cleared at that point in time.
Red code is never executed
Similarly, the red statement is never executed because all remaining code in this file is ignored when the forwarding action in the previous line occurs.
The HTML file
Figure 3 shows the HTML page that is the last stop in this "leap frog" sequence. This page is contained in a file named jsp007a.htm.
This is a very simple HTML page that places two lines of output in the output buffer to be sent back to the client who originally requested the JSP page shown above in Figure 1.
The output
Figure 4 shows a replica of the output that appears in the browser window. As you can see, this is the output that you would expect from the HTML file shown in Figure 3 above.
More importantly, as you can also see, none of the output produced by either of the JSP files appears in the browser window. This is because the output buffer is cleared each time a forwarding action occurs.
Output comments:
<!-- comment [ <%= expression
%> ] -->
Hidden comments:
<%-- hidden comment --%>
Declarations:
<%! declarations %>
Expressions:
<%= expression %>
Scriptlets:
<% code fragment %>
Include Directive:
<%@ include file="relativeURL"
%>
Page Directive:
<%@ page
[ language="java" ]
[ extends="package.class"
]
[ import= "{ package.class
|
package.*
}, ..." ]
[ session="true|false"
]
[ buffer="none|8kb|sizekb"
]
[ autoFlush="true|false"
]
[ isThreadSafe="true|false"
]
[ info="text" ]
[ errorPage="relativeURL"
]
[ contentType="mimeType
[
;charset=characterSet
]" |
"text/html
; charset=ISO-8859-1" ]
[ isErrorPage="true|false"
]
%>
jsp:forward tag:
<jsp:forward page=
"{
relativeURL | <%= expression %> }" />
Copyright 2000, Richard G. Baldwin. Reproduction in whole or in part in any form or medium without express written permission from Richard Baldwin is prohibited.
Richard has participated in numerous consulting projects involving Java, XML, or a combination of the two. He frequently provides onsite Java and/or XML training at the high-tech companies located in and around Austin, Texas. He is the author of Baldwin's Java Programming Tutorials, which has gained a worldwide following among experienced and aspiring Java programmers. He has also published articles on Java Programming in Java Pro magazine.
Richard holds an MSEE degree from Southern Methodist University and has many years of experience in the application of computer technology to real-world problems.
-end-