Monday, July 27, 2009

CSS JAVASCRIPT EXAMPLE

CSS JAVASCRIPT EXAMPLE


"





< html >
< head>
< title>Select a Flight< /title>




< LINK rel="stylesheet" href="transform.css" type="text/css"/>



< script type="text/javascript" language="javascript">
function toggle(id) {
if(document.getElementById(id).style.display=='block')
{
document.getElementById(id).style.display='none';
document.getElementById(id).style.visibility='hidden';
//alert('Its hidden now');
}
else
{
document.getElementById(id).style.display='block';
document.getElementById(id).style.visibility='visible';
//alert('Its displaying now');
}
}
< /script>
< /head>



Pricing Information:



.PricingInfo {
font-style: normal;
color: black;
font-family: "Gill Sans MT", Verdana, Arial, sans-serif;
font-weight: bold;
font-size: 12pt
}
"

Friday, July 24, 2009

Introduction to Web Services

Introduction to Web Services
________________________________________
Web Services can make your applications Web applications.
Web Services are published, found and used through the Web.
________________________________________
What You Should Already Know
Before you continue you should have a basic understanding of the following:
• HTML
• XML
If you want to study these subjects first, find the tutorials on our Home page.
________________________________________
What are Web Services?
• Web services are application components
• Web services communicate using open protocols
• Web services are self-contained and self-describing
• Web services can be discovered using UDDI
• Web services can be used by other applications
• XML is the basis for Web services
________________________________________
How Does it Work?
The basic Web services platform is XML + HTTP.
The HTTP protocol is the most used Internet protocol.
XML provides a language which can be used between different platforms and programming languages and still express complex messages and functions.
Web services platform elements
• SOAP (Simple Object Access Protocol)
• UDDI (Universal Description, Discovery and Integration)
• WSDL (Web Services Description Language)
We will explain these topics later in the tutorial
________________________________________
The Future of Web services
Don't expect too much, too soon.
The Web Services platform is a simple, interoperable, messaging framework. It still misses many important features like security and routing. But, these pieces will come once SOAP becomes more advanced.
Hopefully, Web services can make it much easier for applications to communicate
Why Web Services?
________________________________________
A few years ago Web services were not fast enough to be interesting.
Thanks to the major IT development the last few years, most people and companies have broadband connection and use the web more and more.
________________________________________
Interoperability has highest priority.
When all major platforms could access the Web using Web browsers, different platforms could interact. For these platforms to work together, Web applications were developed.
Web applications are simple applications run on the web. These are built around the Web browser standards and can mostly be used by any browser on any platform.
________________________________________
Web services take Web applications to the next level.
Using Web services your application can publish its function or message to the rest of the world.
Web services uses XML to code and decode your data and SOAP to transport it using open protocols.
With Web services your accounting departments Win 2k servers billing system can connect with your IT suppliers UNIX server.
________________________________________
Web services have two types of uses.
Reusable application components
There are things different applications needs very often. So why make these over and over again?
Web services can offer application components like currency conversion, weather reports or even language translation as services.
Ideally, there will only be one type of each application component, and anyone can use it in their application.
Connect existing software
Web services help solve the interoperability problem by giving different applications a way to link their data.
Using Web services you can exchange data between different applications and different platforms.
Web Services Platform Elements
________________________________________
Web Services have three basic platform elements.
These are called SOAP, WSDL and UDDI.
________________________________________
What is SOAP?
The basic Web services platform is XML plus HTTP.
• SOAP stands for Simple Object Access Protocol
• SOAP is a communication protocol
• SOAP is for communication between applications
• SOAP is a format for sending messages
• SOAP is designed to communicate via Internet
• SOAP is platform independent
• SOAP is language independent
• SOAP is based on XML
• SOAP is simple and extensible
• SOAP allows you to get around firewalls
• SOAP will be developed as a W3C standard
Read more about SOAP on our Home page.
________________________________________
What is WSDL?
WSDL is an XML-based language for describing Web services and how to access them.
• WSDL stands for Web Services Description Language
• WSDL is written in XML
• WSDL is an XML document
• WSDL is used to describe Web services
• WSDL is also used to locate Web services
• WSDL is not yet a W3C standard
Read more about WSDL on our Home page.
________________________________________
What is UDDI?
UDDI is a directory service where businesses can register and search for Web services.
• UDDI stands for Universal Description, Discovery and Integration
• UDDI is a directory for storing information about web services
• UDDI is a directory of web service interfaces described by WSDL
• UDDI communicates via SOAP
• UDDI is built into the Microsoft .NET platform
Read more about UDDI on our Home page.
Web Service Example
________________________________________
Any application can have a Web Service component.
Web Services can be created regardless of programming language.
________________________________________
An example ASP.NET Web Service
In this example we use ASP.NET to create a simple Web Service.
<%@ WebService Language="VB" Class="TempConvert" %>

Imports System
Imports System.Web.Services


Public Class TempConvert :Inherits WebService

Public Function FahrenheitToCelsius
(ByVal Fahrenheit As Int16) As Int16
Dim celsius As Int16
celsius = ((((Fahrenheit) - 32) / 9) * 5)
Return celsius
End Function

