JavaServer Pages (JSP) is a Java technology that allows software developers to dynamically generate HTML, XML or other types of documents in response to a Web client request. The technology allows Java code and certain pre-defined actions to be embedded into static content.
The JSP syntax adds additional XML-like tags, called JSP actions, to be used to invoke built-in functionality. Additionally, the technology allows for the creation of JSP tag libraries that act as extensions to the standard HTML or XML tags. Tag libraries provide a platform independent way of extending the capabilities of a Web server.
JSPs are compiled into Java Servlets by a JSP compiler. A JSP compiler may generate a servlet in Java code that is then compiled by the Java compiler, or it may generate byte code for the servlet directly. JSPs can also be interpreted on-the-fly reducing the time taken to reload changes.
JSP and Servlets
Architecturally, JSP may be viewed as a high-level abstraction of servlets that is implemented as an extension of the Servlet 2.1 API. Both servlets and JSPs were originally developed at Sun Microsystems. Starting with version 1.2 of the JSP specification, JavaServer Pages have been developed under the Java Community Process. JSR 53 defines both the JSP 1.2 and Servlet 2.3 specifications and JSR 152 defines the JSP 2.0 specification. As of May 2006 the JSP 2.1 specification has been released under JSR 245 as part of Java EE 5.
[edit]
JSP syntax
A JavaServer Page may be broken down into the following pieces:
static data such as HTML
JSP directives such as the include directive
JSP scripting elements and variables
JSP actions
custom tags with correct library
JSP directives control how the JSP compiler generates the servlet. The following directives are available:
include
The include directive informs the JSP compiler to include a complete file into the current file. It is as if the contents of the included file were pasted directly into the original file. This functionality is similar to the one provided by the C preprocessor. Included files generally have the extension "jspf" (for JSP Fragment):
<%@ include file="somefile.jspf" %>
page
There are several options to the page directive.
import
Results in a Java import statement being inserted into the resulting file.
contentType
specifies the content that is generated. This should be used if HTML is not used or if the character set is not the default character set.
errorPage
Indicates the page that will be shown if an exception occurs while processing the HTTP request.
isErrorPage
If set to true, it indicates that this is the error page. Default value is false.
isThreadSafe
Indicates if the resulting servlet is thread safe.
autoFlush
To autoflush the contents.A value of true, the default, indicates that the buffer should be flushed when it is full. A value of false, rarely used, indicates that an exception should be thrown when the buffer overflows. A value of false is illegal when also using buffer="none".
session
To maintain session. A value of true (the default) indicates that the predefined variable session (of type HttpSession) should be bound to the existing session if one exists, otherwise a new session should be created and bound to it. A value of false indicates that no sessions will be used, and attempts to access the variable session will result in errors at the time the JSP page is translated into a servlet.
buffer
To set Buffer Size. The default is 8k and it is advisable that you increase it.
isELIgnored
Defines whether EL expressions are ignored when the JSP is translated.
language
Defines the scripting language used in scriptlets, expressions and declarations. Right now, the only possible value is "java".
extends
Defines the superclass of the class this JSP will become. You won't use this unless you REALLY know what you're doing - it overrides the class hierarchy provided by the Container.
info
Defines a String that gets put into the translated page, just so that you can get it using the generated servlet's inherited getServletInfo() method.
pageEncoding
Defines the character encoding for the JSP. The default is "ISO-8859-1"(unless the contentType attribute already defines a character encoding, or the page uses XML document syntax).
<%@ page import="java.util.*" %> <%-- example import --%>
<%@ page contentType="text/html" %> <%-- example contentType --%>
<%@ page isErrorPage="false" %> <%-- example for non error page --%>
<%@ page isThreadSafe="true" %> <%-- example for a thread safe JSP --%>
<%@ page session="true" %> <%-- example for using session binding --%>
<%@ page autoFlush="true" %> <%-- example for setting autoFlush --%>
<%@ page buffer="20kb" %> <%-- example for setting Buffer Size --%>
Note: Only the "import" page directive can be used multiple times in the same JSP.
taglib
The taglib directive indicates that a JSP tag library is to be used. The directive requires that a prefix be specified (much like a namespace in C++) and the URI for the tag library description.
<%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>
[edit]
JSP scripting elements and objects
[edit]
JSP implicit objects
The following JSP implicit objects are exposed by the JSP container and can be referenced by the programmer:
out
The JspWriter used to write the data to the response stream(output page).
page
The servlet itself.
pageContext
A PageContext instance that contains data associated with the whole page. A given HTML page may be passed among multiple JSPs.
request
The HttpServletRequest object that provides HTTP request information.
response
The HttpServletResponse object that can be used to send data back to the client.
session
The HttpSession object that can be used to track information about a user from one request to another.
config
Provides servlet configuration data.
application
Data shared by all JSPs and servlets in the application.
exception
Exceptions not caught by application code .
[edit]
Scripting elements
There are three basic kinds of scripting elements that allow java code to be inserted directly into the servlet.
A declaration tag places a variable definition inside the body of the java servlet class. Static data members may be defined as well. Also inner classes should be defined here.
<%! int serverInstanceVariable = 1; %>

