JSP application frameworks
What are application frameworks:
A framework is a reusable,semi-complete application that can be specialized to
produce custom applications [Johnson].Like people,software applications are more
alike than they are different.They run on the same computers,expect input from the
same devices,output
to the same displays,and save data to the same hard
disks.Developers working on conventional desktop applications are accustomed to
toolkits and development environments
leverage the sameness between
applications.Application frameworks build on this common ground to provide
developers with a reusable structure that can serve as the foundation for their own
products.
that
A framework provides developers with a set of backbone components that have
the
following characteristics:
1.They are known to work well in other applications.
2.They are ready to use with the next project.
3.They can also be used by other teams in the organization.
Frameworks are the classic build-versus-buy proposition.If you build it,you will
understand it when you are done-but how long will it be before you can roll your own?
If you buy it,you will have to climb the learning curve-and how long is that going to
take? There is no right answer here,but most observers would agree that frameworks
such as Struts provide a significant return on investment compared to starting from
scratch, especially for larger projects.
Other types of frameworks:
The idea of a framework applies not only to applications but to application
componentsas well.Throughout this article,we introduce other types of frameworks
that you can use with Struts.These include the Lucene search engine,the Scaffold
toolkit,the Struts validator,and the Tiles tag library.Like application frameworks,these
tools provide semi-complete versions of a subsystem that can be specialized to
provide a custom component.
been
linked
to
a
have
Some
frameworks
development
environment.This is not the case with Struts or any of the other frameworks shown in
this book.You can use any development environment with Struts:Visual Age for
Java,JBuilder,Eclipse,Emacs, and Textpad are all popular choices among Struts
developers.If you can use it with Java, you can use it with Struts.
proprietary
Enabling technologies:
Applications developed with Struts are based on a number of enabling
technologies.These components are not specific to Struts and underlie every Java web
application.A reason that developers use frameworks like Struts is to hide the nasty
details behind acronyms like HTTP,CGI,and JSP.As a Struts developer,you don't need
to be an alphabet soup guru,but a working knowledge of these base technologies can
help you devise creative solutions to tricky problems.
Hypertext Transfer Protocol(HTTP):
When mediating talks between nations,diplomats often follow a formal protocol.
Diplomatic protocols are designed to avoid misunderstandings and to keep
negotiations from breaking down.In a similar vein,when computers need to talk,they
also follow a formal protocol.The protocol defines how data is transmitted and how to
decode it once it arrives.Web applications use the Hypertext Transfer Protocol
(HTTP)to move data between the browser running on your computer and the
application running on the server.
Many server applications communicate using protocols other than HTTP.Some
of these maintain an ongoing connection between the computers.The application
server knows exactly who is connected at all times and can tell when a connection is
dropped. Because they know the state of each connection and the identity of each
person using it, these are known as stateful protocols.
By contrast,HTTP is known as a stateless protocol.An HTTP server will accept
any request from any client and will always provide some type of response,even if the
response is just to say no.Without
the overhead of negotiating and retaining a
connection, stateless protocols can handle a large volume of requests.This is one
reason why the Internet has been able to scale to millions of computers.
Another reason HTTP has become the universal standard is its simplicity.An
HTTP request
looks like an ordinary text document.This has made it easy for
applications to make HTTP requests.You can even send an HTTP request by hand
using a standard utility such as Telnet.When the HTTP response comes back,it is also
in plain text that developers can read.
The first line in the HTTP request contains the method,followed by the location
of the requested resource and the version of HTTP.Zero or more HTTP request
headers follow the initial line.The HTTP headers provide additional information to the
server.This can include the browser type and version,acceptable document types,and
the browser's cookies,just to name a few.Of the seven request methods,GET and
POST are by far the most popular.
Once the server has received and serviced the request,it will issue an HTTP
response. The first line in the response is called the status line and carries the HTTP
protocol version, a numeric status,and a brief description of the status.Following the
status line,the server will return a set of HTTP response headers that work in a way
similar to the request headers.
As we mentioned,HTTP does not preserve
state information between
requests.The server logs the request,sends the response,and goes blissfully on to the
next request. While simple and efficient,a stateless protocol
is problematic for
dynamic applications that need to keep track of their users.Ignorance is not always
bliss.
Cookies and URL rewriting are two common ways to keep track of users
information on the user's
between requests.A cookie is a special packet of
computer.URL rewriting stores a special reference in the page address that a Java
server can use to track users.Neither approach is seamless,and using either means
extra work when developing a web application.On its own,a standard HTTP web
server does not traffic in dynamic content.It mainly uses the request to locate a file
and then returns that file in the response. The file is typically formatted using
Hypertext Markup Language (HTML)[W3C,HTML] that the web browser can format
and display.The HTML page often includes hypertext links to other web pages and
may display any number of other goodies,such as images and videos.The user clicks a
link to make another request,and the process begins a new.
Standard web servers handle static content and images quite well but need a
helping hand to provide users with a customized,dynamic response.
DEFINITION:Static content on the Web comes directly from text or data
files,like HTML or JPEG files.These files might be changed from time to time,but
they are not altered automatically when requested by a web browser.Dynamic
content,on the other hand,is generated on the fly,typically in response to an
individualized request from a browser.
Common Gateway Interface(CGI):
The first widely used standard for producing dynamic content was the Common
Gateway Interface (CGD.CGI uses standard operating system features,such as
environment variables and standard input and output,to create a bridge,or gateway,
between the web server and other applications on the host machine.The other
applications can look at the request sent to them by the web server and create a
customized response.
When a web server receives a request that's intended for a CGI program,it runs
that program and provides the program with information from the incoming
request.The CGI program runs and sends its output back to the server.The web server
then relays the response to the browser.
CGI defines a set of conventions regarding what information it will pass as
environment variables and how it expects standard input and output to be used.Like
HTTP, CGI is flexible and easy to implement,and a great number of CGI-aware
programs have been written.
The main drawback to CGI is that it must run a new copy of the CGI-aware
program for each request.This is a relatively expensive process that can bog down
high-volume sites where thousands of requests are serviced per minute.Another
drawback is that CGI programs tend to be platform dependent.A CGI program written
for one operating system may not run on another.
Java servlets:
Sun's Java Servlet platform directly addresses the two main drawbacks of CGI
programs.First,servlets offer better performance and utilization of resources than
conventional CGI programs.Second,the write-once,run-anywhere nature of Java
means that servlets are portable between operating systems that have a Java Virtual
Machine(JVM).
A servlet looks and feels like a miniature web server.It receives a request and
renders a response.But,unlike conventional web servers,the servlet application
programming interface (API) is specifically designed to help Java developers create
dynamic applications.
The servlet itself is simply a Java class that has been compiled into byte
code,like any other Java object.The servlet has access to a rich API of HTTP-specific
services,but it is still just another Java object running in an application and can
leverage all your other Java assets.
To give conventional web servers access to servlets,the servlets are plugged into
containers.The servlet container is attached to the web server.Each servlet can declare
what URL patterns it would like to handle.When a request matching a registered
pattern arrives,the web server passes the request to the container,and the container
invokes the servlet.
But unlike CGI programs,a new servlet is not created for each request.Once the
container instantiates the servlet,it will just create a new thread for each request.Java
threads are much less expensive than the server processes used by CGI
programs.Once the servlet has been created,using it for additional requests incurs very
little overhead.Servlet developers can use the initO method to hold references to
expensive resources,such as database connections or EJB Home Interfaces,so that
they can be shared between requests. Acquiring resources like these can take several
seconds-which is longer than many surfers are willing to wait.
The other edge of the sword is that,since servlets are multithreaded,servlet
developers must take special care to be sure their servlets are thread-safe.To learn
more about servlet programming,we recommend Java Serlets by Example,by Alan R.
Williamson [Williamson].The definitive source for Servlet information is the Java
Servlet Specification [Sun,JST].
JavaServer Pages:
While Java servlets are a big step up from CGI programs,they are not a
panacea.To generate the response,developers are still stuck with using println
statements to render the HTML.Code that looks like:
out.println("
One line of HTML.
");
out.println("
Another line of HTML.
");
is all too common in servlets that generate the HTTP response.There are libraries
that can help you generate HTML,but as applications grow more complex,Java
developers end up being cast into the role of HTML page designers.
Meanwhile,given the choice,most project managers prefer to divide development
teams into specialized groups.They like HTML designers to be working on the
presentation while Java engineers sweat
the business logic.Using servlets alone
encourages mixing markup with business logic,making it difficult for team members
to specialize.
To solve this problem,Sun turned to the idea of using server pages to combine
scripting and templating technologies into a single component.To build Java Server
Pages, developers start by creating HTML pages in the same old way,using the same
old HTML syntax.To bring dynamic content into the page,the developer can also
place JSP scripting elements on the page.Scripting elements are tags that encapsulate
logic that is recognized by the JSP.You can easily pick out scripting elements on JSP
pages by looking for code that begins with <%and ends with %>.
To be seen as a JSP page,the file just needs to be saved with an extension of.jsp.
When a client requests the JSP page,the container translates the page into a
source code file for a Java servlet and compiles the source into a Java class file-just as
you would do if you were writing a servlet from scratch.At runtime,the container can
also check the last modified date of the JSP file against the class file.If the JSP file has
changed since it was last compiled,the container will retranslate and rebuild the page
all over again.
Project managers
can now assign the presentation layer
to HTML
developers,who then pass on their work to Java developers to complete the
business-logic portion.The important thing to remember is that a JSP page is really
just a servlet.Anything you can do with a servlet,you can do with a JSP.
JavaBeans:
JavaBeans are Java classes which conform to a set of design patterns that make
them easier to use with development tools and other components.
DEFINITION A JavaBean is a reusable software component written in Java.To
qualify as a JavaBean,the class must be concrete and public,and have a noargument
constructor.JavaBeans expose internal
fields as properties by providing public
methods that follow a consistent design pattern.Knowing that the property names
follow this pattern,other Java classes are able to use introspection to discover and
manipulate JavaBean properties.
The JavaBean design patterns provide access to the bean's internal state through
two flavors of methods:accessors are used to read a JavaBean's state;mutators are
used to change a JavaBean's state.
Mutators are always prefixed with lowercase token set followed by the property
name. The first character in the property name must be uppercase.The return value is
always void-mutators only change property values;they do not retrieve them.The
mutator for a simple property takes only one parameter in its signature,which can be
of any type. Mutators are often nicknamed setters after their prefix.The mutator
method signature for a weight property of the type Double would be:
public void setWeight(Double weight)
A similar design pattern is used to create the accessor method signature.Accessor
methods are always prefixed with the lowercase token get,followed by the property
name. The first character in the property name must be uppercase.The return value
will match the method parameter in the corresponding mutator.Accessors for simple
properties
signature.Not
their method
cannot
accept
parameters
in
surprisingly,accessors are often called getters.
The accessor method signature for our weight property is:
public Double getWeight()
If the accessor returns a logical value,there is a variant pattern.Instead of using
the lowercase token get,a logical property can use the prefix is,followed by the
property name. The first character in the property name must be uppercase.The return
value will always be a logical valueeither boolean or Boolean.Logical accessors
cannot accept parameters in their method signature.
The boolean accessor method signature for an on property would be
public boolean isOn()
The canonical method signatures play an important role when working with
Java- Beans.Other components are able to use the Java Reflection API to discover a
JavaBean's properties by looking for methods prefixed by set,is,or get.If a component
finds such a signature on a JavaBean,it knows that the method can be used to access
or change the bean's properties.
Sun introduced JavaBeans to work with GUI components,but they are now used
with every aspect of Java development,including web applications.When Sun
engineers developed the JSP tag extension classes,they designed them to work with
JavaBeans.The dynamic data for a page can be passed as a JavaBean,and the JSP tag
can then use the bean's properties to customize the output.
For more on JavaBeans,we highly recommend The Awesome Power of
JavaBeans, by Lawrence H.Rodrigues [Rodrigues].The definitive source for JavaBean
information is the JavaBean Specification [Sun,JBS].
Model 2:
The 0.92 release of the Servlet/JSP Specification described Model 2 as an
architecture that uses servlets and JSP pages together in the same application.The term
Model 2 disappeared from later releases,but it remains in popular use among Java web
developers.
Under Model 2,servlets handle the data access and navigational flow,while JSP
pages handle the presentation.Model 2 lets Java engineers and HTMLdevelopers each