Wtlab
Wtlab
Wtlab
1) HOME PAGE
DESCRIPTION:
! The static home page must contain three frames.
• Top frame : Logo and the college name and links to Home page, Login page,
Registration page,
• Left frame : At least four links for navigation, which will display the catalogue of
respective links.
" For e.g.: When you click the link “CSE” the catalogue for CSE Books should be
displayed in the Right frame.
• Right frame: The pages to the links in the left frame must be loaded here. Initially
this page contains description of the web site.
PROGRAM:
Homepage
<head>
<frameset rows="20%,*">
! <frame src="topframe.html"name="f1">
<frameset cols="20%,*">
! <frame src="leftframe.html"name="f2">
! <frame src="rightframe.html"name="f3">
! </frameset>
</frameset>
</head>
OUTPUT:
1
2
Top frame:
<html>
<body>
<p>
<img src="C:\Documents and Settings\All Users\Documents\My Pictures\Sample
Pictures\Winter.jpg" align=left width=100 height=100">
<h1 align=center>Online book store</h1>
</p>
<br>
<p>
<h2> nbsp;
<a href="homepage.html" target=_parent>
Home
</a>
<a href="login.html" target="f3">
login
</a>
<a href="registration.html" target="f3">
registration
</a>
nbsp;
<a href="catalogue.html" target="f3">
Catalogue
</a>
<a href="cart.html" target="f3">
Cart
</a>
2 2
3
</h2>
</p>
</body>
</html>
OUTPUT:
3
4
Leftframe:
<html>
<body>
<a href=cse.html target="f3"><h3>CSE</h3> </a><br><br><br><br><br>
<a href=ece.html target="f3"><h3>ECE</h3></a><br><br><br><br><br>
<a href=eee.html target="f3"><h3>EEE</h3></a><br><br><br><br><br>
<a href=civil.html target="f3"><h3>Civil</h3></a>
</body>
</html>
OUTPUT:
4 4
5
Right frame:
<html>
<body bgcolor="pink">
<p>
<h2 align="center"> <font face="times new roman" color="green" >Online book
store information </font> </h2>
OUTPUT:
5
6
2) LOGIN PAGE
DESCRIPTION:
The login page contains the user name and the password of the user to
authenticate.
PROGRAM:
<html>
<head>
<p style= "background:yellow; top:100px; left:250px; position:absolute; ">
</head>
<body background=”E:\1.jpg”>
<form action="index.jsp" method="get">
! <label>
<font face="comic sans ms" color="green" size="5">Login </font>
</label>
<input type="text" size="20" maxlength="20" value=' '><br><br><br>
! <label>
<font face="comic sans ms" color="green" size="5">Password </font>
</label>
! <input type="password" size="20" maxlength="20"> <br><br><br>
! <input type="submit" value="submit">
! <input type="reset">
</form>
</body>
</html>
6 6
7
OUTPUT:
7
8
3) CATOLOGUE PAGE
DESCRIPTION:
! The catalogue page should contain the details of all the books available in the web
site in a table.
The details should contain the following:
PROGRAM:
<html>
<body>
<center>
<table border=1>
<tr>
<th> Book Preview </th>
<th> Book Details </th>
<th> Price </th>
<th> Payment </th>
</tr>
<tr>
<td> <img src="C:\Documents and Settings\All users\My Documents\My Pictures
\xml.bmp" width=100 height=50>
</img>
</td>
<td>
<pre>
8 8
9
9
10
10 10
11
RESULT:
! Thus the home page, login page, catalogue page for the online book store are
created successfully
11
12
4) CART PAGE
DESCRIPTION:
! The cart page contains the details about the books which are added to the cart.
PROGRAM:
<html>
<body>
<center><br><br><br>
<img src=”E:\aa.jpg”>
<table border=1 cellpadding=center>
<thead>
<tr>
<th>Book name</th>
<th>price</th>
<th>quantity</th>
<th>amount</th>
</tr>
</thead>
<tr>
<td>java 2</td>
<td>$45</td>
<td>2</td>
12 12
13
<td>$70</td>
</tr>
<tr>
<td> XML bible</td>
<td> $20</td>
<td> 5</td>
<td> $40</td>
</tr>
<th colspan=4>total amount=$110>
</th>
</tr>
</table>
</center>
</body>
</html>
OUTPUT:
13
14
5) REGISTRATION PAGE
DESCRIPTION:
Create a “registration form “with the following fields
" " 1)Name(Textfield)
" " 2) Password (password field)
! ! 3) E-mail id (text field)
! ! 4) Phone number (text field)
! ! 5) Sex (radio button)
! ! 6) Date of birth (3 select boxes)
" " 7) Languages known (check boxes – English, Telugu, Hindi, Tamil)
! ! 8) Address (text area)
PROGRAM:
<html>
<body>
<center>
<img src=”E:\aaa.jpg” align=”left”>
<form>
<label>name</label>
<input type="text" size="20"><br><br> <br>
<label>password</label>
<input type="password" size="20" maxsize="28"><br> <br> <br>
<label>email</label>
<input type="text" size="30"><br> <br> <br>
<label>phone no</label>
<input type="text" size="2">
<input type="text" size="6">
<input type="text" size="10"><br> <br> <br>
<label>Sex</label>
<input type="radio" name="sex">m
<input type="radio" name="sex">f <br> <br> <br>
14 14
15
15
16
OUTPUT:
RESULT:
! Thus the registration and cart pages for online book store pages are created
successfully
16 16
17
--------------------------------------------------------------------------------------------------------
----
AIM: Write JavaScript to validate the following fields of the above registration page.
1. Name (Name should contains alphabets and the length should not be less than
6 characters).
2. Password (Password should not be less than 6 characters length).
3. E-mail id (should not contain any invalid and must follow the standard pattern
[email protected])
4.Phone number (Phone number should contain 10 digits only).
DESCRIPTION:
JavaScript is a simple scripting language invented specifically for use in web
browsers to make websites more dynamic. On its own, HTML is capable of outputting
more-or-less static pages. Once you load them up your view doesn't change much until
you click a link to go to a new page. Adding JavaScript to your code allows you to change
how the document looks completely, from changing text, to changing colors, to changing
the options available in a drop-down list. JavaScript is a client-side language.
JavaScripts are integrated into the browsing environment, which means they can
get information about the browser and HTML page, and modify this information, thus
changing how things are presented on your screen. This access to information gives
JavaScript great power to modify the browsing experience. They can also react to events,
such as when the user clicks their mouse, or points to a certain page element. This is also
a very powerful ability.
Regular Expressions:
" One of the most common situations that come up is having an HTML form for
users to enter data. Normally,#we might be interested in the#visitor’s name,#phone number
and email address, and so forth.#However, even#if we are very careful about putting some
hints next to each required field, some visitors are going to get it wrong, either
accidentally or for malicious purposes. Here’s where regular expressions come in handy. A
regular expression is a way of describing a pattern in a piece of text. In fact, it’s an easy
17
18
way of matching a string to a pattern. We could write a simple regular expression and use
it to check, quickly, whether or not any given string is a properly formatted user input.
This#saves us from difficulties and allows us to write clean and tight code.
! A regular expression is a JavaScript object. There are multiple ways of creating
them. They can be created statically when the script is first parsed or dynamically at run
time. A static regular expression is created as follows:
regx=/fish|fow1/;
! Dynamic patterns are created using the keyword to create an instance of the
RegExp class:
" " regx=new RegExp(“fish|fow1”);
Functions:
test(string)- Tests a string for pattern matches. This method returns a Boolean that
indicates whether or not the specified pattern exists within the searched string. This is the
most commonly used method for validation. It updates some of the properties of the
parent RegExp object following a successful search.
exec(string)- Executes a search for a pattern within a string. If the pattern is not found,
exec() returns a null value. If it finds one or more matches it returns an array of the
match results. It also updates some of the properties of the parent RegExp object
PROGRAM:
Valid.js
function fun()
{
var userv=document.forms[0].user.value;
var pwdv=document.forms[0].pwd.value;
var emailv=document.forms[0].email.value;
var phv=document.forms[0].ph.value;
! var userreg=new RegExp("^[a-zA-Z][a-zA-Z0-9]*$");
! var emailreg=new RegExp("^[a-zA-Z][a-zA-Z0-9_.]*@[a-zA-Z][a-zA-Z0-9_.]*.
[a-zA-Z][a-zA-Z0-9_.]{2}.[a-zA-Z][a-zA-Z0-9_.]{2}$|^[a-zA-Z][a-zA-Z0-9_.]*@[a-zA-
Z][a-zA-Z0-9_.]*.[a-zA-Z][a-zA-Z0-9_.]{3}$");
! var phreg=new RegExp("^[0-9]{10}$");
var ruser=userreg.exec(userv);
18 18
19
var remail=emailreg.exec(emailv);
var rph=phreg.exec(phv);
if(ruser && remail && rph && (pwdv.length > 6))
! {
! alert("All values are valid");!
! return true;
! }
! else
! {
! if(!ruser) { alert("username invalid");document.forms[0].user.focus();}
! if(!remail) { alert("password invalid");document.forms[0].user.focus();}
! if(!rph) { alert("phone number invalid");document.forms[0].ph.focus();}!
! if(pwdv.length < 6) { alert("password invalid");document.forms[0].pwd.focus();}
! return false;
! }
}
Register.html
<html>
<body>
<center>
<fieldset>
<legend>Registration</legend>
<form action="Database" method="get" onSubmit="return fun()">
<pre>
Name !! :<input type="text" name="user" size="10"><br>
Password! :<input type="password" name="pwd" size="10"><br>
E-mail ! :<input type="text" name="email" size="10"><br>
Phone Number ! :<input type="text" name="ph" size="10"><br>
<input type="submit" value="Register">
</pre>
</form>
</body>
<script src="valid.js"></script>
</html>
19
20
OUTPUT:
20 20
21
RESULT:
! Thus the home page, login page, catalogue page for the online book store are
created successfully
21
22
DESCRIPTION:
22 22
23
Generally speaking we can say that all the styles will "cascade" into a new "virtual"
style sheet by the following rules:
1. External style sheet
2. Internal style sheet (inside the <head> tag)
3. Inline style (inside an HTML element)
An inline style (inside an HTML element) has the highest priority, which means that it
will override a style declared inside the <head> tag, in an external style sheet, or in a
browser (a default value).
Syntax
The CSS syntax is made up of three parts: a selector, a property and a value:
selector {property: value}
The selector is normally the HTML element/tag you wish to define, the property is the
attribute you wish to change, and each property can take a value. The property and value
are separated by a colon, and surrounded by curly braces:
body {color: black}
External Style Sheet
An external style sheet is ideal when the style is applied to many pages. With an
external style sheet, you can change the look of an entire Web site by changing one file.
Each page must link to the style sheet using the <link> tag. The <link> tag goes inside
the head section:
<head>
<link rel="stylesheet" type="text/css"
href="mystyle.css" />
</head>
The browser will read the style definitions from the file mystyle.css, and format the
document according to it.
Internal Style Sheet
An internal style sheet should be used when a single document has a unique style.
You define internal styles in the head section by using the <style> tag,
<head>
23
24
<style>
selector {property:value; property:value;…..}
</style>
</head>
Inline Styles
An inline style loses many of the advantages of style sheets by mixing content with
presentation. Use this method sparingly, such as when a style is to be applied to a single
occurrence of an element.
To use inline styles you use the style attribute in the relevant tag. The style attribute can
contain any CSS property.
<p style="color: sienna; margin-left: 20px">
This is a paragraph </p>
PROGRAM:
Cas.css:
a:link{color:black;}
a:visited{color:pink;}
a:active{color:red;}
a:hover{color:green;}
.right {
text-align:center;
text-decoration:underline;
font-weight:bold;
color:blue;
font-family:comic sans ms;
font-size:30; }
.image {
text-align:left;
font-family:"monotype corsiva";
24 24
25
font-weight:10;
}
.image1 {
background-image:url("C:\Documents and Settings\All Users\My
Documents\My Pictures\krishna.jpg");
background-attachment:fixed;
! background-repeat:no-repeat;
width:150;
height:150; }
table { align:center;border:10;
! border-style:ridge;
! border-color:yellow;}
htm.html:
<html>
<head>
<link rel="stylesheet" href="cas.css" type="text/css">
<style>
.xlink{ text-decoration:none;font-weight:bold;cursor:crosshair;}
.ylink{text-decoration:underline;font-weight:bold;cursor:help;}
</style>
</head>
<body class="image">
<p style="text-align:right;">
<a href="registration.html" class="xlink"> Reg Link</a>
<a href="topframe.html" class="ylink"> Help Link</a>
</p>
<p class="right">PVPSIT</p>
<div style="position:relative;font-size:90px;z-index:5;color:purple;">PVPSIT</div>
25
26
26 26
27
OUTPUT:
RESULT: Thus different style of CSS and different type of the properties are applied.
27
28
DESCRIPTION:
28 28
29
Finally, you must also consider the fact that the XML Schema is an XML
document. It has an XML Namespace to refer to, and an XML DTD to define it. This is
all overhead. When a parser examines the document, it may have to link this all in,
interpret the DTD for the Schema, load the namespace, and validate the schema, etc., all
before it can parse the actual XML document in question. If you're using XML as a
protocol between two systems that are in heavy use, and need a quick response, then this
overhead may seriously degrade performance.
PROGRAM:
XML document (bookstore.xml)
<bookstore>
! <book>
! ! <title>web programming</title>
! ! <author>chrisbates</author>
! ! <ISBN>123-456-789</ISBN>
! ! <publisher>wiley</publisher>
! ! <edition>3</edition>
! ! <price>350</price>
! </book>
! <book>
! ! <title>internet worldwideweb</title>
! ! <author>ditel&ditel</author>
! ! <ISBN>123-456-781</ISBN>
! ! <publisher>person</publisher>
! ! <edition>3</edition>
! ! <price>450</price>
! </book>
</bookstore>
29
30
Bookstore.xml
<!DOCTYPE bookstore SYSTEM "C:\Documents and Settings
\Administrator\My Documents\bookstore.dtd">
<bookstore>
! <book>
! ! <title>web programming</title>
! ! <author>chrisbates</author>
! ! <ISBN>123-456-789</ISBN>
! ! <publisher>wiley</publisher>
! ! <edition>3</edition>
! ! <price>350</price>
! </book>
! <book>
! ! <title>internet worldwideweb</title>
! ! <author>ditel&ditel</author>
! ! <ISBN>123-456-781</ISBN>
! ! <publisher>person</publisher>
! ! <edition>3</edition>
! ! <price>450</price>
! </book>
</bookstore>
30 30
31
</xs:element>
! !
! ! </xs:sequence>
! ! </xs:complexType>
!
! </xs:element>
</xs:schema>
Bookstore.xml
<bookstore xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="C:\Documents and Settings
\Administrator\My Documents\bookstore.xsd">
! <book>
! ! <title>web programming</title>
! ! <author>chrisbates</author>
! ! <ISBN>123-456-789</ISBN>
! ! <publisher>wiley</publisher>
! ! <edition>3</edition>
! ! <price>350</price>
! </book>
! <book>
! ! <title>internet worldwideweb</title>
! ! <author>ditel&ditel</author>
! ! <ISBN>123-456-781</ISBN>
! ! <publisher>person</publisher>
! ! <edition>3</edition>
! ! <price>450</price>
! </book>
</bookstore>
PROGRAM:
XML:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="bookstore.xsl"?>
31
32
<bookstore>
<book>
<title>Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book>
<title>Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book>
<title>Learning XML</title>
<author>Erik T. Ray</author>
<year>2003</year>
<price>39.95</price>
</book>
</bookstore>
XSL:
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/">
<html>
<body>
<h2> My Books collection</h2>
<table border="1">
<tr bgcolor="red">
<th align="left">title</th>
<th align="left">author</th>
32 32
33
</tr>
<xsl:for-each select="bookstore/book">
<tr>
<td><xsl:value-of select="title"/></td>
<xsl:choose>
<xsl:when test="price > 30">
<td bgcolor="yellow"><xsl:value-of select="author"/></td>
</xsl:when>
<xsl:when test="price > 10">
<td bgcolor="magneta"><xsl:value-of select="author"/></td>
</xsl:when>
<xsl:otherwise>
<td><xsl:value-of select="author"/></td>
</xsl:otherwise>
</xsl:choose>
</tr>
</xsl:for-each>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
33
34
OUTPUT:
RESULT: Thus the XML stylesheets are successfully used to display the content in a
table format.
34 34
35
DESCRIPTION:
A Bean is a JavaBeans component. Beans are independent, reusable software
modules. Beans may be visible objects, like AWT components, or invisible objects, like
queues and stacks. A builder/integration tool manipulates Beans to create applets and
applications.
Beans consist of three things:
!Events
An event allows your Beans to communicate when something interesting
happens. There are three parts to this communication:
EventObject
Event Listener - (the sink)
An Event Source (the Bean)
The event source defines when and where an event will happen. Classes register
themselves as interested in the event, and they receive notification when the event
happens. A series of methods patterns represents the registration process:
public synchronized void addListenerType(ListenerType l);
public synchronized void removeListenerType( ListenerType l);
!Properties
Properties define the characteristics of the Bean. For instance, when examining an AWT
TextField for its properties, you will see properties for the caret position, current text, and
35
36
the echo character, among others. A property is a public attribute of the Bean, usually
represented by a non-public instance variable. It can be read-write, read-only, or write-
only. There are four different types of properties:
" Simple - As the name implies, simple properties represent the simplest of the
four. To create a property, define a pair of set/get routines. Whatever name used
in the pair of routines, becomes the property name
" Indexed - An indexed property is for when a single property can hold an array of
values. The design pattern for these properties is:
public void setPropertyName (PropertyType[] list)
public void setPropertyName (
! PropertyType element, int position)
public PropertyType[] getPropertyName ()
public PropertyType getPropertyName (int position)
" Bound – A bean that has the bound property generates an event when the
property is changed. The event is of type propertyChangeEvent and is sent to objects
that previously registered an interest in receiveing such notifications. In order for
the notification to happen, you need to maintain a watch list for
PropertyChangeEvents via the PropertyChangeSupport class. First, you have to
create a list of listeners to maintain:
private PropertyChangeSupport changes =
! ! new PropertyChangeSupport (this);
And then, you have to maintain the list:
public void addPropertyChangeListener (
! PropertyChangeListener p) {
! changes.addPropertyChangeListener (p);
}
public void removePropertyChangeListener (
! PropertyChangeListener p) {
! changes.removePropertyChangeListener (p);
}
36 36
37
PROGRAM:
package sunw.demo.colors;
import java.awt.*;
import java.awt.event.*;
public class Colors extends Canvas
{
transient private Color color;
private boolean rectangular;
37
38
public Colors()
{
addMouseListener(new MouseAdapter(){
public void mousePressed(MouseEvent me){
change(); }
});
rectangular=false;
setSize(100,100);
change();
}
public boolean getRectangular()
{
return rectangular;
}
public void setRectangular(boolean flag)
{
this.rectangular=flag;
repaint();
}
public void change()
{
color=randomColor();
repaint();
}
private Color randomColor()
{
int r=(int)(255*Math.random());
int g=(int)(255*Math.random());
int b=(int)(255*Math.random());
return new Color(r,g,b);
}
38 38
39
39
40
OUTPUT:
40 40
41
RESULT:
! Thus the colors bean is created successfully.
41
42
Program 2:
! public convert()
! {
! setSize(100,1000);
! }
! public double getDollars()
! {
! return dollars;
! }
! public void setDollars(double value)
! {
! this.dollars=value;
! }
! public void setRupees(double value)
! {
! this.rupees=value;
! }
! public double getRupees()
! {
! return rupees;
! }
! public void change()
! {
! dollarvalue= value();
! repaint();
! }
! private double value()
! {
! return rupees*dollars;
! }
! public void paint(Graphics g)
42 42
43
! {
! g.setColor(Color.red);
! g.drawString(String.valueOf(dollarvalue),10,10);
! }
}
!
Convert.mf
Name: sunw/demo/convert/convert.class
Java-Bean: True ( press Enter)
(Carriage return compulsory)
43
44
Result
Thus the convertion bean is created successfully
44 44
45
Program 3:
package sunw.demo.colors;
import java.awt.*;
import java.awt.event.*;
public class mouseclick extends Canvas {
public int count=0;
public mouseclick() {
addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent me) {
change();
}
});
setSize(100,100);
}
public void change() {
count++;
repaint();
}
public void paint(Graphics g) {
Dimension d = getSize();
int h = d.height;
int w = d.width;
g.setColor(Color.red);
g.fillRect(0,0,100,100);
g.setColor(Color.blue);
g.drawString(String.valueOf(count),50,50);
}
}
Mouseclick.mft
Name: sunw/demo/colors/mouseclick.class
Java-Bean: True
45
46
Output
Result
Thus the Mouse Clicks bean is created successfully
46 46
47
Week-7:! ! ! ! ! ! ! Date:
11-08-08
------------------------------------------------------------------------------------------------------------
AIM:! Install TOMCAT web server and APACHE.
While installation assign port number 8080 to APACHE. Make sure that these ports are
available i.e., no other process is using this port.
!
DESCRIPTION:
You must set the JAVA_HOME environment variable to tell Tomcat where to find
Java. Failing to properly set this variable prevents Tomcat from handling JSP pages. This
variable should list the base JDK installation directory, not the bin subdirectory.
On Windows XP, you could also go to the Start menu, select Control Panel, choose
System, click on the Advanced tab, press the Environment Variables button at the bottom,
and enter the JAVA_HOME variable and value directly as:
! Name: JAVA_HOME
! Value: C:\jdk
47
48
The next step is to tell Tomcat to check the modification dates of the class files of
requested servlets and reload ones that have changed since they were loaded into the
server's memory. This slightly degrades performance in deployment situations, so is
turned off by default. However, if you fail to turn it on for your development server, you'll
have to restart the server every time you recompile a servlet that has already been loaded
into the server's memory.
To turn on servlet reloading, edit install_dir/conf/server.xml and add a DefaultContext
subelement to the main Host element and supply true for the reloadable attribute. For
example, in Tomcat 5.0.27, search for this entry:
<Host name="localhost" debug="0" appBase="webapps" ...>
and then insert the following immediately below it:
<DefaultContext reloadable="true"/>
Be sure to make a backup copy of server.xml before making the above change.
• Enable the Invoker Servlet
The invoker servlet lets you run servlets without first making changes to your Web
application's deployment descriptor. Instead, you just drop your servlet into WEB-INF/
classes and use the URL http://host/servlet/ServletName. The invoker servlet is extremely
convenient when you are learning and even when you are doing your initial development.
To enable the invoker servlet, uncomment the following servlet and servlet-mapping
elements in install_dir/conf/web.xml. Finally, remember to make a backup copy of the
original version of this file before you make the changes.
<servlet>
<servlet-name>invoker</servlet-name>
<servlet-class>
org.apache.catalina.servlets.InvokerServlet
</servlet-class>
...
</servlet>
...
<servlet-mapping>
<servlet-name>invoker</servlet-name>
48 48
49
<url-pattern>/servlet/*</url-pattern>
</servlet-mapping>
OUTPUT:
49
50
50 50
51
Week-7:! ! ! ! ! ! ! Date:
11-08-08
------------------------------------------------------------------------------------------------------------
AIM:! Access the developed static web pages for books web site, using these servers by
putting the web pages developed in week-1 and week-2 in the document root.
OUTPUT
51
52
RESULT:Thus week-1 and week-2 pages are accessed using the TOMCAT web server
successfully.
52 52
53
Week-8: Date:
10-09-08
--------------------------------------------------------------------------------------------------------
----
AIM:
User Authentication:
Assume four users user1, user2, user3 and user4 having the passwords pwd1,
pwd2, pwd3 and pwd4 respectively. Write a servelet for doing the following.
1. Create a Cookie and add these four user id’s and passwords to this Cookie.
2. Read the user id and passwords entered in the Login form (week1) and
authenticate with the values (user id and passwords) available in the cookies.
If he is a valid user (i.e., user-name and password match) you should welcome
him by name (user-name) else you should display “You are not an
authenticated user “. Use init-parameters to do this. Store the user-names and
passwords in the web.xml and access them in the servlet by using the
getInitParameters() method.
DESCRIPTION:
Servlet Life cycle:
1. Servlet class loading
2. Servlet Instantiation
3. call the init method
4. call the service method
5. call destroy method
Class loading and instantiation
If you consider a servlet to be just like any other Java program, except that it runs
within a servlet container, there has to be a process of loading the class and making it
ready for requests. Servlets do not have the exact equivalent of a main method that causes
them to start execution.
When a web container starts it searches for the deployment descriptor
(WEB.XML) for each of its web applications. When it finds a servlet in the descriptor it
53
54
will create an instance of the servlet class. At this point the class is considered to be loaded
(but not initialized).
The init method
The HttpServlet class inherits the init method from GenericServlet. The init
method performs a role slightly similar to a constructor in an “ordinary” Java program in
that it allows initialization of an instance at start up. It is called automatically by the
servlet container and as it causes the application context (WEB.XML) to be parsed and
any initialization will be performed. It comes in two versions, one with a zero parameter
constructor and one that takes a ServletConfig parameter.
The servlet engine creates a request object and a response object. The servlet engine
invokes the servlet service() method, passing the request and response objects. Once the
init method returns the servlet is said to be placed into service. The process of using init
to initialize servlets means that it is possible to change configuration details by modifying
the deployment descriptor without having them hard coded in with your Java source and
needing a re-compilation.
! ! void init(ServletConfig sc)
Calling the service method
The service() method gets information about the request from the request object,
processes the request, and uses methods of the response object to create the client
response. The service method can invoke other methods to process the request, such as
doGet(), doPost(), or methods you write. The service method is called for each request
processed and is not normally overridden by the programmer.
The code that makes a servlet “go” is the. servlet
void service(ServletRequest req,ServletResponse res)
The destroy Method
Two typical reasons for the destroy method being called are if the container is
shutting down or if the container is low on resources. This can happen when the
container keeps a pool of instances of servlets to ensure adequate performance. If no
requests have come in for a particular servlet for a while it may destroy it to ensure
resources are available for the servlets that are being requested. The destroy method is
54 54
55
called only once, before a servlet is unloaded and thus you cannot be certain when and if
it is called.
void destroy()
ServletConfig Class
ServletConfig object is used by the Servlet Container to pass information to the
Servlet during it's initialization. Servlet can obtain information regarding initialization
parameters and their values using different methods of ServletConfig class initialization
parameters are name/value pairs used to provide basic information to the Servlet during
it's initialization like JDBC driver name, path to database, username, password etc.
PROGRAM:
cologin.html:
<html>
<head>
<title> login Page </title>
<p style= "background:yellow; top:100px; left:250px; position:absolute; ">
</head>
55
56
<body>
<form ACTION="clogin">
<label> Login </label>
<input type="text" name="usr" size="20"> <br> <br>
<label> Password </label>
<input type="password" name="pwd" size="20"> <br> <br>
<input type="submit" value="submit">
</form>
</body>
</html>
cologin1.html
<html>
<head>
<title> login Page </title>
<p style= "background:yellow; top:100px; left:250px; position:absolute; ">
</head>
<body>
<form ACTION="clogin1">
<label> Login </label>
<input type="text" name="usr" size="20"> <br> <br>
<label> Password </label>
<input type="password" name="pwd" size="20"> <br> <br>
<input type="submit" value="submit">
</form>
</body>
</html>
Addcook.java:
import javax.servlet.* ;
import javax.servlet.http.*;
import java.io.*;
56 56
57
57
58
58 58
59
Web.xml:
<web-app>
<servlet>
<servlet-name>him</servlet-name>
<servlet-class>Clogin</servlet-class>
</servlet>
<servlet>
<servlet-name>him1</servlet-name>
<servlet-class>Addcook</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>him</servlet-name>
<url-pattern>/clogin</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>him1</servlet-name>
<url-pattern>/clogin1</url-pattern>
</servlet-mapping>
</web-app>
59
60
OUTPUT:
60 60
61
61
62
62 62
63
2. Read the user id and passwords entered in the Login form (week1) and authenticate
with the values (user id and passwords) available in the cookies.
If he is a valid user (i.e., user-name and password match) you should welcome him by
name (user-name) else you should display “You are not an authenticated user “.
Use init-parameters to do this. Store the user-names and passwords in the webinf.xml and
access them in the servlet by using the getInitParameters() method.
home.html:
<html>
<head>
<title>Authentication</title>
</head>
<body>
<form action="ex1">
<label>Username </label>
<input type="text"size="20" name="user"><br><br>
password<input type="text" size="20" name="pwd"><br><br>
<input type="submit" value="submit">
</form>
</body>
</html>
Example1.java
import javax.servlet.*;
import java.io.*;
public class Example1 extends GenericServlet
{
private String user1,pwd1,user2,pwd2,user3,pwd3,user4,pwd4,user5,pwd5;
public void init(ServletConfig sc)
{
user1=sc.getInitParameter("username1");
pwd1=sc.getInitParameter("password1");
63
64
user2=sc.getInitParameter("username2");
pwd2=sc.getInitParameter("password2");
! user3=sc.getInitParameter("username3");
pwd3=sc.getInitParameter("password3");
! user4=sc.getInitParameter("username4");
pwd4=sc.getInitParameter("password4");!
}
Public void service(ServletRequest req,ServletResponse res)throws
ServletException,IOException
{
res.setContentType("text/html");
PrintWriter out=res.getWriter();
user5=req.getParameter("user");
pwd5=req.getParameter("pwd");
if((user5.equals(user1)&&pwd5.equals(pwd1))||(user5.equals(user2)&&pwd5.equals
(pwd2))||(user5.equals(user3)&&pwd5.equals(pwd3))||(user5.equals(user4)
&&pwd5.equals(pwd4)))
out.println("<p> welcome to"+user5.toUpperCase());
else
out.println("You are not authorized user");
}
}
web.xml:
<web-app>
<servlet>
<servlet-name>Example</servlet-name>
<servlet-class>Example1</servlet-class>
<init-param>
64 64
65
<param-name>username1</param-name>
<param-value>pvpsit</param-value>
</init-param>
<init-param>
<param-name>password1</param-name>
<param-value>cse</param-value>
</init-param>
<init-param>
<param-name>username2</param-name>
<param-value>1234</param-value>
</init-param>
<init-param>
<param-name>password2</param-name>
<param-value>4567</param-value>
</init-param>
<init-param>
<param-name>username3</param-name>
<param-value>cse</param-value>
</init-param>
<init-param>
<param-name>password3</param-name>
<param-value>pvpsit</param-value>
</init-param>
<init-param>
<param-name>username4</param-name>
<param-value>wt</param-value>
</init-param>
<init-param>
<param-name>password4</param-name>
<param-value>lab</param-value>
</init-param>
65
66
</servlet>
<servlet-mapping>
<servlet-name>Example</servlet-name>
<url-pattern>/ex1</url-pattern>
</servlet-mapping>
</web-app>
66 66
67
OUTPUT:
RESULT:
Thus the user authentication is carried out for four users by using both cookies
and getInitParameters successfully.
67
68
DESCRIPTION:
68 68
69
PROGRAM:
Registration.html:
<html>
<head>
<title>Registration page</title>
</head>
<body bgcolor="#00FFFf">
<form METHOD="POST" ACTION="register">
<CENTER>
<table>
<center>
<tr> <td> Username </td>
<td><input type="text" name="usr"> </td> </tr>
<tr><td> Password </td>
<td><input type="password" name="pwd"> </td> </tr>
<tr><td>Age</td>
<td><input type="text" name="age"> </td> </tr>
<tr> <td>Address</td>
<td> <input type="text" name="add"> </td> </tr>
<tr> <td>email</td>
<td> <input type="text" name="mail"> </td> </tr>
<tr> <td>Phone</td>
69
70
Login.html
<html>
<head>
<title>Registration page</title>
</head>
<body bgcolor=pink> <center> <table>
<form METHOD="POST" ACTION="authent">
<tr> <td> Username </td>
<td><input type="text" name="usr"></td> </tr>
<tr> <td> Password </td>
<td> <input type="password" name="pwd"> </td> </tr>
<tr> <td align=center colspan="2"><input type="submit" value="submit"></td> </
tr>
</table> </center>
</form>
</body>
</html>
Ini.java:
import javax.servlet.*;
import java.sql.*;
import java.io.*;
public class Ini extends GenericServlet
70 70
71
{
private String user1,pwd1,email1;
p u b l i c v o i d s e r v i c e ( S e r v l e t Re q u e s t r e q , S e r v l e t Re s p o n s e r e s ) t h r o w s
ServletException,IOException
{
user1=req.getParameter("user");
pwd1=req.getParameter("pwd");
email1=req.getParameter("email");
res.setContentType("text/html");
PrintWriter out=res.getWriter();
try
{
Class.forName("oracle.jdbc.driver.OracleDriver");
C o n n e c t i o n c o n = D r i v e r M a n a g e r. g e t C o n n e c t i o n
("jdbc:oracle:thin:@195.100.101.158:1521:cclab","scott","tiger");
PreparedStatement st=con.prepareStatement("insert into personal values(?,?,?,?,?,?)");
st.setString(1,user1);
st.setString(2,pwd1);
st.setString(3,"25");
st.setString(4,"hyd");
st.setString(5,email1);
st.setString(6,"21234");
st.executeUpdate();
con.close();
}
catch(SQLException s)
{ out.println("not found "+s);
}
catch(ClassNotFoundException c)
{
71
72
web.xml:
<web-app>
<servlet>
<servlet-name>init1</servlet-name>
<servlet-class>Ini</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>init1</servlet-name>
<url-pattern>/regis</url-pattern>
</servlet-mapping>
</web-app>
OUTPUT:
72 72
73
73
74
74 74
75
75
76
RESULT:
! Thus a table is created and the details are entered into the table using jdbc from
the registration form successfully.
76 76
77
Week-10 Date:
29-09-08
--------------------------------------------------------------------------------------------------------
----
AIM: Write a JSP which does the following job
Insert the details of the 3 or 4 users who register with the web site (week9) by using
registration form. Authenticate the user when he submits the login form using the user
name and password from the database (similar to week8 instead of cookies).
DESCRIPTION:
JSP Scripting Elements
JSP scripting elements let you insert Java code into the servlet that will be generated
from the current JSP page. There are three forms:
1. Expressions of the form <%=#expression#%> that are evaluated and inserted into the
output,
2. Scriptlets of the form <%#code#%> that are inserted into the servlet's service method,
and
3. Declarations of the form <%!#code#%> that are inserted into the body of the servlet
class, outside of any existing methods.
Each of these is described in more detail below.
JSP Expressions
A JSP expression is used to insert Java values directly into the output. It has the
following form:
! <%= Java Expression %>
The Java expression is evaluated, converted to a string, and inserted in the page. This
evaluation is performed at run-time (when the page is requested), and thus has full access
to information about the request. For example, the following shows the date/time that the
page was requested:
! Current time: <%= new java.util.Date() %>
77
78
To simplify these expressions, there are a number of predefined variables that you can
use. These implicit objects are discussed in more detail later, but for the purpose of
expressions, the most important ones are:
• request, the HttpServletRequest;
• response, the HttpServletResponse;
• session, the HttpSession associated with the request (if any); and
• out, the PrintWriter (a buffered version of type JspWriter) used to send output to the
client.
JSP Scriptlets
If you want to do something more complex than insert a simple expression, JSP
scriptlets let you insert arbitrary code into the servlet method that will be built to generate
the page. Scriptlets have the following form:
! <% Java Code %>
Scriptlets have access to the same automatically defined variables as expressions.
So, for example, if you want output to appear in the resultant page, you would use the out
variable.
<%
String queryData = request.getQueryString();
out.println("Attached GET data: " + queryData);
%>
! Note that code inside a scriptlet gets inserted exactly as written, and any static
HTML (template text) before or after a scriptlet gets converted to print statements. This
means that scriptlets need not contain complete Java statements, and blocks left open can
affect the static HTML outside of the scriptlets.
JSP Declarations
A JSP declaration lets you define methods or fields that get inserted into the main
body of the servlet class (outside of the service method processing the request). It has the
following form:
<%! Java Code %>
Since declarations do not generate any output, they are normally used in
conjunction with JSP expressions or scriptlets. For example, here is a JSP fragment that
78 78
79
prints out the number of times the current page has been requested since the server
booted (or the servlet class was changed and reloaded):
<%! private int accessCount = 0; %>
PROGRAM:
Login.html:
<!--Home.html-->
<html> <body>
<center><h1>XYZ Company Ltd.</h1></center>
<table border="1" width="100%" height="100%">
<tr>
! <td valign="top" align="center"><br/>
! ! <form action="auth.jsp"><table>
! ! <tr>
! ! <td colspan="2" align="center"><b>Login Page</b></td>
! ! </tr>
! ! <tr>
! ! <td colspan="2" align="center"><b> </td>
! ! </tr>
! ! <tr>
! ! <td>User Name</td>
! ! <td><input type="text" name="user"/></td>
! ! </tr>
! ! <tr>
! ! <td>Password</td>
! ! <td><input type="password" name="pwd"/></td>
! ! </tr>
! ! <tr>
! ! <td> </td>
! ! <td> </td>
! ! </tr>
! ! <tr>
79
80
80 80
81
if(rs.next())
{
out.println("Authorized person");
}
else
{
out.println("UnAuthorized person");
}
con.close();
}
catch(Exception e){out.println(""+e);}
%>
</body>
</html>
OUTPUT:
81
82
RESULT:
The user is authenticated when he submits the login form using the user name and
password from the database.
82 82
83
PROGRAM:
Retrieve.java:
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import java.io.*;
import java.util.*;
public class Retrieve extends HttpServlet
{
public void service(HttpServletRequest req,HttpServletResponse res) throws
ServletException,IOException
{
res.setContentType("text/html");
PrintWriter out=res.getWriter();
try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection c o n = D r i v e r M a n a g e r. g e t C o n n e c t i o n
("jdbc:oracle:thin:@195.100.101.158:1521:cclab","scott","tiger");
Statement s=con.createStatement();
ResultSet r=s.executeQuery("select * from cart");
out.println("<center> <table border=1>");
83
84
out.println("<thead> <th> Book name </th> <th> Price </th> <th> Quantity </th>
<th> Amount </th> </thead>");
while(r.next())
{
out.println("<tr> <td> "+r.getString(1)+"</td> ");
out.println("<td> "+r.getString(2)+"</td> ");
out.println("<td> "+r.getInt(3)+"</td> ");
out.println("<td> "+r.getString(4)+"</td> </tr>");
}
out.println("</table></center>");
con.close();
}
catch(SQLException sq)
{
out.println("sql exception"+sq);
}
catch(ClassNotFoundException cl)
{
out.println("class not found"+cl);
}
}
}
web.xml:
<web-app>
<servlet>
<servlet-name>set</servlet-name>
<servlet-class>Cartenter</servlet-class>
</servlet>
<servlet>
84 84
85
<servlet-name>display</servlet-name>
<servlet-class>Retrieve</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>set</servlet-name>
<url-pattern>/enterdata</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>display</servlet-name>
<url-pattern>/display1</url-pattern>
</servlet-mapping>
</web-app>
CREATE THE TABLE AND INSERT VALUES INTO THE TABLE:
85
86
OUTPUT:
RESULT:
The data is extracted from the tables and displayed in the catalogue page using JDBC
86 86
87
Program :
Cart .java
import java.util.*;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
public class Cart extends HttpServlet
! {
87
88
if(itemselected!=null)
! {
! for(int i=0;i<itemselected.length;i++)
! {
! item=itemselected[i];
cart.add(item);
! }}!
88 88
89
! {
! pw.println("<br><b>"+it.next()+"</b>");
! }
!
}!
}
Catalogue.java
import java.util.*;
import javax.servlet.http.*;
import javax.servlet.*;
import java.io.*;
public class Catalogue extends HttpServlet
! {
! int itemcount=0;
! public void init(ServletConfig config) throws
ServletException
! {
! super.init(config);
!
! }
! public void service(HttpServletRequest
req,HttpServletResponse res) throws
IOException,ServletException
! {
! res.setContentType("text/html");
PrintWriter pw=res.getWriter();
! HttpSession hs=req.getSession();
ArrayList cart=(ArrayList)hs.getAttribute("cart");
if(cart!=null)
! {
! itemcount=cart.size();
}
!
89
90
pw.println
("<body><center><fieldset><legend>Catalogue</
legend><form action='cart' method='get'><input
type='checkbox' value='Java2' name='book'>java2</
input><br>");
! pw.println("<input type='checkbox' name='book'
value='web programming'>Web programming</
input><br>");
! pw.println("<input type='checkbox' name='book'
value='Java2 Complete Reference'>Java2 Complete
Reference</input><br>");
! pw.println("<input type='checkbox' name='book'
value='Internet & World wide web'>Internet & World
wide web</input><br>");
! pw.println("<input type='checkbox' name='book'
value='Core servlets &JSP'>Core servlets &JSP</
input><br>");
! pw.println("<input type='checkbox' name='book'
value='J2EE 3rd edition'>J2EE 3rd edition</
input><br>");
! pw.println("<input type='checkbox' name='book'
value='Electronic Devices and circuits'>Electronic
Devices and circuits</input><br>");
! pw.println("<input type='checkbox' name='book'
value='Software Engineering'>Software Engineering</
input><br>");
! pw.println("<input type='checkbox' name='book'
value='software project management'>software project
management</input><br>");
! pw.println("<input type='checkbox' name='book'
value='Computer networks'>Computer networks</
input><br>");
! pw.println("</fieldset></center>");
90 90
91
! pw.println("<input type='submit'
value='submit'>");
!
!
}!
}
<web-app>
<servlet>
<servlet-name>Login</servlet-name>
<servlet-class>Login</servlet-class>
<init-param>
<param-name>username</param-name>
<param-value>syam</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>syam</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>Login</servlet-name>
<url-pattern>/login.do</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>cat</servlet-name>
<servlet-class>Catalogue</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cat</servlet-name>
91
92
<url-pattern>/Cat</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>cart</servlet-name>
<servlet-class>Cart</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cart</servlet-name>
<url-pattern>/cart</url-pattern>
</servlet-mapping>
</web-app>
92 92
93
93
94
Description :
Model-View-Controller Pattern
Model-View-Controller (MVC) is a classic design pattern often used by applications that
need the ability to maintain multiple views of the same data. The MVC pattern hinges
on a clean separation of objects into one of three categories — models for maintaining
data, views for displaying all or a portion of the data, and controllers for handling events
that affect the model or view(s).
Because of this separation, multiple views and controllers can interface with the same
model. Even new types of views and controllers that never existed before can interface
with a model without forcing a change in the model design.
How It Works
The MVC abstraction can be graphically represented as follows.
A Concrete Example
We explain the MVC pattern with the help of a simple spinner component which
consists of a text field and two arrow buttons that can be used to increment or
decrement a numeric value shown in the text field. We currently do not have an element
94 94
95
type that can directly represent a spinner component, but it easy is to synthesize a
spinner using existing element types.
The spinner’s data is held in a model that is shared with the text field. The text field
provides a view of the spinner’s current value. Each button in the spinner is an event
source, that spawns an action event every time it is clicked. The buttons can be
hooked up to trampolines that receive action events, and route them to an action
listener that eventually handles that event. Recall that a trampoline is a predefined
action listener that simply delegates action handling to another listener.
Depending on the source of the event, the ultimate action listener either increments or
decrements the value held in the model — The action listener is an example of a
controller.
The trampolines that initially receive the action events fired by the arrow buttons, are
also controllers — However, instead of modifying the spinner’s model directly, they
delegate the task to a separate controller (action listener).
Multiple Controllers
The MVC pattern allows any number of controllers to modify the same model. While
we have so far focused only on the two arrow buttons as likely source of events, there is,
in fact, a third event source in this example — Whenever the text field has focus, hitting
the enter key fires off an action event that may potentially be handled by a different
action listener than the one handling action events from the buttons.
95
96
Program :
Eshop.jsp:
<%@ page session="true" %>
<html>
<head>
<title>BOOK STORE</title>
</head>
<body bgcolor="#33CCFF">
<font face="Times New Roman,Times" size="+3">
BOOK STORE
</font>
<hr><p>
<center>
<form name="shoppingForm"
action="ShoppingServlet"
method="POST">
<b>BOOK:</b>
<select name=BOOK>
<option> 10588 | Hans Bergsten | Java Server Pages | O'Reilly | 2 | 34.95</option>
<option> 10589 | Deitel | Internet |McGraw Hill | 4 | 44.95</option>
<option> 10590 | Winston | XML BIBLE |Wiley | 2 | 14.95</option>
</select>
<b>Quantity: </b><input type="text" name="qty" SIZE="3" value=1>
<input type="hidden" name="action" value="ADD">
<input type="submit" name="Submit" value="Add to Cart">
</form>
</center>
96 96
97
<p>
<jsp:include page="Cart.jsp" flush="true" />
</body>
</html>
Cart.jsp:
<%@ page session="true" import="java.util.*, shopping.BOOK" %>
<%
Vector buylist = (Vector) session.getValue("shopping.shoppingcart");
if (buylist != null && (buylist.size() > 0)) {
%>
<center>
<table border="0" cellpadding="0" width="100%" bgcolor="#FFFFFF">
<tr>
<td><b>ISBN</b></td>
<td><b>AUTHOR</b></td>
<td><b>TITLE</b></td>
<td><b>PUBLISHER</b></td>
<td><b>EDITION</b></td>
<td><b>PRICE</b></td>
<td><b>QUANTITY</b></td>
<td></td>
</tr>
<%
for (int index=0; index < buylist.size();index++) {
BOOK anOrder = (BOOK) buylist.elementAt(index);
%>
<tr>
<td><b><%= anOrder.getisbn() %></b></td>
<td><b><%= anOrder.getAuthor() %></b></td>
<td><b><%= anOrder.getTitle() %></b></td>
97
98
Checkout.jsp:
<%@ page session="true" import="java.util.*, shopping.BOOK" %>
<html>
98 98
99
<head>
<title>BOOK STORE</title>
</head>
<body bgcolor="#33CCFF">
<font face="Times New Roman,Times" size=+3>
BOOK STORE CHECK OUT
</font>
<hr><p>
<center>
<table border="0" cellpadding="0" width="100%" bgcolor="#FFFFFF">
<tr>
<td><b>ISBN</b></td>
<td><b>AUTHOR</b></td>
<td><b>TITLE</b></td>
<td><b>PUBLISHER</b></td>
<td><b>EDITION</b></td>
<td><b>PRICE</b></td>
<td><b>QUANTITY</b></td>
<td></td>
</tr>
<%
Vector buylist = (Vector) session.getValue("shopping.shoppingcart");
String amount = (String) request.getAttribute("amount");
for (int i=0; i < buylist.size();i++) {
BOOK anOrder = (BOOK) buylist.elementAt(i);
%>
<tr>
<td><b><%= anOrder.getisbn() %></b></td>
<td><b><%= anOrder.getAuthor() %></b></td>
<td><b><%= anOrder.getTitle() %></b></td>
<td><b><%= anOrder.getPublisher() %></b></td>
99
100
100 100
101
</html>
OUTPUT:
Web.xml:
<web-app>
<servlet>
<servlet-name>ShoppingServlet</servlet-name>
<servlet-class>ShoppingServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ShoppingServlet</servlet-name>
<url-pattern>/ShoppingServlet</url-pattern>
</servlet-mapping>
</web-app>
ShoppingServlet.java:
import java.util.*;
import java.io.*;
101
102
import javax.servlet.*;
import javax.servlet.http.*;
import shopping.BOOK;
public class ShoppingServlet extends HttpServlet {
public void init(ServletConfig conf) throws ServletException {
super.init(conf);
}
public void doPost (HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
HttpSession session = req.getSession(false);
if (session == null) {
res.sendRedirect("/error.html");
}
Vector buylist=(Vector)session.getValue("shopping.shoppingcart");
String action = req.getParameter("action");
if (!action.equals("CHECKOUT")) {
if (action.equals("DELETE")) {
String del = req.getParameter("delindex");
int d = (new Integer(del)).intValue();
buylist.removeElementAt(d);
} else if (action.equals("ADD")) {
boolean match=false;
BOOK aCD = getBOOK(req);
if (buylist==null) {
buylist = new Vector(); //first order
buylist.addElement(aCD);
} else { // not first buy
for (int i=0; i< buylist.size(); i++) {
BOOK cd = (BOOK) buylist.elementAt(i);
if (cd.getTitle().equals(aCD.getTitle())) {
102 102
103
cd.setQuantity(cd.getQuantity()+aCD.getQuantity());
buylist.setElementAt(cd,i);
match = true;
} //end of if name matches
} // end of for
if (!match)
buylist.addElement(aCD);
}
}
session.putValue("shopping.shoppingcart", buylist);
String url="/Eshop.jsp";
// ServletContext sc = getServletContext();
RequestDispatcher rd = req.getRequestDispatcher(url);
rd.forward(req, res);
}
! else if (action.equals("CHECKOUT")) {
float total =0;
for (int i=0; i< buylist.size();i++) {
BOOK anOrder = (BOOK) buylist.elementAt(i);
float price= anOrder.getPrice();
int qty = anOrder.getQuantity();
total += (price * qty);
}
total += 0.005;
String amount = new Float(total).toString();
int n = amount.indexOf('.');
amount = amount.substring(0,n+3);
req.setAttribute("amount",amount);
String url="/Checkout.jsp";
ServletContext sc = getServletContext();
RequestDispatcher rd = sc.getRequestDispatcher(url);
103
104
rd.forward(req,res);
}
}
private BOOK getBOOK(HttpServletRequest req) {
104 104
105
String author;
String title;
String publisher;
String Edition;
float price;
int quantity;
public BOOK() {
isbn="";
author="";
title="";
publisher="";
Edition="";! !
price=0;
quantity=0;
}
public void setPublisher(String title1) {
publisher=title1;
}
public String getPublisher() {
return publisher;
}
public void setEdition(String group1) {
Edition=group1;
}
public String getEdition() {
return Edition;
}
public void setisbn(String title) {
isbn=title;
}
public String getisbn() {
105
106
return isbn;
}
public void setAuthor(String group) {
author=group;
}
public String getAuthor() {
return author;
}
public void setTitle(String cty) {
title=cty;
}
public String getTitle() {
return title;
}
public void setPrice(float p) {
price=p;
}
public float getPrice() {
return price;
}
public void setQuantity(int q) {
quantity=q;
}
public int getQuantity() {
return quantity;
}
}
106 106
107
OUTPUT:
107
108
RESULT: Thus the cart page is dynamited with HTTP sessions and useBean concept.
Experiment :14
Description :
Program :
First.jsp
<%@ taglib uri="hello" prefix="examples"%>
<html>
<head>
<title>First Custom tags</title>
</head>
<body>
108 108
109
<i><examples:hello/>
</i>
</body>
</html>
!
Web.xml
<web-app>
<taglib>
<taglib-uri>hello</taglib-uri>
<taglib-location>/WEB-INF/tlds/hello.tld</taglib-location>
</taglib>
</web-app>
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<tag>
<name>hello</name>
<tag-class>tagext.HelloTag</tag-class>
<body-content>JSP</body-content>
</tag>
</taglib>
HelloTag.java
109
110
package tagext;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.TagSupport;
import java.util.*;
public class HelloTag extends TagSupport
{
public int doStartTag()
! {
! return EVAL_BODY_INCLUDE;
! }
! public int doEndTag()
! {
Date date=new Date();
try
{
! pageContext.getOut().write("HellOWorld");
! pageContext.getOut().write("My name is :"+getClass().getName()+"and
it's"+date);
}catch(Exception e){}
return EVAL_PAGE;
}
}
Output
110 110
111
Experiment No : 14
Description:
Apache Struts 2 is an elegant, extensible framework for creating enterprise-ready Java
web applications. The framework is designed to streamline the full development cycle,
from building, to deploying, to maintaining applications over time.
Apache Struts 2 was originally known as WebWork 2. After working independently for
several years, the WebWork and Struts communities joined forces to create Struts2. This
new version of Struts is simpler to use and closer to how Struts was always meant to be.
111
112
Implementation:
Step 1:
Step 2:
112 112
113
Step 3:
Step 4:
113
114
step 5:
114 114
115
step 6:
step 7:
115
116
step 8:
step 9:
116 116
117
Q: After I have edited an HTML file, I cannot view the result in my browser.
Why?
A: Make sure that you have saved the file with a proper name and extension like "c:
\mypage.htm". Also make sure that you use the same name when you open the file in
your browser.
Q: I have edited an HTML file, but the changes don't show in the browser.
Why?
A: A browser caches pages so it doesn't have to read the same page twice. When you have
modified a page, the browser doesn't know that. Use the browser's refresh/reload button
to force the browser to reload the page.
117
118
1. What is XML?
(ans) XML is the Extensible Markup Language. It improves the functionality of the Web
by letting you identify your information in a more accurate, flexible, and adaptable way.
It is extensible because it is not a fixed format like HTML (which is a single, predefined
markup language). Instead, XML is actually a metalanguage—a language for
describing other languages—which lets you design your own markup languages for
limitless different types of documents. XML can do this because it's written in SGML, the
international standard metalanguage for text document markup (ISO 8879).
(ans) A markup language is a set of words and symbols for describing the identity of
pieces of a document (for example ‘this is a paragraph’, ‘this is a heading’, ‘this is a list’,
‘this is the caption of this figure’, etc). Programs can use this with a stylesheet to create
output for screen, print, audio, video, Braille, etc.
Some markup languages (eg those used in wordprocessors) only describe appearances
(‘this is italics’, ‘this is bold’), but this method can only be used for display, and is not
normally re-usable for anything else.
XML is sometimes referred to as ‘self-describing data’ because the names of the markup
elements should represent the type of content they hold.
(ans) Its goal is to enable generic SGML to be served, received, and processed on
the Web in the way that is now possible with HTML. XML has been designed for
ease of implementation and for interoperability with both SGML and HTML.
Despite early attempts, browsers never allowed other SGML, only HTML (although there
were unknownplugins), and they allowed it (even encouraged it) to be corrupted or
broken, which held development back for over a decade by making it impossible to
program for it reliably. XML fixes that by making it compulsory to stick to the rules, and
by making the rules much simpler than SGML.
But XML is not just for Web pages: in fact it's very rarely used for Web pages on its own
because browsers still don't provide reliable support for formatting and transforming it.
Common uses for XML include:
118 118
119
Information identification
because you can define your own markup, you can define meaningful names for all
your information items.
Information storage
XML can therefore be used to store and identify any kind of (hierarchical)
information structure, especially for long, deep, or complex document sets or data
sources, making it ideal for an information-management back-end to serving the Web.
This is its most common Web application, with a transformation system to serve it as
HTML until such time as browsers are able to handle XML consistently.
Publishing
The original goal of XML as defined in the quotation at the start of this section.
Combining the three previous topics (identity, storage, structure) means it is possible to
get all the benefits of robust document management and control (with XML) and
publish to the Web (as HTML) as well as to paper (as PDF) and to other formats (eg
Braille, Audio, etc) from a single source document by using the appropriate
stylesheets.
Messaging and data transfer
XML is also very heavily used for enclosing or encapsulating information in order to
pass it between different computing systems which would otherwise be unable to
communicate. By providing a lingua franca for data identity and structure, it provides a
common envelope for inter-process communication (messaging).
Web services
Building on all of these, as well as its use in browsers, machine-processable data can
be exchanged between consenting systems, where before it was only comprehensible
by humans (HTML). Weather services, e-commerce sites, blog newsfeeds, AJaX sites,
and thousands of other data-exchange services use XML for data management and
transmission, and the web browser for display and interaction.
4. What is SGML?
119
120
math.albany.edu:8800/hm/sgml/cts-faq.htm
SGML is very large, powerful, and complex. It has been in heavy industrial and
commercial use for nearly two decades, and there is a significant body of expertise and
software to go with it.
XML is a lightweight cut-down version of SGML which keeps enough of its functionality
to make it useful but removes all the optional features which made SGML too complex to
program for in a Web environment.
5. What is HTML?
(ANS)HTML is the HyperText Markup Language (RFC 1866), which started as a small
application of question A.4, SGML for the Web, originating with Tim Berners-Lee at
CERN in 1989–90.
120 120
121
(ans) Not quite; SGML is the mother tongue, and has been used for describing thousands
of different document types in many fields of human activity, from transcriptions of
ancient Irish manuscripts to the technical documentation for stealth bombers, and from
patients' medical and clinical records to musical notation. SGML is very large and
complex, however, and probably overkill for most common office desktop applications.
XML is an abbreviated version of SGML, to make it easier to use over the Web, easier
for you to define your own document types, and easier for programmers to write
programs to handle them. It omits all the complex and less-used options of SGML in
return for the benefits of being easier to write applications for, easier to understand, and
more suited to delivery and interoperability over the Web. But it is still SGML, and XML
files may still be processed in the same way as any other SGML file (see the question on
XML software).
HTML is just one of many SGML or XML applications—the one most frequently used
on the Web.
Technical readers will find it more useful to think of XML as being SGML!! rather than
HTML++.
(ans) XML is a project of the World Wide Web Consortium (W3C), and the development
of the specification is supervised by an XML Working Group. A Special Interest Group of
co-opted contributors and experts from various fields contributed comments and reviews
by email.
(Ans) It removes two constraints which were holding back Web developments:
dependence on a single, inflexible document type (HTML) which was being much
abused for tasks it was never designed for;
the complexity of full question A.4, SGML, whose syntax allows many powerful but
hard-to-program options.
121
122
(ans) HTML was already overburdened with dozens of interesting but incompatible
inventions from different manufacturers, because it provides only one way of describing
your information.
XML allows groups of people or organizations to question C.13, create their own
customized markup applications for exchanging information in their domain (music,
chemistry, electronics, hill-walking, finance, surfing, petroleum geology, linguistics,
cooking, knitting, stellar cartography, history, engineering, rabbit-keeping, question C.19,
mathematics, genealogy, etc).
HTML is now well beyond the limit of its usefulness as a way of describing information,
and while it will continue to play an important role for the content it currently represents,
many new applications require a more robust and flexible infrastructure.
• XML allows documents which are all the same type to be created and handled
consistently and without structural errors, because it provides a standardised way
of describing, controlling, or allowing/disallowing particular types of document
structure. [Note that this has absolutely nothing whatever to do with formatting,
appearance, or the actual text or data content of your documents, only the
structure of them. If you want styling or formatting, see question C.24, ‘How do I
control formatting and appearance?’.]
• XML provides a robust and durable format for information storage and
transmission. Robust because it is based on a proven standard, and can thus be
tested and verified; durable (persistent) because it uses plain-text file formats which
will outlast proprietary binary ones.
• XML provides a common syntax for messaging systems for the exchange of
122 122
123
information between applications. Previously, each messaging system had its own
format and all were different, which made inter-system messaging unnecessarily
messy, complex, and expensive. If everyone uses the same syntax it makes writing
these systems much faster and more reliable.
• XML is free. Not just free of charge (free as in beer) but free of legal
encumbrances (free as in speech). It doesn't belong to anyone, so it can't be
hijacked or pirated. And you don't have to pay a fee to use it (you can of course
choose to use commercial software to deal with it, for lots of good reasons, but you
don't pay for XML itself).
• XML lets you separate form (appearance) from content. Your XML file contains
your document information (text, data) and identifies its structure: your formatting
and other processing needs are identified separately in a stylesheet or processing
system. The two are combined at output time to apply the required formatting to
the text or data identified by its structure (location, position, rank, order, or
whatever).
(ans) Online, there's the XML Specification and the ancillary documentation available
from the W3C; Robin Cover's SGML/XML Web pages with an extensive list of online
reference material and links to software; and a summary and condensed FAQFPRIVATE
Google or other search engine.
For offline resources, see the lists of books, articles, and software for XML in Robin
Cover's SGML and XML Web pages. That site should always be your first port of call.
The events listed below are the ones I have been told about. Please mail me if you come
across others: there are many other XML events around the world, and most of them are
announced on the mailing lists and newsgroups.
(Ans) The two principal online support media are Usenet newsgroups and mailing lists.
The IRC network is also used to some extent, and most individual projects and programs
have their own topic-specific bulletin-boards on their web sites.
123
124
For off-line support, see question A.11, ‘Where do I find more information about XML?’
for details of conferences and summerschools.
• The general-purpose mailing list for public discussion is XML-L: to subscribe, visit
the Web site and click on the link to join.
• For those developing software components for XML there is the xml-dev mailing
list. You can subscribe by sending a 1–line mail message to xml-dev-
[email protected] saying just SUBSCRIBE. Note that this list is for those people
actively involved in developing resources for XML. It is not for general
information about XML (use the XML-L list above for that).
• The XSL-List is for for discussing XSL (both XSLT and XSL:FO). For details of
how to subscribe, see http://www.mulberrytech.com/xsl/xsl-list.
(ans) C and C++ (and other languages like FORTRAN, or Pascal, or Visual Basic, or Java
or hundreds more) are programming languages with which you specify calculations, actions,
and decisions to be carried out in order:
XML is a markup specification language with which you can design ways of describing
information (text or data), usually for storage, transmission, or processing by a program. It
says nothing about what you should do with the data (although your choice of element
names may hint at what they are for):
124 124
125
On its own, an SGML or XML file (including HTML) doesn't do anything. It's a data
format which just sits there until you run a program which does something with it. See
also the question about how to run or execute XML files.
125
126
Servlet concepts
Q: What's the difference between applets and servlets?
A: There are many fundamental differences between Applet and Servlet classes, the
Java API documentation for the two types will show you they have little in
common.
Applets are essentially graphical user interface (GUI) applications that run on the
client side in a network environment, typically embedded in an HTML page.
Applets are normally based on Abstract Windowing Toolkit components to
maintain backward-compatibility with the widest range of browsers' Java
implementations. The application classes are downloaded to the client and run in
a Java Virtual Machine provided by the browser, in a restrictive security
environment called a "sandbox".
Servlets are used to dynamically generate HTTP responses and return HTML
content to Web browsers on the server side. Servlets are often used to validate and
process HTML form submissions and control a series of user interactions in what
is known as a Web application. Servlets can be used to control all aspects of the
request and response exchange between a Web browser and the server, called a
servlet container.
126 126
127
Q: What is URL-rewriting?
A: URL-rewriting is a way of maintaining a session between an HTTP client and
a servlet container which does not use cookies. Rather than exchange a session ID
in a cookie, the servlet container includes it in the hyperlink URLs it generates for
servlets and JSP.
127
128
JSP technology is part of the Java technology family. JSP pages are
compiled into servlets and may call JavaBeans components (beans) or
Enterprise JavaBeans components (enterprise beans) to perform processing
on the server. As such, JSP technology is a key component in a highly
scalable architecture for web-based applications.
JSP pages are not restricted to any specific platform or web server. The JSP
specification represents a broad spectrum of industry input.
What is a servlet?
A servlet is a program written in the Java programming language that runs
on the server, as opposed to the browser (applets). Detailed information
can be found at http://java.sun.com/products/servlet.
Why do I need JSP technology if I already have servlets?
JSP pages are compiled into servlets, so theoretically you could write
servlets to support your web-based applications. However, JSP technology
was designed to simplify the process of creating pages by separating web
presentation from web content. In many applications, the response sent to
the client is a combination of template data and dynamically-generated
128 128
129
data. In this situation, it is much easier to work with JSP pages than to do
everything with servlets.
Where can I get the most current version of the JSP specification?
The JavaServer Pages 2.1 specification is available for download from here.
How does the JSP specification relate to the Java Enterprise Edition 5
Platform?
The JSP 2.1 specification is an important part of the Java EE 5 Platform.
Using JSP and Enterprise JavaBeans technologies together is a great way
to implement distributed enterprise applications with web-based front
ends.
Which web servers support JSP technology?
There are a number of JSP technology implementations for different web
servers. The latest information on officially-announced support can be
found at http://java.sun.com/products/jsp/industry.html.
Is Sun providing a reference implementation for the JSP specification?
The GlassFish project is Sun's free, open-source Java EE 5
implementation.# It includes an implementation of JSP technology version
2.1.# You can download GlassFish builds from https://
glassfish.dev.java.net/.#
How is JSP technology different from other products?
JSP technology is the result of industry collaboration and is designed to be
an open, industry-standard method supporting numerous servers, browsers
and tools. JSP technology speeds development with reusable components
and tags, instead of relying heavily on scripting within the page itself. All
JSP implementations support a Java programming language-based
scripting language, which provides inherent scalability and support for
complex operations.
129