Public Function CelsiusToFahrenheit
(ByVal Celsius As Int16) As Int16
Dim fahrenheit As Int16
fahrenheit = ((((Celsius) * 9) / 5) + 32)
Return fahrenheit
End Function
End Class
This document is a .asmx file. This is the ASP.NET file extension for XML Web Services.
________________________________________
To run this example you will need a .NET server.
The first line in this document that it is a Web Service, written in VB and the class name is "TempConvert":
<%@ WebService Language="VB" Class="TempConvert" %>
The next lines imports the namespace "System.Web.Services" from the .NET framework.
Imports System
Imports System.Web.Services
The next line defines that the "TempConvert" class is a WebSerivce class type:
Public Class TempConvert :Inherits WebService
The next step is basic VB programming. This application has two functions. One to convert from Fahrenheit to Celsius, and one to convert from Celsius to Fahrenheit.
The only difference from a normal application is that this function is defined as a "WebMethod".
Use "WebMethod" to mark the functions in your application that you would like to make into web services.
Public Function FahrenheitToCelsius
(ByVal Fahrenheit As Int16) As Int16
Dim celsius As Int16
celsius = ((((Fahrenheit) - 32) / 9) * 5)
Return celsius
End Function

Public Function CelsiusToFahrenheit
(ByVal Celsius As Int16) As Int16
Dim fahrenheit As Int16
fahrenheit = ((((Celsius) * 9) / 5) + 32)
Return fahrenheit
End Function
The last thing to do is to end the function and the class:
End Function

End Class
If you save this as an .asmx file and publish it on a server with .NET support, you should have your first working Web Service. Like our example Web Service
________________________________________
ASP.NET automates the process
With ASP.NET you do not have to write your own WSDL and SOAP documents.
If you look closer on our example Web Service. You will see that the ASP.NET has automatically created a WSDL and SOAP request.
Web Service Use
________________________________________
Using our example ASP.NET Web Service
In the previous example we created an example Web Service.
The Fahrenheit to Celsius function can be tested here: FahrenheitToCelsius.
The Celsius to Fahrenheit function can be tested here: CelsiusToFahrenheit.
________________________________________
These functions will send you a XML reply.
These test use HTTP POST and will send a XML response like this:

38

________________________________________
Use a form to access a Web Service.
Using a form and HTTP POST, you can put our web service on your site, like this:
Fahrenheit to Celsius:



Celsius to Fahrenheit:




________________________________________
You can put our Web Service on your site.
Here is the code to put our Web Service on your site:
method="POST">









Fahrenheit to Celsius: size="30" name="Fahrenheit">
value="Submit" class="button">



method="POST">









Celsius to Fahrenheit: size="30" name="Celsius">
value="Submit" class="button">

Tuesday, July 21, 2009

UML Tutorial

Hi All,

TOday i was reading a Tutorial abt UMl found it good hence sharing it with you.

