Tutorials - Java Server Pages Technology

JavaServer Pages
JavaServer Pages (JSP) technology is the Java
platform technology for delivering dynamic content to web clients in a
portable, secure and well-defined way. The JavaServer Pages
specification extends the Java Servlet API to provide web application
developers with a robust framework for creating dynamic web content on
the server using HTML, and XML templates, and Java code, which is
secure, fast, and independent of server platforms. JSP has been built
on top of the Servlet API and utilizes Servlet semantics. JSP has
become the preferred request handler and response mechanism. Although
JSP technology is going to be a powerful successor to basic Servlets,
they have an evolutionary relationship and can be used in a
cooperative and complementary manner.
Servlets are powerful and sometimes they are
a bit cumbersome when it comes to generating complex HTML. Most
servlets contain a little code that handles application logic and a
lot more code that handles output formatting. This can make it
difficult to separate and reuse portions of the code when a different
output format is needed. For these reasons, web application developers
turn towards JSP as their preferred servlet environment.
Evolution of Web Applications
Over the last few years, web server
applications have evolved from static to dynamic applications. This
evolution became necessary due to some deficiencies in earlier web
site design. For example, to put more of business processes on the
web, whether in business-to-consumer (B2C) or business-to-business
(B2B) markets, conventional web site design technologies are not
enough. The main issues, every developer faces when developing web
applications, are:
1. Scalability - a successful site will have
more users and as the number of users is increasing fastly, the web
applications have to scale correspondingly.
2. Integration of data and business logic -
the web is just another way to conduct business, and so it should be
able to use the same middle-tier and data-access code.
3. Manageability - web sites just keep
getting bigger and we need some viable mechanism to manage the
ever-increasing content and its interaction with business systems.
4. Personalization - adding a personal touch
to the web page becomes an essential factor to keep our customer
coming back again. Knowing their preferences, allowing them to
configure the information they view, remembering their past
transactions or frequent search keywords are all important in
providing feedback and interaction from what is otherwise a fairly
one-sided conversation.
Apart from these general needs for a
business-oriented web site, the necessity for new technologies to
create robust, dynamic and compact server-side web applications has
been realized. The main characteristics of today's dynamic web server
applications are as follows:
1. Serve HTML and XML, and stream data to the
web client
2. Separate presentation, logic and data
3. Interface to databases, other Java
applications, CORBA, directory and mail services
4. Make use of application server middleware
to provide transactional support.
5. Track client sessions
Now let us have a look on the role of Java
technology and platform in this regard.
Java's Role for Server Applications
Sun Microsystems, having consulted many
expert partners from other related IT industries, has come out with a
number of open APIs for the technologies and services on server side.
This collection of APIs is named as Java 2 Enterprise Edition (J2EE).
The J2EE specification provides a platform for enterprise
applications, with full API support for enterprise code and guarantees
of portability between server implementations. Also it brings a clear
division between code which deals with presentation, business logic
and data.
The J2EE specification meets the needs of web
applications because it provides:
1. Rich interaction with a web server via
servlets and built-in support for sessions available in both servlets
and EJBs.
2. The use of EJBs to mirror the user
interaction with data by providing automatic session and transaction
support to EJBs operating in the EJB server.
3. Entity EJBs to represent data as an object
and seamless integration with the Java data access APIs
4. Flexible template-based output using JSP
and XML
This family of APIs mean that the final web
page can be generated from a user input request, which was processed
by a servlet or JSP and a session EJB, which represents the user's
session with the server, using data extracted from a database and put
into an entity EJB. Thus, the Java revolution of portable code and
open APIs is married with an evolution in existing products such as
database, application, mail and web servers. The wide availability of
products to run Java applications on the server has made this a
fast-moving and very competitive market, but the essential
compatibility through specifications, standard APIs and class
libraries has held. This makes server-side Java a very exciting area.
JavaServer Pages - An Overview
The JavaServer Pages 1.2 specification
provides web developers with a framework to build applications
containing dynamic web content such as HTML, DHTML, XHTML and XML. A
JSP page is a text based document containing static HTML and dynamic
actions which describe how to process a response to the client in a
more powerful and flexible manner. Most of a JSP file is plain HTML
but it also has, interspersed with it, special JSP tags.
There are many JSP tags such as:
- JSP directive denoted by <%@,
2. scriplets indicated by <% ... %>
tags and
- directive includes the contents of the
file sample.html in the response at that point.
To process a JSP file, we need a JSP engine
that can be connected with a web server or can be accommodated inside
a web server. Firstly when a web browser seeks a JSP file through an
URL from the web server, the web server recognizes the .jsp file
extension in the URL requested by the browser and understands that the
requested resource is a JavaServer Page. Then the web server passes
the request to the JSP engine. The JSP page is then translated into a
Java class, which is then compiled into a servlet.
This translation and compilation phase occurs
only when the JSP file is requested for the first time, or if it
undergoes any changes to the extent of getting retranslated and
recompiled. For each additional request of the JSP page thereafter,
the request directly goes to the servlet byte code, which is already
in memory. Thus when a request comes for a servlet, an init() method
is called when the Servlet is first loaded into the virtual machine,
to perform any global initialization that every request of the servlet
will need. Then the individual requests are sent to a service()
method, where the response is put together. The servlet creates a new
thread to run service() method for each request. The request from the
browser is converted into a Java object of type HttpServletRequest,
which is passed to the Servlet along with an HttpServletResponse
object that is used to send the response back to the browser. The
servlet code performs the operations specified by the JSP elements in
the .jsp file.
The Components of JSPs
JSP syntax is almost similar to XML syntax.
The following general rules are applicable to all JSP tags.
1. Tags have either a start tag with optional
attributes, an optional body, and a matching end tag or they have an
empty tag possibly with attributes.
2. Attribute values in the tag always appear
quoted. The special strings ' and " can be used if
quotes are a part of the attribute value itself.
Any whitespace within the body text of a
document is not significant, but is preserved, which means that any
whitespace in the JSP being translated is read and preserved during
translation into a servlet.
The character \ can be used as an escape
character in a tag, for instance, to use the % character, \% can be
used.
JavaServer Pages are text files that combine
standard HTML and new scripting tags. JSPs look like HTML, but they
get compiled into Java servlets the first time they are invoked. The
resulting servlet is a combination of HTML from the JSP file and
embedded dynamic content specified by the new tags. Everything in a
JSP page can be divided into two categories:
1. Elements that are processed on the server
2. Template data or everything other than
elements, that the engine processing the JSP engines.
Element data or that part of the JSP which is
processed on the server, can be classified into the following
categories:
1. Directives
2. Scripting elements
3. Standard actions
JSP directives serve as messages to the JSP
container from the JSP. They are used to set global values such as
class declaration, methods to be implemented, output content type,
etc. They do not produce any output to the client. All directives have
scope of the entire JSP file. That is, a directive affects the whole
JSP file, and only that JSP file. Directives are characterized by the
@ character within the tag and the general syntax is:
The three directives are page, include and
taglib.
Scripting elements are used to include
scripting code (Java code) within the JSP. They allow to declare
variables and methods, include arbitrary scripting code and evaluate
an expression. The three types of scripting element are: Declaration,
Scriptlets and Expressions.
A declaration is a block of Java code in a
JSP that is used to define class-wide variables and methods in the
generated class file. Declarations are initialized when the JSP page
is initialized and have class scope. Anything defined in a declaration
is available throughout the JSP, to other declarations, expressions or
code.
A scriptlet consists of one or more valid
Java statements. A scriptlet is a block of Java code that is executed
at request-processing time. A scriptlet is enclosed between
"<%" and "%>". What the scriptlet actually does depends on the code, and it can
produce output into the output stream to the client. Multiple
scriptlets are combined in the compiled class in the order in which
they appear in the JSP. Scriptlets like any other Java code block or
method, can modify objects inside them as a result of method
invocations.
An expression is a shorthand notation for a
scriptlet that outputs a value in the response stream back to the
client. When the expression is evaluated, the result is converted to a
string and displayed, An expression is enclosed within <%= and %>
"<%=" and "%>". If any part of expression is an object, the conversion is done using
the toString() method of the object.
Standard actions are specific tags that
affect the runtime behavior of the JSP and affect the response sent
back to the client. The JSP specification lists some standard action
types to be provided by all containers, irrespective of the
implementation. Standard actions provide page authors with some basic
functionality to exploit; the vendor is free to provide other actions
to enhance behavior.
How JSP and JSP Container function
A JSP page is executed in a JSP container or
a JSP engine, which is installed in a web server or in a application
server. When a client asks for a JSP page the engine wraps up the
request and delivers it to the JSP page along with a response object.
The JSP page processes the request and modifies the response object to
incorporate the communication with the client. The container or the
engine, on getting the response, wraps up the responses from the JSP
page and delivers it to the client. The underlying layer for a JSP is
actually a servlet implementation. The abstractions of the request and
response are the same as the ServletRequest and ServletResponse
respectively. If the protocol used is HTTP, then the corresponding
objects are HttpServletRequest and HttpServletResponse.
The first time the engine intercepts a
request for a JSP, it compiles this translation unit (the JSP page and
other dependent files) into a class file that implements the servlet
protocol. If the dependent files are other JSPs they are compiled into
their own classes. The servlet class generated at the end of the
translation process must extend a superclass that is either
1. specified by the JSP author through the
use of the extends attribute in the page directive or
2. is a JSP container specific implementation
class that implements javax.servlet.jsp.JspPage interface and provides
some basic page specific behavior.
Since most JSP pages use HTTP, their
implementation classes must actually implement the
javax.servlet.jsp.HttpJspPage interface, which is a sub interface of
javax.servlet.jsp.JspPage.
The javax.servlet.jsp.JspPage interface
contains two methods:
1. public void jspInit() - This method is
invoked when the JSP is initialized and the page authors are free to
provide initialization of the JSP by implementing this method in their
JSPs.
2. public void jspDestroy() - This method is
invoked when the JSP is about to be destroyed by the container.
Similar to above, page authors can provide their own implementation.
The javax.servlet.jsp.HttpJspPage interface
contains one method:
public void _jspService(HttpServletRequest
request, HttpServletResponse response) throws ServletException,
IOException
This method generated by the JSP container is
invoked, every time a request comes to the JSP. The request is
processed and the JSP generates appropriate response. This response is
taken by the container and passed back to the client.
JSP Architecture
There are two basic ways of using the JSP
technology. They are the client/server (page-centric) 2-tier approach
and the N-tier approach (dispatcher).
The Page-Centric Approach
Applications built using a client-server
(2-tier) approach consist of one or more application programs running
on client machines and connecting to a server-based application to
work. With the arrival of Servlets technology, 2-tier applications
could also be developed using Java programming language. This model
allows JSPs or Servlets direct access to some resource such as
database or legacy application to service a client's request. The JSP
page is where the incoming request is intercepted, processed and the
response sent back to the client. JSPs differ from Servlets in this
scenario by providing clean code, separating code from the content by
placing data access in EJBs. Even though this model makes application
development easier, it does not scale up well for a large number of
simultaneous clients as it entails a significant amount of request
processing to be performed and each request must establish or share a
potentially scarce/expensive connection to the resource in question.
Page-view - This basic architecture involves
direct request invocations to a server page with embedded Java code,
and markup tags which dynamically generate output for substitution
within the HTML. This approach has been blessed a number of benefits.
It is very straightforward and is a low-overhead approach from a
developerment perspective. All the Java code may be embedded within
the HTML, so changes are confined to a very limited area, reducing
complexity drastically.
The big trade-off here is in the level of
sophistication. As the scale of the system grows, some limitations
begin to surface, such as bloating of business logic code in the page
instead of factoring forward to a mediating Servlet or factoring back
to a worker bean. It is a fact that utilizing a Servlet and helper
beans helps to separate developer roles more cleanly and improves the
potential for code reuse.
Page-view with bean - This pattern is used
when the above architecture becomes too cluttered with
business-related code and data access code. The Java code representing
the business logic and simple data storage implementation in the
previous model moves from the JSP to the JavaBean worker. This
refactoring leaves a much cleaner JSP with limited Java code, which
can be comfortably owned by an individual in a web-production role,
since it encapsulates mostly markup tags.
The Dispatcher Approach
In this approach, a Servlet or JSP acts as a
mediator or controller, delegating requests to JSP pages and JavaBeans.
There are three different architectures. They are mediator-view,
mediator-composite view and service to workers.
In an N-tier application, the server side of
the architecture is broken up into multiple tiers. In this case, the
application is composed of multiple tiers, where the middle tier, the
JSP, interacts with the back end resources via another object or EJBs
component. The Enterprise JavaBeans server and the EJB provide managed
access to resources, support transactions and access to underlying
security mechanisms, thus addressing the resource sharing and
performance issues of the 2-tier approach.
The first step in N-tiered application design
should be identifying the correct objects and their interaction and
the second step is identifying the JSPs or Servlets. These are divided
into two categories.
Front end JSPs or Servlets manage application
flow and business logic evaluation. They act as a point to intercept
the HTTP requests coming from the users. They provide a single entry
point to an application, simplifying security management and making
application state easier to maintain.
Presentation JSPs or Servlets generate HTML
or XML with their main purpose in life being presentation of dynamic
content. They contain only presentation and rendering logic.
These categories resemble to the Modal-View
design pattern, where the front-end components is the model and the
presentation component the view. In this approach, JSPs are used to
generate the presentation layer and either JSPs or Servlets to perform
process-intensive tasks. The front-end component acts as the
controller and is in charge of the request processing and the creation
of any beans or objects used by the presentation JSP, as well as
deciding, depending on the user's actions, which JSP to forward this
request to. There is no processing logic within the presentation JSP
itself and it simply responsible for retrieving any objects or beans
that may have been previously created by the Servlet and extracting
the dynamic content for insertion within static templates.
Benefits of JSP
One of the main reasons why the JavaServer
Pages technology has evolved into what it is today and it is still
evolving is the overwhelming technical need to simplify application
design by separating dynamic content from static template display
data. Another benefit of utilizing JSP is that it allows to more
cleanly separate the roles of web application/HTML designer from a
software developer. The JSP technology is blessed with a number of
exciting benefits, which are chronicled as follows:
1. The JSP technology is platform
independent, in its dynamic web pages, its web servers, and its
underlying server components. That is, JSP pages perform perfectly
without any hassle on any platform, run on any web server, and
web-enabled application server. The JSP pages can be accessed from any
web server.
2. The JSP technology emphasizes the use of
reusable components. These components can be combined or manipulated
towards developing more purposeful components and page design. This
definitely reduces development time apart from the At development
time, JSPs are very different from Servlets, however, they are
precompiled into Servlets at run time and executed by a JSP engine
which is installed on a Web-enabled application server such as BEA
WebLogic and IBM WebSphere.
Conclusion
JSP and Servlets are gaining rapid acceptance
as means to provide dynamic content on the Internet. With full access
to the Java platform, running from the server in a secure manner, the
application possibilities are almost limitless. When JSPs are used
with Enterprise JavaBeans technology, e-commerce and database
resources can be further enhanced to meet an enterprise's needs for
web applications providing secure transactions in an open platform.
J2EE technology as a whole makes it easy to develop, deploy and use
web server applications instead of mingling with other technologies
such as CGI and ASP. There are many tools for facilitating quick web
software development and to easily convert existing server-side
technologies to JSP and Servlets.
Many application server vendors are
aggressively deploying JSP within their products. This results in
developing robust e-commerce applications as JSP provides XML
functionality and scalability. By providing a clear separation between
content and coding, JSP solves many problems attached with existing
server-side applications.