UML Tutorial:
Part 1 -- Class Diagrams.
Robert C. Martin
My next several columns will be a running tutorial of UML. The 1.0 version of UML was released on the 13th of January, 1997. The 1.1 release should be out before the end of the year. This column will track the progress of UML and present the issues that the three amigos (Grady Booch, Jim Rumbaugh, and Ivar Jacobson) are dealing with.
Introduction
UML stands for Unified Modeling Language. It represents a unification of the concepts and notations
presented by the three amigos in their respective books
1. The goal is for UML to become a
common language for creating models of object oriented computer software.
In its current form UML is comprised of two major components: a Meta-model and a notation. In the future, some form of method or process may also be added to; or associated with, UML. The Meta-model UML is unique in that it has a standard data representation. This representation is called the metamodel.
The meta-model is a description of UML in UML. It describes the objects, attributes, and relationships necessary to represent the concepts of UML within a software application. This provides CASE manufacturers with a standard and unambiguous way to represent UML models. Hopefully it will allow for easy transport of UML models between tools. It may also make it easier to write ancillary tools for browsing, summarizing, and modifying UML models. A deeper discussion of the metamodel is beyond the scope of this column. Interested readers can learn more about it by downloading the UML documents from the rational web site
2. The Notation The UML notation is rich and full bodied. It is comprised of two major subdivisions. There is a notation for modeling the static elements of a design such as classes, attributes, and relationships. There is also a notation for modeling the dynamic elements of a design such as objects, messages, and finite state machines. In this article we will present some of the aspects of the static modeling notation. Static models are presented in diagrams called: Class Diagrams.
Class Diagrams. The purpose of a class diagram is to depict the classes within a model. In an object oriented application, classes have attributes (member variables), operations (member functions) and relation-
1. Object Oriented Analysis and Design, Grady Booch, Benjamin Cummings, 1994.
Object Oriented Modeling and Design, James Rumbaugh, et. al., Prentice Hall, 1991
Object Oriented Software Engineering, Ivar Jacobson, et. al., Addison Wesley, 1992
2. http://www.rational.com
ships with other classes. The UML class diagram can depict all these things quite easily. The
fundamental element of the class diagram is an icon the represents a class. This icon is shown in
Figure 1.
A class icon is simply a rectangle divided into three compartments. The topmost compartment
contains the name of the class. The middle compartment contains a list of attributes (member variables),
and the bottom compartment contains a list of operations (member functions). In many
diagrams, the bottom two compartments are omitted. Even when they are present, they typically
do not show every attribute and operations. The goal is to show only those attributes and operations
that are useful for the particular diagram.
This ability to abbreviate an icon is one of the hallmarks of UML. Each diagram has a particular
purpose. That purpose may be to highlight on particular part of the system, or it may be to illuminate
the system in general. The class icons in such diagrams are abbreviated as necessary. There is
typically never a need to show every attribute and operation of a class on any diagram. Figure 2
shows a typical UML description of a class that represents a circle.
Notice that each member variable is followed by a colon and by the type of the variable. If the
type is redundant, or otherwise unnecessary, it can be omitted. Notice also that the return values
follow the member functions in a similar fashion. Again, these can be omitted. Finally, notice that
the member function arguments are just types. I could have named them too, and used colons to
separate them from their types; or I could have omitted the arguments altogether.
Composition Relationships
Each instance of type
Circle
seems to contain an instance of type
Point
. This is a relationship
known as
composition
. It can be depicted in UML using a class relationship. Figure 3 shows the
composition relationship.
Figure 1: The Class Icon
Figure 2: Circle class
Class
operation()
Attribute
Circle
Area():double
Circumference():double
SetCenter(Point)
SetRadius(double)
itsRadius:double
itsCenter:Point
The black diamond represents composition. It is placed on the
Circle
class because it is the
Circle
that is composed of a
Point
. The arrowhead on the other end of the relationship
denotes that the relationship is navigable in only one direction. That is,
Point
does not know
about
Circle
. In UML relationships are presumed to be bidirectional unless the arrowhead is
present to restrict them. Had I omitted the arrowhead, it would have meant that
Point
knew
about
Circle
. At the code level, this would imply a
#include “circle.h”
within
point.h
. For this reason, I tend to use a
lot
of arrowheads.
Composition relationships are a strong form of containment or aggregation. Aggregation is a
whole/part relationship. In this case,
Circle
is the whole, and
Point
is part of
Circle
. However,
composition is more than just aggregation. Composition also indicates that the lifetime of
Point
is dependent upon
Circle
. This means that if
Circle
is destroyed,
Point
will be
destroyed with it. For those of you who are familiar with the Booch-94 notation, this is the Hasby-
value relationship.
In C++ we would represent this as shown in Listing 1.
In this case we have represented the composition relationship as a member variable. We could also
have used a pointer so long as the destructor of
Circle
deleted the pointer.
Inheritance
The inheritance relationship in UML is depicted by a peculiar triangular arrowhead. This arrowhead,
that looks rather like a slice of pizza, points to the base class. One or more lines proceed
from the base of the arrowhead connecting it to the derived classes.
Figure 4 shows the form of the inheritance relationship. In this diagram we see that
Circle
and
Square
both derive from
Shape
. Note that the name of class
Shape
is shown in italics. This
indicates that
Shape
is an abstract class. Note also that the operations,
Draw()
and
Erase()
are also shown in italics. This indicates that they are pure virtual.
Figure 3: Circle contains Point
Listing 1: Circle class
class Circle
{
public:
void SetCenter(const Point&);
void SetRadius(double);
double Area() const;
double Circumference() const;
private:
double itsRadius;
Point itsCenter;
};
Circle Point
Italics are not always very easy to see. Therefore, as shown in Figure 4, an abstract class can also
be marked with the
{abstract}
property. What’s more, though it is not a standard part of
UML, I will often write
Draw()=0
in the operations compartment to denote a pure virtual function.
Aggregation / Association
The weak form of aggregation is denoted with an open diamond. This relationship denotes that
the aggregate class (the class with the white diamond touching it) is in some way the “whole”, and
the other class in the relationship is somehow “part” of that whole.
Figure 5 shows an aggregation relationship. In this case, the
Window
class contains many
Shape
instances. In UML the ends of a relationship are referred to as its “roles”. Notice that the role at
the
Shape
end of the aggregation is marked with a “
*
”. This indicates that the
Window
contains
many
Shape
instances. Notice also that the role has been named. This is the name that
Window
knows its
Shape
instances by. i.e. it is the name of the instance variable within
Window
that
holds all the
Shapes
.
Figure 4: Inheritance
Figure 5: Aggregation
Circle Square
Shape
Draw()
Erase()
{abstract}
Window
Shape
{abstrac
*
itsShapes
Listing 2 shows how Figure 5 might be implemented in C++
There are other forms of containment that do not have whole / part implications. For example,
Each
Window
refers back to its parent
Frame
. This is not aggregation since it is not reasonable to
consider a parent
Frame
to be part of a child
Window
. We use the association relationship to
depict this.
Figure 6 shows how we draw an association. An association is nothing but a line drawn between
the participating classes. In Figure 6 the association has an arrowhead to denote that
Frame
does
not know anything about
Window
. Once again note the name on the role. This relationship will
almost certainly be implemented with a pointer of some kind.
What is the difference between an aggregation and an association? The difference is one of implication.
Aggregation denotes whole/part relationships whereas associations do not. However, there
is not likely to be much difference in the way that the two relationships are implemented. That is,
it would be very difficult to look at the code and determine whether a particular relationship ought
to be aggregation or association. For this reason, it is pretty safe to ignore the aggregation relationship
altogether. As the amigos said in the UML 0.8 document: “...if you don’t understand
[aggregation] don’t use it.”
Aggregation and Association both correspond to the Has-by-reference relationship from the
Booch-94 notation.
Listing 2: Window contains Shapes
class Window
{
public:
//...
private:
vector itsShapes;
};
Figure 6: Associations
Frame
Window
itsParent
Dependency
Sometimes the relationship between a two classes is very weak. They are not implemented with
member variables at all. Rather they might be implemented as member function arguments. Consider,
for example, the Draw function of the Shape class. Suppose that this function takes an
argument of type DrawingContext.
Figure 7 shows a dashed arrow between the Shape class and the DrawingContext class. This
is the dependency relationship. In Booch94 this was called a ‘using’ relationship. This relationship
simply means that Shape somehow depends upon DrawingContext. In C++ this almost
always results in a #include.
Interfaces
There are classes that have nothing but pure virtual functions. In Java such entities are not classes
at all; they are a special language element called an interface. UML has followed the Java
example and has created some special syntactic elements for such entities.
The primary icon for an interface is just like a class except that it has a special denotation called a
stereotype. Figure 8 shows this icon. Note the «type» string at the top of the class. The two surrounding
characters “«»” are called guillemets (pronounced Gee-may). A word or phrase surrounded
by guillemets is called a “stereotype”. Stereotypes are one of the mechanisms that can be
used to extend UML. When a stereotype is used above the name of a class it indicates that this
class is a special kind of class that conforms to a rather rigid specification.
The «type» stereotype indicates that the class is an interface. This means that it has no member
variables, and that all of its member functions are pure virtual.
UML supplies a shortcut for «type» classes. Figure 9 shows how the “lollypop” notation can be
used to represent an interface. Notice that the dependency between Shape and DrawingContext
is shown as usual. The class WindowsDC is derived from, or conforms to, the Drawingcontext
interface. This is a shorthand notation for an inheritance relationship between
Figure 7: Dependency
Window
Shape
DrawingContext
*
itsShapes
itsContext
Draw(DrawingContext&)
WindowsDC and DrawingContext.
Conclusion
In this article we have explored a few of the notational elements that UML supplies for static software
design. In future columns we will expand upon this notation by showing how to use it for
solving some real software problems. We will also examine UML’s contingent of tools for modeling
dynamic design.
Figure 8: Type class
Figure 9: Interface Lollypop
DrawingContext
«type»
SetPoint(int,int,bool)
ClearScreen()
GetVerticalSize():int
GetHorizontalSize():in
t
Shape
DrawingContext
WindowsDC

Saturday, July 18, 2009

Hi All,

Few Days back i have found a link where we can have free E-Books.

Sharing those links with you if you also come accross few more link please share.

O'Reilly online http://www.oreilly.com/openbook/ | http://sysadmin.oreilly.com/
Computer books and manuals
http://www.hoganbooks.com/freebook/webbooks.html | http://www.informit.com/itlibrary/ | http://www.fore.com/support/manuals/home/home.htm | http://www.adobe.com/products/acrobat/webbuy/freebooks.html
The Network Book http://www.cs.columbia.edu/netbook/
Some #bookwarez.efnet.irc links
http://www.extrema.net/books/links.shtml
Some #bookwarez.efnet.irc fiction
http://194.58.154.90:4431/enscifi/
Pimpas online books (Indonesia)
http://202.159.16.55/~pimpa2000 | http://202.159.15.46/~om-pimpa/buku
Security, privacy and cryptography
http://theory.lcs.mit.edu/~rivest/crypto-security.html | http://www.oberlin.edu/~brchkind/cyphernomicon/
My own misc online reading material
http://www.eastcoastfx.com/docs/admin-guides/ | http://www.eastcoastfx.com/~jorn/reading/
Computer books http://solaris.inorg.chem.msu.ru/cs-books/
| http://sweetrude.net/~cab/books/ | http://alaska.mine.nu/books/ | http://poprocks.dyn.ns.ca/dave/books/ | http://58-160.skarland.uaf.edu/books/ | http://202.186.247.194/~ebook/
| http://hooligans.org/reference/
Linux documentation http://www.linuxdoc.org/docs.html
FreeBSD documentation http://www.freebsd.org/tutorials/
Sun documentation http://osiris.imw.tu-clausthal.de:8888/ | http://uran.vvsu.ru:8888/
SGI documentation
http://newton.unicc.chalmers.se/ebt-bin/nph-dweb/dynaweb;td=2 | http://techpubs.sgi.com/library/tpl/cgi-bin/init.cgi
IBM Online Redbooks http://www.redbooks.ibm.com/
Digital Unix documentation
http://www.unix.digital.com/faqs/publications/base_doc/DOCUMENTATION/V40D_HTML/V40D_HTML/LIBRARY.HTM
Filesystem Hierarchy Standard
http://www.pathname.com/fhs/2.0/fhs-toc.html | http://www.linuxbase.com/
UNIX stuff http://www.ucs.ed.ac.uk/~unixhelp/index.html | http://www.uwsg.indiana.edu/usail/ | http://www.isu.edu/departments/comcom/unix/workshop/unixindex.html | http://www.franken.de/users/lorien/unix.html | http://www.cs.buffalo.edu/~milun/unix.programming.html
Programmers reading http://www.programmersheaven.com/ | http://www.cs.monash.edu.au/~alanf/se_proj97/
Programming Pearls 2nd edition
http://www.cs.bell-labs.com/cm/cs/pearls/
C stuff
http://www.strath.ac.uk/CC/Courses/NewCcourse/ccourse.html | http://www.cm.cf.ac.uk/Dave/C/CE.html | http://www.cprogramming.com/tutorial.html | http://www.cs.virginia.edu/c++programdesign/slides/ | http://www.icce.rug.nl/docs/cplusplus/cplusplus.html
Perl stuff http://www.webdesigns1.com/perl/ir.html | http://www.ictp.trieste.it/texi/perl/perl_toc.html | http://www.itknowledge.com/tpj/ | http://www.plover.com/~mjd/perl/
Java stuff http://www.cs.brown.edu/courses/cs016/book/ | http://polaris.cis.ksu.edu/~schmidt/CIS200/ | http://www.daimi.au.dk/dProg1/java/langspec-1.0/index.html
Lisp stuff
http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/mirrors.html
| http://www.cs.tulane.edu/www/Villamil/lisp/
Ada stuff http://www.adahome.com/Tutorials/
Database reading
http://www.bus.orst.edu/faculty/brownc/lectures/db_tutor/index.htm
SQL stuff http://w3.one.net/~jhoffman/sqltut.htm | http://www.doc.mmu.ac.uk/STAFF/E.Ferneley/SQL/index.htm | http://www.daimi.au.dk/~oracle/sql/index.html
Visual Basic stuff http://www.vb-world.net/books/
Handbook of Applied Cryptography
http://www.cacr.math.uwaterloo.ca/hac/
X Window System http://tronche.com/gui/x/ | http://www.cen.com/mw3/refs.html | http://www.gaijin.com/X/
GTK and Gnome stuff
http://developer.gnome.org/doc/GGAD/ggad.html
QT and KDE stuff http://www.troll.no/qt/ | http://developer.kde.org/documentation/tutorials/index.html | http://www.arrakis.es/~rlarrosa/tutorial.html
Corba stuff http://www.iona.com/hyplan/vinoski/
TCP/IP info http://www.tunix.kun.nl/ptr/tcpip.html
Misc programmers reading
http://www.cs.wisc.edu/~chilimbi/Pubs.html | http://www.ic.arizona.edu/~nromano/spring99/readings.htm
Some useful tech articles http://www.sysadminmag.com/ | http://www.dotcomma.org/
Considering Hacking Constructive
http://www.firstmonday.dk/issues/issue4_2/gisle/index.html
Eric's Random Writings http://www.tuxedo.org/~esr/writings/
IBM's History
http://www.ibm.com/ibm/history/story/text.html
Electronic Publishing
http://www.civeng.carleton.ca/~nholtz/ElectronicPublishing.html
Digital processing http://www.dspguide.com/pdfbook.htm
The Hardware Book http://sunsite.auc.dk/hwb/
Network iQ Router Reference Manual
http://www.teltrend.co.nz/documentation/networkiq/rel74/html/rmtoc.htm
Cisco Product Documentation
http://www.cisco.com/univercd/cc/td/doc/product/
Novell developers appnotes
http://developer.novell.com/research/appnotes/
Icons for your desktop http://nether.tky.hut.fi/iconstore/
Hackers' Hall of Fame at Discovery Online
http://www.discovery.com/area/technology/hackers/hackers.html
Symbols and signs and ideograms and stuff http://www.symbols.com/
Dictionaries http://www.ohiolink.edu/db/oed.html | http://www.ohiolink.edu/db/ahd.html | http://www.ohiolink.edu/db/columbia.html | http://www.ohiolink.edu/db/thes.html | http://www.eb.com:180/
Misc reading material http://dali.orgland.ru/tcd/ | http://www.ud.se/english/press/pdf_publ.htm
Dantes Inferno
http://sophia.smith.edu/~lkleinbe/dante/home.html | http://www.divinecomedy.org/
Books and texts http://digital.library.upenn.edu/books/ | http://www.cs.cmu.edu/books.html | http://www.ipl.org/reading/books/ | http://www.nakedword.org/ | http://sunsite.berkeley.edu/alex/
Literature stuff http://lion.chadwyck.co.uk:8080/ | http://www.swan.ac.uk/uwp/lit.htm
Octavo books http://www.octavo.com/
Project Gutenberg - books and texts http://www.promo.net/pg/
Project Runeberg - Scandinavian in books and texts http://www.lysator.liu.se/runeberg/katalog.html
The Elements of Style http://www.bartleby.com/141/index.html
Bigtext - illustrated books and manuals for DOS http://www.ozemail.com.au/~kevsol/oldfav.html#bigtext
Breeze - a complete text system for Windows
http://www.ozemail.com.au/~kevsol/sware.html#brzwin
Language links http://www.june29.com/HLP/
Grimms' fairy tales
http://www.nationalgeographic.com/grimm/archive.html
Winnie the Pooh http://www.machaon.ru/pooh/
Seven Wonders of the World
http://ce.eng.usf.edu/pharos/wonders/
Medieval history http://www.fordham.edu/halsall/sbook2.html
Misc history http://www.usaor.net/users/ipm/contents.html
| http://www.homeusers.prestel.co.uk/littleton/re0_cath.htm
Stonehenges Legends
http://www.missgien.net/stonehenge/legends.html
In Parentheses historical papers http://www.inpar.dhs.org/
Bulfinchs Mythology http://www.bulfinch.org/
The Dead Sea Scrolls
http://lcweb.loc.gov/exhibits/scrolls/toc.html
Qumran historical site http://www.kalia.org.il/Qumran/
Index of cults http://www.totentanz.de/kmedeke/cults.htm
Heretical speculation
http://www.calweb.com/~queribus/gnosticgnus.html
The esoteric Ordo Supremus Militaris Templi Hierosolymitani http://www.osmth.org/index.html
Runes and Norse stuff http://www.multiart.nu/grimner/ | http://www.eastcoastfx.com/~jorn/runes/
Extinction level events
http://members.xoom.com/korwisi/ele/english/index.html | http://impact.arc.nasa.gov/ | http://www.boulder.swri.edu/clark/ncar.html
Stephen Hawkings Universe
http://www.pbs.org/wnet/hawking/html/home.html
The constellations http://www.dibonsmith.com/constel.htm
Falling into a black hole
http://casasrv.colorado.edu/~ajsh/schw.shtml
Gravity is a push http://www.epicom.com/gravitypush/
Online audiobooks http://www.broadcast.com/books/scifi/
ElecBooks http://www.elecbook.com/eblist.htm
NewMedia Classics http://www.newmediaclassics.com/
Online Books Archive http://docs.online.bg/
Internet Public Library http://www.ipl.org/
Rocket-Library.com
http://www.rocket-library.com/categories.asp
PalmPilot E-Text Ring
http://www.webring.org/cgi-bin/webring?ring=pilot_text&id=2&List
Virtual Free Books
http://www.virtualfreesites.com/free.books.am.html
All About Ebooks http://aalbc.com/ebooks/Allaboutebooks.htm

Friday, July 17, 2009

Struts

Struts is not only a very powerful framework, but also very extensible. You can extend Struts in three ways.
1. PlugIn: Create your own PlugIn class if you want to execute some business logic at application startup or shutdown.
2. RequestProcessor: Create your own RequestProcessor if you want to execute some business logic at a particular point during the request-processing phase. For example, you might extend RequestProcessor to check that the user is logged in and he has one of the roles to execute a particular action before executing every request.
3. ActionServlet: You can extend the ActionServlet class if you want to execute your business logic at either application startup or shutdown, or during request processing. But you should use it only in cases where neither PlugIn nor RequestProcessor is able to fulfill your requirement.
In this article, we will use a sample Struts application to demonstrate how to extend Struts using each of these three approaches. Downloadable sample code for each is available below in the Resources section at the end of this article. Two of the most successful examples of Struts extensions are the Struts Validation framework and the Tiles framework.
I assume that you are already familiar with the Struts framework and know how to create simple applications using it. Please see the Resources section if you want to know more about Struts.
PlugIn
According to the Struts documentation "A plugin is a configuration wrapper for a module-specific resource or service that needs to be notified about application startup and shutdown events." What this means is that you can create a class implementing the PlugIn interface to do something at application startup or shutdown.
Say I am creating a web application where I am using Hibernate as the persistence mechanism, and I want to initialize Hibernate as soon as the application starts up, so that by the time my web application receives the first request, Hibernate is already configured and ready to use. We also want to close down Hibernate when the application is shutting down. We can implement this requirement with a Hibernate PlugIn by following two simple steps.
1. Create a class implementing the PlugIn interface, like this:
2.
3. public class HibernatePlugIn implements PlugIn{
4. private String configFile;
5. // This method will be called at application shutdown time
6. public void destroy() {
7. System.out.println("Entering HibernatePlugIn.destroy()");
8. //Put hibernate cleanup code here
9. System.out.println("Exiting HibernatePlugIn.destroy()");
10. }
11. //This method will be called at application startup time
12. public void init(ActionServlet actionServlet, ModuleConfig config)
13. throws ServletException {
14. System.out.println("Entering HibernatePlugIn.init()");
15. System.out.println("Value of init parameter " +
16. getConfigFile());
17. System.out.println("Exiting HibernatePlugIn.init()");
18. }
19. public String getConfigFile() {
20. return name;
21. }
22. public void setConfigFile(String string) {
23. configFile = string;
24. }
25. }
The class implementing PlugIn interface must implement two methods: init() and destroy(). init() is called when the application starts up, and destroy() is called at shutdown. Struts allows you to pass init parameters to your PlugIn class. For passing parameters, you have to create JavaBean-type setter methods in your PlugIn class for every parameter. In our HibernatePlugIn class, I wanted to pass the name of the configFile instead of hard-coding it in the application.
26. Inform Struts about the new PlugIn by adding these lines to struts-config.xml:
27.
28.
29. ...
30.
31. 32. "sample1.resources.ApplicationResources"/>
33.
34.
35.
36. 37. value="/hibernate.cfg.xml"/>
38.

39.

The className attribute is the fully qualified name of the class implementing the PlugIn interface. Add a element for every initialization parameter which you want to pass to your PlugIn class. In our example, I wanted to pass the name of the config file, so I added the element with the value of config file path.
Both the Tiles and Validator frameworks use PlugIns for initialization by reading configuration files. Two more things which you can do in your PlugIn class are:
• If your application depends on some configuration files, then you can check their availability in the PlugIn class and throw a ServletException if the configuration file is not available. This will result in ActionServlet becoming unavailable.
• The PlugIn interface's init() method is your last chance if you want to change something in ModuleConfig, which is a collection of static configuration information that describes a Struts-based module. Struts will freeze ModuleConfig once all PlugIns are processed.
How a Request is Processed
ActionServlet is the only servlet in Struts framework, and is responsible for handling all of the requests. Whenever it receives a request, it first tries to find a sub-application for the current request. Once a sub-application is found, it creates a RequestProcessor object for that sub-application and calls its process() method by passing it HttpServletRequest and HttpServletResponse objects.
The RequestProcessor.process() is where most of the request processing takes place. The process() method is implemented using the Template Method design pattern, in which there is a separate method for performing each step of request processing, and all of those methods are called in sequence from the process() method. For example, there are separate methods for finding the ActionForm class associated with the current request, and checking if the current user has one of the required roles to execute action mapping. This gives us tremendous flexibility. The RequestProcessor class in the Struts distribution provides a default implementation for each of the request-processing steps. That means you can override only the methods that interest you, and use default implementations for rest of the methods. For example, by default Struts calls request.isUserInRole() to find out if the user has one of the roles required to execute the current ActionMapping, but if you want to query a database for this, then then all you have to do is override the processRoles() method and return true or false, based whether the user has the required role or not.
First we will see how the process() method is implemented by default, and then I will explain what each method in the default RequestProcessor class does, so that you can decide what parts of request processing you want to change.

public void process(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException {
// Wrap multipart requests with a special wrapper
request = processMultipart(request);
// Identify the path component we will
// use to select a mapping
String path = processPath(request, response);
if (path == null) {
return;
}
if (log.isDebugEnabled()) {
log.debug("Processing a '" + request.getMethod() +
"' for path '" + path + "'");
}
// Select a Locale for the current user if requested
processLocale(request, response);
// Set the content type and no-caching headers
// if requested
processContent(request, response);
processNoCache(request, response);
// General purpose preprocessing hook
if (!processPreprocess(request, response)) {
return;
}
// Identify the mapping for this request
ActionMapping mapping =
processMapping(request, response, path);
if (mapping == null) {
return;
}
// Check for any role required to perform this action
if (!processRoles(request, response, mapping)) {
return;
}
// Process any ActionForm bean related to this request
ActionForm form =
processActionForm(request, response, mapping);
processPopulate(request, response, form, mapping);
if (!processValidate(request, response, form, mapping)) {
return;
}
// Process a forward or include specified by this mapping
if (!processForward(request, response, mapping)) {
return;
}
if (!processInclude(request, response, mapping)) {
return;
}
// Create or acquire the Action instance to
// process this request
Action action =
processActionCreate(request, response, mapping);
if (action == null) {
return;
}
// Call the Action instance itself
ActionForward forward =
processActionPerform(request, response,
action, form, mapping);
// Process the returned ActionForward instance
processForwardConfig(request, response, forward);
}
1. processMultipart(): In this method, Struts will read the request to find out if its contentType is multipart/form-data. If so, it will parse it and wrap it in a wrapper implementing HttpServletRequest. When you are creating an HTML FORM for posting data, the contentType of the request is application/x-www-form-urlencoded by default. But if your form is using FILE-type input to allow the user to upload files, then you have to change the contentType of the form to multipart/form-data. But by doing that, you can no longer read form values submitted by user via the getParameter() method of HttpServletRequest; you have to read the request as an InputStream and parse it to get the values.
2. processPath(): In this method, Struts will read request URI to determine the path element that should be used for getting the ActionMapping element.
3. processLocale(): In this method, Struts will get the Locale for the current request and, if configured, it will save it in HttpSession as the value of the org.apache.struts.action.LOCALE attribute. HttpSession would be created as a side effect of this method. If you don't want that to happen, then you can set the locale property to false in ControllerConfig by adding these lines to your struts-config.xml file:
4.
5.
6.

7. processContent(): Sets the contentType for the response by calling response.setContentType(). This method first tries to get the contentType as configured in struts-config.xml. It will use text/html by default. To override that, use the following:
8.
9.
10.

11. processNoCache(): Struts will set the following three headers for every response, if configured for no-cache:
12.
13. requested in struts config.xml
14. response.setHeader("Pragma", "No-cache");
15. response.setHeader("Cache-Control", "no-cache");
16. response.setDateHeader("Expires", 1);
If you want to set the no-cache header, add these lines to struts-config.xml:




17. processPreprocess(): This is a general purpose, pre-processing hook that can be overridden by subclasses. Its implementation in RequestProcessor does nothing and always returns true. Returning false from this method will abort request processing.
18. processMapping(): This will use path information to get an ActionMapping object. The ActionMapping object represents the element in your struts-config.xml file.
19.
20. 21. name="newContactForm" scope="request">
22.
23.
24.

The ActionMapping element contains information like the name of the Action class and ActionForm used in processing this request. It also has information about ActionForwards configured for the current ActionMapping.
25. processRoles(): Struts web application security just provides an authorization scheme. What that means is once user is logged into the container, Struts' processRoles() method can check if he has one of the required roles for executing a given ActionMapping by calling request.isUserInRole().
26.
27.
Say you have AddUserAction and you want only the administrator to be able to add a new user. What you can do is to add a role attribute with the value administrator in your AddUserAction action element. So before executing AddUserAction, it will always make sure that the user has the administrator role.
28. processActionForm(): Every ActionMapping has a ActionForm class associated with it. When Struts is processing an ActionMapping, it will find the name of the associated ActionForm class from the value of the name attribute in the element.
29. 30. type="org.apache.struts.action.DynaActionForm">
31. 32. type="java.lang.String"/>
33. 34. type="java.lang.String"/>
35.

In our example, it will first check to see if an object of the org.apache.struts.action.DynaActionForm class is present in request scope. If so, it will use it; otherwise, it will create a new object and set it in the request scope.
36. processPopulate(): In this method, Struts will populate the ActionForm class instance variables with values of matching request parameters.
37. processValidate(): Struts will call the validate() method of your ActionForm class. If you return ActionErrors from the validate() method, it will redirect the user to the page indicated by the input attribute of the element.
38. processForward() and processInclude(): In these functions, Struts will check the value of the forward or include attributes of the element and, if found, put the forward or include request in the configured page.
39.
40.
41.
You can guess difference in these functions from their names. processForward() ends up calling RequestDispatcher.forward(), and processInclude() calls RequestDispatcher.include(). If you configure both forward and include attributes, it will always call forward, as it is processed first.
42. processActionCreate(): This function gets the name of the Action class from the type attribute of the element and create and return instances of it. In our case it will create an instance of the com.sample.NewContactAction class.
43. processActionPerform(): This function calls the execute() method of your Action class, which is where you should write your business logic.
44. processForwardConfig(): The execute()method of your Action class will return an object of type ActionForward, indicating which page should be displayed to the user. So Struts will create RequestDispatcher for that page and call the RequestDispatcher.forward() method.
The above list explains what the default implementation of RequestProcessor does at every stage of request processing and the sequence in which various steps are executed. As you can see, RequestProcessor is very flexible and it allows you to configure it by setting properties in the element. For example, if your application is going to generate XML content instead of HTML, then you can inform Struts about this by setting a property of the controller element.
Creating Your own RequestProcessor
Above, we saw how the default implementation of RequestProcessor works. Now we will present a example of how to customize it by creating our own custom RequestProcessor. To demonstrate creating a custom RequestProcessor, we will change our sample application to implement these two business requirements:
• We want to create a ContactImageAction class that will generate images instead of a regular HTML page.
• Before processing every request, we want to check that user is logged in by checking for userName attribute of the session. If that attribute is not found, we will redirect the user to the login page.
We will change our sample application in two steps to implement these business requirements.
1. Create your own CustomRequestProcessor class, which will extend the RequestProcessor class, like this:
2. public class CustomRequestProcessor
3. extends RequestProcessor {
4. protected boolean processPreprocess (
5. HttpServletRequest request,
6. HttpServletResponse response) {
7. HttpSession session = request.getSession(false);
8. //If user is trying to access login page
9. // then don't check
10. if( request.getServletPath().equals("/loginInput.do")
11. || request.getServletPath().equals("/login.do") )
12. return true;
13. //Check if userName attribute is there is session.
14. //If so, it means user has allready logged in
15. if( session != null &&
16. session.getAttribute("userName") != null)
17. return true;
18. else{
19. try{
20. //If no redirect user to login Page
21. request.getRequestDispatcher
22. ("/Login.jsp").forward(request,response);
23. }catch(Exception ex){
24. }
25. }
26. return false;
27. }
28.
29. protected void processContent(HttpServletRequest request,
30. HttpServletResponse response) {
31. //Check if user is requesting ContactImageAction
32. // if yes then set image/gif as content type
33. if( request.getServletPath().equals("/contactimage.do")){
34. response.setContentType("image/gif");
35. return;
36. }
37. super.processContent(request, response);
38. }
39. }
In the processPreprocess method of our CustomRequestProcessor class, we are checking for the userName attribute of the session and if it's not found, redirect the user to the login page.
For our requirement of generating images as output from the ContactImageAction class, we have to override the processContent method and first check if the request is for the /contactimage path. If so, we set the contentType to image/gif; otherwise, it's text/html.
40. Add these lines to your struts-config.xml file after the element to inform Struts that CustomRequestProcessor should be used as the RequestProcessor class:
41.
42. 43. value="com.sample.util.CustomRequestProcessor"/>
44.

Please note that overriding processContent() is OK if you have very few Action classes where you want to generate output whose contentType is something other than text/html. If that is not the case, you should create a Struts sub-application for handling requests for image-generating Actions and set image/gif as the contentType for it.
The Tiles framework uses its own RequestProcessor for decorating output generated by Struts.
ActionServlet
If you look into the web.xml file of your Struts web application, it looks like this:



action=
org.apache.struts.action.ActionServlet



action
*.do


That means ActionServlet is responsible for handling all of your requests to Struts. You can create a sub-class of the ActionServlet class if you want to do something at application startup or shutdown or on every request, but you should try creating a PlugIn or RequestProcessor before extending the ActionServlet class. Before Servlet 1.1, the Tiles framework was based on extending the ActionServlet class to decorate a generated response. But from 1.1 on, it's used the TilesRequestProcessor class.
Conclusion
Deciding to develop your own MVC framework is a very big decision--you should think about the time and resources it will take to develop and maintain that code. Struts is a very powerful and stable framework and you can change it to accommodate most of your business requirements.
On the other hand, the decision to extend Struts should not be taken lightly. If you put some low-performance code in your RequestProcessor class, it will execute on every request and can reduce the performance of your whole application. And there will be situations where it will better for you to create your own MVC framework than extend Struts.

Good References.... :)

Contents References
1.XML
1.www.w3schools.com
2. http://www.w3schools.com/schema/schema_intro.asp

2.XML Schema
1.www.w3schools.com
2.E-book :xml schema
Eric Van Der Vlist
Publisher:o’reilly
3.Web Services
www.w3schools.com
4.JAXB
www.w3schools.com
2. http://java.sun.com/webservices/docs/1.6/tutorial/doc/