|
Current Comments
21 comments so far (post your own) View All Comments Latest 10 Comments:can we use swings in jsp??????????????
Posted by Kevin on Wednesday, 08.13.08 @ 17:53pm | #72657
Hi
i am new to work on jsp
i am having only theoritical knowledge about jsp
i want jsp tutorials from the beginning and which tools is better to use jsp
reply anyone as soon as possible
Posted by Kevin on Wednesday, 08.13.08 @ 17:51pm | #72655
Sir,
I knew core java. I know theoretically jsp knowledge so I need basic idea for how run the .jsp files.
Give me a good simple examples
Posted by Kevin on Wednesday, 08.13.08 @ 17:49pm | #72654
send me jsp tutorial
Posted by vinoth on Friday, 05.23.08 @ 13:06pm | #60739
Hi Sir.....,
every thing is good i need some more information about the jsp by explaining through examples.And I want the list of the tags which is used in JSP programes.
And please explain the EJB,Struts with more examples.
Thanq...
Posted by shashi kanth on Monday, 03.24.08 @ 11:17am | #54035
HI CAN ANY BODY SEND THE PDF'S OF JSP AND SERVLETS... PLEASE I NEED IT,, FRIENDS... THANKS IN ADVANCE
Posted by koti on Tuesday, 02.12.08 @ 16:26pm | #48020
HI CAN ANY BODY SEND THE PDF'S OF JSP AND SERVLETS... PLEASE I NEED IT,, FRIENDS... THANKS IN ADVANCE.
Posted by koti reddy on Saturday, 01.5.08 @ 11:16am | #44553
Hi sathiya,
From the above discription you can find the flow of jsp execution, if you have dought then you can follow this way, you can easily found the execution process.
1. create any jsp file in your local mechine.
2. send request for jsp, then its creates java file(i.e, its creates java file for coresponding jsp)
3. check that java file, inside it will create spet-by-step process how it converts from jsp to java class(search that java file in your server)
Thanks,
Jaya
Posted by jaya on Friday, 12.28.07 @ 17:47pm | #44056
Sir,
I knew core java. I know theoretically jsp knowledge so I need basic idea for how run the .jsp files.
Give me a good simple examples
Posted by sathiya on Wednesday, 11.7.07 @ 19:45pm | #36370
hi sir iwana learn jsp by fash totorial .so please provide me this .thank's .............
Posted by rajnish on Wednesday, 11.7.07 @ 11:53am | #36231