1.-Servlets Tutorial PDF
1.-Servlets Tutorial PDF
SERVLETSTUTORIAL
Simply Easy Learning by tutorialspoint.com
tutorialspoint.com
i
ABOUT THE TUTORIAL
Servlets Tutorial
Servlets provide a component-based, platform-independent method for building Web-based applications,
without the performance limitations of CGI programs. Servlets have access to the entire family of Java
APIs, including the JDBC API to access enterprise databases.
This tutorial will teach you how to use Java Servlets to develop your web based applications in simple and
easy steps.
Audience
This tutorial is designed for Java programmers with a need to understand the Java Servlets framework
and its APIs. After completing this tutorial you will find yourself at a moderate level of expertise in using
Java Servelts from where you can take yourself to next levels.
Prerequisites
We assume you have good understanding of the Java programming language. It will be great if you have
a basic understanding of web application and how internet works.
This tutorial may contain inaccuracies or errors and tutorialspoint provides no guarantee regarding the
accuracy of the site or its contents including this tutorial. If you discover that the tutorialspoint.com site
or this tutorial content contains some errors, please contact us at [email protected]
TUTORIALS POINT
Simply Easy Learning
Table of Content
Servlets Tutorial ....................................................................... 2
Audience .................................................................................. 2
Prerequisites ............................................................................ 2
Copyright & Disclaimer Notice .................................................. 2
Overview .................................................................................. 7
Servlets Architecture: ................................................................................ 7
Servlets Tasks: .......................................................................................... 8
Servlets Packages: .................................................................................... 8
What is Next? ............................................................................................ 8
Environment ............................................................................. 9
Setting up Java Development Kit............................................................... 9
Setting up Web Server: Tomcat............................................................... 10
Setting up CLASSPATH .......................................................................... 11
Life Cycle ............................................................................... 12
The init() method : ................................................................................... 12
The service() method : ............................................................................. 12
The doGet() Method ................................................................................ 13
The doPost() Method ............................................................................... 13
The destroy() method : ............................................................................ 13
Architecture Digram: ................................................................................ 14
Examples ............................................................................... 15
Sample Code for Hello World: ................................................................. 15
Compiling a Servlet: ................................................................................ 16
Servlet Deployment: ................................................................................ 16
Form Data .............................................................................. 18
GET method: ........................................................................................... 18
POST method: ......................................................................................... 18
Reading Form Data using Servlet: ........................................................... 18
GET Method Example Using URL: .......................................................... 19
Using GET Method to Read Form Data.................................. 20
GET Method Example Using Form: ......................................................... 20
POST Method Example Using Form: ...................................................... 20
Passing Checkbox Data to Servlet Program ........................................... 22
Reading Checkbox Data ........................................................ 23
Reading All Form Parameters: ................................................................ 23
Reading All Form Parameters ................................................ 24
Client Request ....................................................................... 26
TUTORIALS POINT
Simply Easy Learning
Methods to read HTTP Header:............................................................... 27
HTTP Header Request Example: ............................................................ 29
HTTP Header Request Example ............................................ 30
Server Response ................................................................... 31
Methods to Set HTTP Response Header: ............................................... 32
HTTP Header Response Example: ......................................................... 33
Auto Refresh Header Setting ................................................. 34
Http Codes ............................................................................. 35
Methods to Set HTTP Status Code: ........................................................ 37
HTTP Status Code Example:................................................................... 37
HTTP Status 407 - Need authentication!!! .............................. 38
APACHE TOMCAT/5.5.29 ...................................................................... 38
Writing Filters ......................................................................... 39
Servlet Filter Methods: ............................................................................. 39
Servlet Filter Example: ............................................................................ 40
Servlet Filter Mapping in Web.xml: .......................................................... 41
Using Multiple Filters: .............................................................................. 41
Filters Application Order: ......................................................................... 42
Exception Handling ................................................................ 43
web.xml Configuration: ............................................................................ 43
Request Attributes - Errors/Exceptions:................................................... 44
Error Handler Servlet Example: ............................................................... 45
Cookies Handling ................................................................... 47
The Anatomy of a Cookie: ....................................................................... 47
Servlet Cookies Methods: ........................................................................ 48
Setting Cookies with Servlet: ................................................................... 49
Example: ................................................................................................. 49
Reading Cookies with Servlet: ................................................................. 50
Example: ................................................................................................. 50
Found Cookies Name and Value ............................................................. 51
Delete Cookies with Servlet: .................................................................... 51
Example: ................................................................................................. 52
Cookies Name and Value ........................................................................ 53
Found Cookies Name and Value ............................................................. 53
Session Tracking.................................................................... 54
Cookies: .................................................................................................. 54
Hidden Form Fields: ................................................................................ 54
URL Rewriting: ........................................................................................ 54
The HttpSession Object: .......................................................................... 55
TUTORIALS POINT
Simply Easy Learning
Session Tracking Example: ..................................................................... 56
Welcome to my website ......................................................... 57
Session Infomation .................................................................................. 57
Welcome Back to my website ................................................ 57
Session Infomation .................................................................................. 57
Deleting Session Data: ............................................................................ 58
Database Access ................................................................... 59
Create Table ............................................................................................ 59
Step 1: ..................................................................................................... 59
Step 2: ..................................................................................................... 59
Step 3: ..................................................................................................... 59
Create Data Records ............................................................................... 60
Accessing a Database: ............................................................................ 60
DatabaseResult ................................................................. 62
File Uploading ........................................................................ 63
Creating a File Upload Form:................................................................... 63
Compile and Running Servlet: ................................................................. 66
Handling Date ........................................................................ 68
Getting Current Date & Time ................................................................... 69
Display Current Date & Time .................................................. 69
Mon Jun 21 21:46:49 GMT+04:00 2010 ................................. 69
Date Comparison:.................................................................................... 70
Date Formatting using SimpleDateFormat: ............................................. 70
Display Current Date & Time .................................................. 71
Mon 2010.06.21 at 10:06:44 PM GMT+04:00 ......................................... 71
Simple DateFormat format codes: ........................................................... 71
Page Redirect ........................................................................ 72
Example: ................................................................................................. 72
Hits Counter ........................................................................... 74
Example: ................................................................................................. 74
Total Number of Hits .............................................................. 76
6 ............................................................................................. 76
Hit Counter for a Website: ....................................................................... 76
Example: ................................................................................................. 76
Auto Refresh .......................................................................... 78
Auto Page Refresh Example: .................................................................. 78
Auto Page Refresh using Servlet ........................................... 79
Sending Email ........................................................................ 80
Send a Simple Email: .............................................................................. 80
TUTORIALS POINT
Simply Easy Learning
Send Email............................................................................. 82
Send an HTML Email: ............................................................................. 82
Send Attachment in Email: ...................................................................... 83
User Authentication Part: ......................................................................... 85
Packaging .............................................................................. 86
Creating Servlets in Packages:................................................................ 86
Compiling Servlets in Packages: ............................................................. 87
Packaged Servlet Deployment: ............................................................... 87
Hello World ............................................................................ 88
Debugging.............................................................................. 89
System.out.println() ................................................................................. 89
Message Logging: ................................................................................... 89
Using JDB Debugger: .............................................................................. 90
Using Comments: .................................................................................... 91
Client and Server Headers: ..................................................................... 91
Important Debugging Tips: ...................................................................... 91
Internationalization ................................................................. 92
Detecting Locale: ..................................................................................... 92
Example: ................................................................................................. 93
Languages Setting: .................................................................................. 93
Locale Specific Dates: ............................................................................. 94
Locale Specific Currency ......................................................................... 95
Locale Specific Percentage ..................................................................... 95
TUTORIALS POINT
Simply Easy Learning
1
CHAPTER
Overview
What are Servlets?
J ava Servlets are programs that run on a Web or Application server and act as a middle layer between a
request coming from a Web browser or other HTTP client and databases or applications on the HTTP server.
Using Servlets, you can collect input from users through web page forms, present records from a database or
another source, and create web pages dynamically.
Java Servlets often serve the same purpose as programs implemented using the Common Gateway Interface
(CGI). But Servlets offer several advantages in comparison with the CGI.
Servlets execute within the address space of a Web server. It is not necessary to create a separate process to
handle each client request.
Java security manager on the server enforces a set of restrictions to protect the resources on a server
machine. So servlets are trusted.
The full functionality of the Java class libraries is available to a servlet. It can communicate with applets,
databases, or other software via the sockets and RMI mechanisms that you have seen already.
Servlets Architecture:
Following diagram shows the position of Servelts in a Web Application.
TUTORIALS POINT
Simply Easy Learning
Servlets Tasks:
Servlets perform the following major tasks:
Read the explicit data sent by the clients (browsers). This includes an HTML form on a Web page or it could also
come from an applet or a custom HTTP client program.
Read the implicit HTTP request data sent by the clients (browsers). This includes cookies, media types and
compression schemes the browser understands, and so forth.
Process the data and generate the results. This process may require talking to a database, executing an RMI or
CORBA call, invoking a Web service, or computing the response directly.
Send the explicit data (i.e., the document) to the clients (browsers). This document can be sent in a variety of
formats, including text (HTML or XML), binary (GIF images), Excel, etc.
Send the implicit HTTP response to the clients (browsers). This includes telling the browsers or other clients what
type of document is being returned (e.g., HTML), setting cookies and caching parameters, and other such tasks.
Servlets Packages:
Java Servlets are Java classes run by a web server that has an interpreter that supports the Java Servlet
specification.
Servlets can be created using the javax.servlet and javax.servlet.http packages, which are a standard part of the
Java's enterprise edition, an expanded version of the Java class library that supports large-scale development
projects.
These classes implement the Java Servlet and JSP specifications. At the time of writing this tutorial, the versions
are Java Servlet 2.5 and JSP 2.1.
Java servlets have been created and compiled just like any other Java class. After you install the servlet packages
and add them to your computer's Classpath, you can compile servlets with the JDK's Java compiler or any other
current compiler.
What is Next?
I would take you step by step to set up your environment to start with Servlets. So fasten your belt for a nice drive
with Servlets. I'm sure you are going to enjoy this tutorial very much.
TUTORIALS POINT
Simply Easy Learning
2
CHAPTER
Environment
A development environment is where you would develop your Servlet, test them and finally run them.
Like any other Java program, you need to compile a servlet by using the Java compiler javac and after compilation
the servlet application, it would be deployed in a configured environment to test and run.
This development environment setup involves following steps:
You can download SDK from Oracle's Java site: Java SE Downloads.
Once you download your Java implementation, follow the given instructions to install and configure the setup.
Finally set PATH and JAVA_HOME environment variables to refer to the directory that contains java and javac,
typically java_install_dir/bin and java_install_dir respectively.
If you are running Windows and installed the SDK in C:\jdk1.5.0_20, you would put the following line in your
C:\autoexec.bat file.
set PATH=C:\jdk1.5.0_20\bin;%PATH%
set JAVA_HOME=C:\jdk1.5.0_20
Alternatively, on Windows NT/2000/XP, you could also right-click on My Computer, select Properties, then
Advanced, then Environment Variables. Then, you would update the PATH value and press the OK button.
On Unix (Solaris, Linux, etc.), if the SDK is installed in /usr/local/jdk1.5.0_20 and you use the C shell, you would put
the following into your .cshrc file.
Alternatively, if you use an Integrated Development Environment (IDE) like Borland JBuilder, Eclipse, IntelliJ IDEA,
or Sun ONE Studio, compile and run a simple program to confirm that the IDE knows where you installed Java.
TUTORIALS POINT
Simply Easy Learning
Setting up Web Server: Tomcat
A number of Web Servers that support servlets are available in the market. Some web servers are freely
downloadable and Tomcat is one of them.
Apache Tomcat is an open source software implementation of the Java Servlet and JavaServer Pages technologies
and can act as a standalone server for testing servlets and can be integrated with the Apache Web Server. Here are
the steps to setup Tomcat on your machine:
Once you downloaded the installation, unpack the binary distribution into a convenient location. For example in
C:\apache-tomcat-5.5.29 on windows, or /usr/local/apache-tomcat-5.5.29 on Linux/Unix and create
CATALINA_HOME environment variable pointing to these locations.
%CATALINA_HOME%\bin\startup.bat
or
C:\apache-tomcat-5.5.29\bin\startup.bat
Tomcat can be started by executing the following commands on Unix (Solaris, Linux, etc.) machine:
$CATALINA_HOME/bin/startup.sh
or
/usr/local/apache-tomcat-5.5.29/bin/startup.sh
After startup, the default web applications included with Tomcat will be available by visitinghttp://localhost:8080/. If
everything is fine then it should display following result:
TUTORIALS POINT
Simply Easy Learning
Further information about configuring and running Tomcat can be found in the documentation included here, as well
as on the Tomcat web site: http://tomcat.apache.org
C:\apache-tomcat-5.5.29\bin\shutdown
Tomcat can be stopped by executing the following commands on Unix (Solaris, Linux, etc.) machine:
/usr/local/apache-tomcat-5.5.29/bin/shutdown.sh
Setting up CLASSPATH
Since servlets are not part of the Java Platform, Standard Edition, you must identify the servlet classes to the
compiler.
If you are running Windows, you need to put the following lines in your C:\autoexec.bat file.
set CATALINA=C:\apache-tomcat-5.5.29
set CLASSPATH=%CATALINA%\common\lib\servlet-api.jar;%CLASSPATH%
Alternatively, on Windows NT/2000/XP, you could also right-click on My Computer, select Properties, then
Advanced, then Environment Variables. Then, you would update the CLASSPATH value and press the OK button.
On Unix (Solaris, Linux, etc.), if you are using the C shell, you would put the following lines into your .cshrc file.
setenv CATALINA=/usr/local/apache-tomcat-5.5.29
setenv CLASSPATH $CATALINA/common/lib/servlet-api.jar:$CLASSPATH
NOTE: Assuming that your development directory is C:\ServletDevel (Windows) or /usr/ServletDevel (Unix) then
you would need to add these directories as well in CLASSPATH in similar way as you have added above.
TUTORIALS POINT
Simply Easy Learning
3
CHAPTER
Life Cycle
A servlet life cycle can be defined as the entire process from its creation till the destruction. The following
The servlet is normally created when a user first invokes a URL corresponding to the servlet, but you can also
specify that the servlet be loaded when the server is first started.
When a user invokes a servlet, a single instance of each servlet gets created, with each user request resulting in a
new thread that is handed off to doGet or doPost as appropriate. The init() method simply creates or loads some
data that will be used throughout the life of the servlet.
publicvoid init()throwsServletException{
// Initialization code...
}
TUTORIALS POINT
Simply Easy Learning
Each time the server receives a request for a servlet, the server spawns a new thread and calls service. The
service() method checks the HTTP request type (GET, POST, PUT, DELETE, etc.) and calls doGet, doPost, doPut,
doDelete, etc. methods as appropriate.
The service () method is called by the container and service method invokes doGe, doPost, doPut, doDelete, etc.
methods as appropriate. So you have nothing to do with service() method but you override either doGet() or
doPost() depending on what type of request you receive from the client.
The doGet() and doPost() are most frequently used methods with in each service request. Here is the signature of
these two methods.
After the destroy() method is called, the servlet object is marked for garbage collection. The destroy method
definition looks like this:
publicvoid destroy(){
// Finalization code...
}
TUTORIALS POINT
Simply Easy Learning
Architecture Digram:
The following figure depicts a typical servlet life-cycle scenario.
First the HTTP requests coming to the server are delegated to the servlet container.
The servlet container loads the servlet before invoking the service() method.
Then the servlet container handles multiple requests by spawning multiple threads, each thread executing the
service() method of a single instance of the servlet.
TUTORIALS POINT
Simply Easy Learning
4
CHAPTER
Examples
S ervlets are Java classes which service HTTP requests and implement the javax.servlet.Servletinterface.
Web application developers typically write servlets that extend javax.servlet.http.HttpServlet, an abstract class that
implements the Servlet interface and is specially designed to handle HTTP requests.
privateString message;
publicvoid init()throwsServletException
{
// Do required initialization
message ="Hello World";
}
publicvoid destroy()
{
// do nothing.
}
TUTORIALS POINT
Simply Easy Learning
}
Compiling a Servlet:
Let us put above code if HelloWorld.java file and put this file in C:\ServletDevel (Windows) or /usr/ServletDevel
(Unix) then you would need to add these directories as well in CLASSPATH.
Assuming your environment is setup properly, go in ServletDevel directory and compile HelloWorld.java as follows:
$ javac HelloWorld.java
If the servlet depends on any other libraries, you have to include those JAR files on your CLASSPATH as well. I
have included only servlet-api.jar JAR file because I'm not using any other library in Hello World program.
This command line uses the built-in javac compiler that comes with the Sun Microsystems Java Software
Development Kit (JDK). For this command to work properly, you have to include the location of the Java SDK that
you are using in the PATH environment variable.
If everything goes fine, above compilation would produce HelloWorld.class file in the same directory. Next section
would explain how a compiled servlet would be deployed in production.
Servlet Deployment:
By default, a servlet application is located at the path <Tomcat-installation-directory>/webapps/ROOT and the class
file would reside in <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes.
If you have a fully qualified class name of com.myorg.MyServlet, then this servlet class must be located in WEB-
INF/classes/com/myorg/MyServlet.class.
For now, let us copy HelloWorld.class into <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes and
create following entries in web.xml file located in <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
Above entries to be created inside <web-app>...</web-app> tags available in web.xml file. There could be various
entries in this table already available, but never mind.
You are almost done, now let us start tomcat server using <Tomcat-installation-directory>\bin\startup.bat (on
windows) or <Tomcat-installation-directory>/bin/startup.sh (on Linux/Solaris etc.) and finally
type http://localhost:8080/HelloWorld in browser's address box. If everything goes fine, you would get following
result:
TUTORIALS POINT
Simply Easy Learning
TUTORIALS POINT
Simply Easy Learning
5
CHAPTER
Form Data
Y ou must have come across many situations when you need to pass some information from your browser
to web server and ultimately to your backend program. The browser uses two methods to pass this information to
web server. These methods are GET Method and POST Method.
GET method:
The GET method sends the encoded user information appended to the page request. The page and the encoded
information are separated by the ? character as follows:
http://www.test.com/hello?key1=value1&key2=value2
The GET method is the defualt method to pass information from browser to web server and it produces a long string
that appears in your browser's Location:box. Never use the GET method if you have password or other sensitive
information to pass to the server. The GET method has size limtation: only 1024 characters can be in a request
string.
This information is passed using QUERY_STRING header and will be accessible through QUERY_STRING
environment variable and Servlet handles this type of requests using doGet()method.
POST method:
A generally more reliable method of passing information to a backend program is the POST method. This packages
the information in exactly the same way as GET methods, but instead of sending it as a text string after a ? in the
URL it sends it as a separate message. This message comes to the backend program in the form of the standard
input which you can parse and use for your processing. Servlet handles this type of requests
using doPost() method.
getParameter(): You call request.getParameter() method to get the value of a form parameter.
getParameterValues(): Call this method if the parameter appears more than once and returns multiple
values, for example checkbox.
getParameterNames(): Call this method if you want a complete list of all parameters in the current request.
TUTORIALS POINT
Simply Easy Learning
GET Method Example Using URL:
Here is a simple URL which will pass two values to HelloForm program using GET method.
http://localhost:8080/HelloForm?first_name=ZARA&last_name=ALI
Below is HelloForm.java servlet program to handle input given by web browser. We are going to
usegetParameter() method which makes it very easy to access passed information:
PrintWriterout= response.getWriter();
String title ="Using GET Method to Read Form Data";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 "+
"transitional//en\">\n";
out.println(docType +
"<html>\n"+
"<head><title>"+ title +"</title></head>\n"+
"<body bgcolor=\"#f0f0f0\">\n"+
"<h1 align=\"center\">"+ title +"</h1>\n"+
"<ul>\n"+
" <li><b>First Name</b>: "
+ request.getParameter("first_name")+"\n"+
" <li><b>Last Name</b>: "
+ request.getParameter("last_name")+"\n"+
"</ul>\n"+
"</body></html>");
}
}
$ javac HelloForm.java
If everything goes fine, above compilation would produce HelloForm.class file. Next you would have to copy this
class file in <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes and create following entries
in web.xml file located in <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/
<servlet>
<servlet-name>HelloForm</servlet-name>
<servlet-class>HelloForm</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloForm</servlet-name>
<url-pattern>/HelloForm</url-pattern>
TUTORIALS POINT
Simply Easy Learning
</servlet-mapping>
<html>
<body>
<formaction="HelloForm"method="GET">
First Name: <inputtype="text"name="first_name">
<br/>
Last Name: <inputtype="text"name="last_name"/>
<inputtype="submit"value="Submit"/>
</form>
</body>
</html>
Keep this HTML in a file Hello.htm and put it in <Tomcat-installation-directory>/webapps/ROOT directory. When you
would access http://localhost:8080/Hello.htm, here is the actual output of the above form.
Try to enter First Name and Last Name and then click submit button to see the result on your local machine where
tomcat is running. Based on the input provided, it will generate similar result as mentioned in the above example.
TUTORIALS POINT
Simply Easy Learning
throwsServletException,IOException
{
// Set response content type
response.setContentType("text/html");
PrintWriterout= response.getWriter();
String title ="Using GET Method to Read Form Data";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 "+
"transitional//en\">\n";
out.println(docType +
"<html>\n"+
"<head><title>"+ title +"</title></head>\n"+
"<body bgcolor=\"#f0f0f0\">\n"+
"<h1 align=\"center\">"+ title +"</h1>\n"+
"<ul>\n"+
" <li><b>First Name</b>: "
+ request.getParameter("first_name")+"\n"+
" <li><b>Last Name</b>: "
+ request.getParameter("last_name")+"\n"+
"</ul>\n"+
"</body></html>");
}
// Method to handle POST method request.
publicvoid doPost(HttpServletRequest request,
HttpServletResponse response)
throwsServletException,IOException{
doGet(request, response);
}
}
Now compile, deploy the above Servlet and test it using Hello.htm with the POST method as follows:
<html>
<body>
<formaction="HelloForm"method="POST">
First Name: <inputtype="text"name="first_name">
<br/>
Last Name: <inputtype="text"name="last_name"/>
<inputtype="submit"value="Submit"/>
</form>
</body>
</html>
Here is the actual output of the above form, Try to enter First and Last Name and then click submit button to see the
result on your local machine where tomcat is running.
Based on the input provided, it would generate similar result as mentioned in the above examples.
TUTORIALS POINT
Simply Easy Learning
Passing Checkbox Data to Servlet Program
Checkboxes are used when more than one option is required to be selected.
Here is example HTML code, CheckBox.htm, for a form with two checkboxes
<html>
<body>
<formaction="CheckBox"method="POST"target="_blank">
<inputtype="checkbox"name="maths"checked="checked"/> Maths
<inputtype="checkbox"name="physics"/> Physics
<inputtype="checkbox"name="chemistry"checked="checked"/>
Chemistry
<inputtype="submit"value="Select Subject"/>
</form>
</body>
</html>
Below is CheckBox.java servlet program to handle input given by web browser for checkbox button.
PrintWriterout= response.getWriter();
String title ="Reading Checkbox Data";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 "+
"transitional//en\">\n";
out.println(docType +
"<html>\n"+
"<head><title>"+ title +"</title></head>\n"+
"<body bgcolor=\"#f0f0f0\">\n"+
"<h1 align=\"center\">"+ title +"</h1>\n"+
"<ul>\n"+
" <li><b>Maths Flag : </b>: "
+ request.getParameter("maths")+"\n"+
" <li><b>Physics Flag: </b>: "
+ request.getParameter("physics")+"\n"+
" <li><b>Chemistry Flag: </b>: "
+ request.getParameter("chemistry")+"\n"+
TUTORIALS POINT
Simply Easy Learning
"</ul>\n"+
"</body></html>");
}
// Method to handle POST method request.
publicvoid doPost(HttpServletRequest request,
HttpServletResponse response)
throwsServletException,IOException{
doGet(request, response);
}
}
PrintWriterout= response.getWriter();
String title ="Reading All Form Parameters";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 "+
"transitional//en\">\n";
out.println(docType +
"<html>\n"+
"<head><title>"+ title +"</title></head>\n"+
"<body bgcolor=\"#f0f0f0\">\n"+
"<h1 align=\"center\">"+ title +"</h1>\n"+
"<table width=\"100%\" border=\"1\" align=\"center\">\n"+
"<tr bgcolor=\"#949494\">\n"+
TUTORIALS POINT
Simply Easy Learning
"<th>Param Name</th><th>Param Value(s)</th>\n"+
"</tr>\n");
while(paramNames.hasMoreElements()){
String paramName =(String)paramNames.nextElement();
out.print("<tr><td>"+ paramName +"</td>\n<td>");
String[] paramValues =
request.getParameterValues(paramName);
// Read single valued data
if(paramValues.length ==1){
String paramValue = paramValues[0];
if(paramValue.length()==0)
out.println("<i>No Value</i>");
else
out.println(paramValue);
}else{
// Read multiple valued data
out.println("<ul>");
for(int i=0; i < paramValues.length; i++){
out.println("<li>"+ paramValues[i]);
}
out.println("</ul>");
}
}
out.println("</tr>\n</table>\n</body></html>");
}
// Method to handle POST method request.
publicvoid doPost(HttpServletRequest request,
HttpServletResponse response)
throwsServletException,IOException{
doGet(request, response);
}
}
<html>
<body>
<formaction="ReadParams"method="POST"target="_blank">
<inputtype="checkbox"name="maths"checked="checked"/> Maths
<inputtype="checkbox"name="physics"/> Physics
<inputtype="checkbox"name="chemistry"checked="checked"/> Chem
<inputtype="submit"value="Select Subject"/>
</form>
</body>
</html>
Now calling servlet using above form would generate following result:
maths on
chemistry on
TUTORIALS POINT
Simply Easy Learning
You can try above servlet to read any other form's data which is having other objects like text box, radio button or
drop down box etc.
TUTORIALS POINT
Simply Easy Learning
6
CHAPTER
Client Request
W hen a browser requests for a web page, it sends lot of information to the web server which can not be
read directly because this information travel as a part of header of HTTP request. You can check HTTP Protocol for
more information on this.
Following is the important header information which comes from browser side and you would use very frequently in
web programming:
Header Description
This header specifies the MIME types that the browser or other clients can
Accept handle. Values of image/png or image/jpeg are the two most common
possibilities.
This header specifies the character sets the browser can use to display the
Accept-Charset
information. For example ISO-8859-1.
This header specifies the types of encodings that the browser knows how to
Accept-Encoding
handle. Values of gzip or compress are the two most common possibilities.
This header specifies the client's preferred languages in case the servlet can
Accept-Language
produce results in more than one language. For example en, en-us, ru, etc.
This header indicates whether the client can handle persistent HTTP
connections. Persistent connections permit the client or other browser to
Connection
retrieve multiple files with a single request. A value ofKeep-Alive means that
persistent connections should be used
This header is applicable only to POST requests and gives the size of the
Content-Length
POST data in bytes.
This header returns cookies to servers that previously sent them to the
Cookie
browser.
Host This header specifies the host and port as given in the original URL.
This header indicates that the client wants the page only if it has been changed
If-Modified-Since after the specified date. The server sends a code, 304 which means Not
Modified header if no newer result is available.
TUTORIALS POINT
Simply Easy Learning
This header is the reverse of If-Modified-Since; it specifies that the operation
If-Unmodified-Since
should succeed only if the document is older than the specified date.
This header indicates the URL of the referring Web page. For example, if you
Referer are at Web page 1 and click on a link to Web page 2, the URL of Web page 1
is included in the Referer header when the browser requests Web page 2.
This header identifies the browser or other client making the request and can
User-Agent
be used to return different content to different types of browsers.
Cookie[] getCookies()
1
Returns an array containing all of the Cookie objects the client sent with this request.
Enumeration getAttributeNames()
2
Returns an Enumeration containing the names of the attributes available to this request.
Enumeration getHeaderNames()
3
Returns an enumeration of all the header names this request contains.
Enumeration getParameterNames()
4 Returns an Enumeration of String objects containing the names of the parameters contained in this
request.
HttpSession getSession()
5 Returns the current session associated with this request, or if the request does not have a session,
creates one.
Locale getLocale()
7 Returns the preferred Locale that the client will accept content in, based on the Accept-Language
header
ServletInputStream getInputStream()
9
Retrieves the body of the request as binary data using a ServletInputStream.
String getAuthType()
10 Returns the name of the authentication scheme used to protect the servlet, for example, "BASIC" or
"SSL," or null if the JSP was not protected
String getCharacterEncoding()
11
Returns the name of the character encoding used in the body of this request.
String getContentType()
12
Returns the MIME type of the body of the request, or null if the type is not known.
13 String getContextPath()
TUTORIALS POINT
Simply Easy Learning
Returns the portion of the request URI that indicates the context of the request.
String getMethod()
15 Returns the name of the HTTP method with which this request was made, for example, GET, POST, or
PUT.
String getPathInfo()
17
Returns any extra path information associated with the URL the client sent when it made this request.
String getProtocol()
18
Returns the name and version of the protocol the request.
String getQueryString()
19
Returns the query string that is contained in the request URL after the path.
String getRemoteAddr()
20
Returns the Internet Protocol (IP) address of the client that sent the request.
String getRemoteHost()
21
Returns the fully qualified name of the client that sent the request.
String getRemoteUser()
22 Returns the login of the user making this request, if the user has been authenticated, or null if the user
has not been authenticated.
String getRequestURI()
23 Returns the part of this request's URL from the protocol name up to the query string in the first line of the
HTTP request.
String getRequestedSessionId()
24
Returns the session ID specified by the client.
String getServletPath()
25
Returns the part of this request's URL that calls the JSP.
boolean isSecure()
27
Returns a boolean indicating whether this request was made using a secure channel, such as HTTPS.
int getContentLength()
28 Returns the length, in bytes, of the request body and made available by the input stream, or -1 if the
length is not known.
int getServerPort()
30
Returns the port number on which this request was received.
TUTORIALS POINT
Simply Easy Learning
HTTP Header Request Example:
Following is the example which uses getHeaderNames() method of HttpServletRequest to read the HTTP header
infromation. This method returns an Enumeration that contains the header information associated with the current
HTTP request.
Once we have an Enumeration, we can loop down the Enumeration in the standard manner,
usinghasMoreElements() method to determine when to stop and using nextElement() method to get each parameter
name.
PrintWriterout= response.getWriter();
String title ="HTTP Header Request Example";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 "+
"transitional//en\">\n";
out.println(docType +
"<html>\n"+
"<head><title>"+ title +"</title></head>\n"+
"<body bgcolor=\"#f0f0f0\">\n"+
"<h1 align=\"center\">"+ title +"</h1>\n"+
"<table width=\"100%\" border=\"1\" align=\"center\">\n"+
"<tr bgcolor=\"#949494\">\n"+
"<th>Header Name</th><th>Header Value(s)</th>\n"+
"</tr>\n");
while(headerNames.hasMoreElements()){
String paramName =(String)headerNames.nextElement();
out.print("<tr><td>"+ paramName +"</td>\n");
String paramValue = request.getHeader(paramName);
out.println("<td> "+ paramValue +"</td></tr>\n");
}
out.println("</table>\n</body></html>");
}
// Method to handle POST method request.
publicvoid doPost(HttpServletRequest request,
HttpServletResponse response)
throwsServletException,IOException{
doGet(request, response);
}
}
TUTORIALS POINT
Simply Easy Learning
HTTP Header Request Example
Header Name Header Value(s)
accept */*
accept-language en-us
host localhost:8080
connection Keep-Alive
cache-control no-cache
TUTORIALS POINT
Simply Easy Learning
7
CHAPTER
Server Response
A s discussed in previous chapter, when a Web server responds to a HTTP request to the browser, the
response typically consists of a status line, some response headers, a blank line, and the document. A typical
response looks like this:
HTTP/1.1200 OK
Content-Type: text/html
Header2:...
...
HeaderN:...
(BlankLine)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
The status line consists of the HTTP version (HTTP/1.1 in the example), a status code (200 in the example), and a
very short message corresponding to the status code (OK in the example).
Following is a summary of the most useful HTTP 1.1 response headers which go back to the browser from web
server side and you would use them very frequently in web programming:
Header Description
This header specifies the request methods (GET, POST, etc.) that the server
Allow
supports.
This header specifies the circumstances in which the response document can
safely be cached. It can have values public, private orno-cache etc. Public means
Cache-Control document is cacheable, Private means document is for a single user and can only
be stored in private (nonshared) caches and no-cache means document should
never be cached.
This header instructs the browser whether to use persistent in HTTP connections or
Connection not. A value of close instructs the browser not to use persistent HTTP connections
and keep-alive means using persistent connections.
TUTORIALS POINT
Simply Easy Learning
This header lets you request that the browser ask the user to save the response to
Content-Disposition
disk in a file of the given name.
Content-Encoding This header specifies the way in which the page was encoded during transmission.
This header signifies the language in which the document is written. For example
Content-Language
en, en-us, ru, etc.
This header indicates the number of bytes in the response. This information is
Content-Length
needed only if the browser is using a persistent (keep-alive) HTTP connection.
This header gives the MIME (Multipurpose Internet Mail Extension) type of the
Content-Type
response document.
This header specifies the time at which the content should be considered out-of-
Expires
date and thus no longer be cached.
This header indicates when the document was last changed. The client can then
Last-Modified cache the document and supply a date by an If-Modified-Since request header in
later requests.
This header should be included with all responses that have a status code in the
Location 300s. This notifies the browser of the document address. The browser
automatically reconnects to this location and retrieves the new document.
This header specifies how soon the browser should ask for an updated page. You
Refresh
can specify time in number of seconds after which a page would be refreshed.
This header can be used in conjunction with a 503 (Service Unavailable) response
Retry-After
to tell the client how soon it can repeat its request.
boolean isCommitted()
4
Returns a boolean indicating if the response has been committed.
TUTORIALS POINT
Simply Easy Learning
void addIntHeader(String name, int value)
8
Adds a response header with the given name and integer value.
void flushBuffer()
9
Forces any content in the buffer to be written to the client.
void reset()
10
Clears any data that exists in the buffer as well as the status code and headers.
void resetBuffer()
11
Clears the content of the underlying buffer in the response without clearing headers or status code.
TUTORIALS POINT
Simply Easy Learning
// Extend HttpServlet class
publicclassRefreshextendsHttpServlet{
PrintWriterout= response.getWriter();
String title ="Auto Refresh Header Setting";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 "+
"transitional//en\">\n";
out.println(docType +
"<html>\n"+
"<head><title>"+ title +"</title></head>\n"+
"<body bgcolor=\"#f0f0f0\">\n"+
"<h1 align=\"center\">"+ title +"</h1>\n"+
"<p>Current Time is: "+ CT +"</p>\n");
}
// Method to handle POST method request.
publicvoid doPost(HttpServletRequest request,
HttpServletResponse response)
throwsServletException,IOException{
doGet(request, response);
}
}
Now calling the above servlet would display current system time after every 5 seconds as follows. Just run the
servlet and wait to see the result:
TUTORIALS POINT
Simply Easy Learning
8
CHAPTER
Http Codes
T he format of the HTTP request and HTTP response messages are similar and will have following
structure:
An initial status line + CRLF ( Carriage Return + Line Feed ie. New Line )
HTTP/1.1200 OK
Content-Type: text/html
Header2:...
...
HeaderN:...
(BlankLine)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
The status line consists of the HTTP version (HTTP/1.1 in the example), a status code (200 in the example), and a
very short message corresponding to the status code (OK in the example).
Following is a list of HTTP status codes and associated messages that might be returned from the Web Server:
100 Only a part of the request has been received by the server, but as long as it
Continue
has not been rejected, the client should continue with the request
TUTORIALS POINT
Simply Easy Learning
201 Created The request is complete, and a new resource is created
202 The request is accepted for processing, but the processing is not complete.
Accepted
203 Non-authoritative
Information
204 No Content
300 A link list. The user can select a link and go to that location. Maximum five
Multiple Choices
addresses
301 Moved Permanently The requested page has moved to a new url
302 Found The requested page has moved temporarily to a new url
303 See Other The requested page can be found under a different url
306 This code was used in a previous version. It is no longer used, but the code
Unused
is reserved.
307 Temporary Redirect The requested page has moved temporarily to a new url.
400 Bad Request The server did not understand the request
402 Payment Required You can not use this code yet
404 Not Found The server can not find the requested page.
405 Method Not Allowed The method specified in the request is not allowed.
406 The server can only generate a response that is not accepted by the client.
Not Acceptable
407 Proxy Authentication You must authenticate with a proxy server before this request can be
Required served.
408 Request Timeout The request took longer than the server was prepared to wait.
411 The "Content-Length" is not defined. The server will not accept the request
Length Required
without it.
412 Precondition Failed The precondition given in the request evaluated to false by the server.
413 The server will not accept the request, because the request entity is too
Request Entity Too Large
large.
TUTORIALS POINT
Simply Easy Learning
414 The server will not accept the request, because the url is too long. Occurs
Request-url Too Long when you convert a "post" request to a "get" request with a long query
information.
415 The server will not accept the request, because the media type is not
Unsupported Media Type
supported.
500 Internal Server Error The request was not completed. The server met an unexpected condition
501 The request was not completed. The server did not support the functionality
Not Implemented
required.
502 The request was not completed. The server received an invalid response
Bad Gateway
from the upstream server
503 The request was not completed. The server is temporarily overloading or
Service Unavailable
down.
505 HTTP Version Not The server does not support the "http protocol" version.
Supported
TUTORIALS POINT
Simply Easy Learning
publicvoid doGet(HttpServletRequest request,
HttpServletResponse response)
throwsServletException,IOException
{
// Set error code and reason.
response.sendError(407,"Need authentication!!!");
}
// Method to handle POST method request.
publicvoid doPost(HttpServletRequest request,
HttpServletResponse response)
throwsServletException,IOException{
doGet(request, response);
}
}
APACHE TOMCAT/5.5.29
TUTORIALS POINT
Simply Easy Learning
9
CHAPTER
Writing Filters
S ervlet Filters are Java classes that can be used in Servlet Programming for the following purposes:
To intercept requests from a client before they access a resource at back end.
To manipulate responses from server before they are sent back to the client.
Authentication Filters.
Encryption Filters.
Tokenizing Filters
Filters are deployed in the deployment descriptor file web.xml and then map to either servlet names or URL
patterns in your application's deployment descriptor.
When the web container starts up your web application, it creates an instance of each filter that you have declared
in the deployment descriptor. The filters execute in the order that they are declared in the deployment descriptor.
TUTORIALS POINT
Simply Easy Learning
S.N. Method & Description
Compile LogFilter.java in usual way and put your class file in <Tomcat-installation-
directory>/webapps/ROOT/WEB-INF/classes.
TUTORIALS POINT
Simply Easy Learning
Servlet Filter Mapping in Web.xml:
Filters are defined and then mapped to a URL or Servlet, in much the same way as Servlet is defined and then
mapped to a URL pattern. Create the following entry for filter tag in the deployment descriptor file web.xml
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>LogFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Paramter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
The above filter would apply to all the servlets because we specified /* in our configuration. You can specicy a
particular servlet path if you want to apply filter on few servlets only.
Now try to call any servlet in usual way and you would see generated log in your web server log. You can use
Log4J logger to log above log in a separate file.
<filter>
<filter-name>LogFilter</filter-name>
<filter-class>LogFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Paramter</param-value>
</init-param>
</filter>
<filter>
<filter-name>AuthenFilter</filter-name>
<filter-class>AuthenFilter</filter-class>
<init-param>
<param-name>test-param</param-name>
<param-value>Initialization Paramter</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>AuthenFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
TUTORIALS POINT
Simply Easy Learning
Filters Application Order:
The order of filter-mapping elements in web.xml determines the order in which the web container applies the filter to
the servlet. To reverse the order of the filter, you just need to reverse the filter-mapping elements in the web.xml file.
For example, above example would apply LogFilter first and then it would apply AuthenFilter to any servlet but the
following example would reverse the order:
<filter-mapping>
<filter-name>AuthenFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>LogFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
TUTORIALS POINT
Simply Easy Learning
CHAPTER
10
Exception Handling
W hen a servlet throws an exception, the web container searches the configurations in web.xml that use
the exception-type element for a match with the thrown exception type.
You would have to use the error-page element in web.xml to specify the invocation of servlets in response to
certain exceptions or HTTP status codes.
web.xml Configuration:
Consider you have an ErrorHandler servelt which would be called whenever there is any defined exception or error.
Following would be the entry created in web.xml.
<error-page>
<exception-type>java.io.IOException</exception-type>
<location>/ErrorHandler</location>
TUTORIALS POINT
Simply Easy Learning
</error-page>
If you want to have a generic Error Handler for all the exceptions then you should define following error-page
instead of defining separate error-page elements for every exception:
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/ErrorHandler</location>
</error-page>
Following are the points to be noted about above web.xml for Exception Handling:
The servelt ErrorHandler is defined in usual way as any other servlet and configured in web.xml.
If there is any error with status code either 404 ( Not Found) or 403 ( Forbidden ), then ErrorHandler servlet
would be called.
If the web application throws either ServletException or IOException, then the web container invokes the
/ErrorHandler servlet.
You can define different Error Handlers to handle different type of errors or exceptions. Above example is very
much generic and hope it serve the purpose to explain you the basic concept.
javax.servlet.error.status_code
1 This attribute give status code which can be stored and analysed after storing in a java.lang.Integer data
type.
javax.servlet.error.exception_type
2 This attribute gives information about exception type which can be stored and analysed after storing in a
java.lang.Class data type.
javax.servlet.error.message
3 This attribute gives information exact error message which can be stored and analysed after storing in a
java.lang.String data type.
javax.servlet.error.request_uri
4 This attribute gives information about URL calling the servlet and it can be stored and analysed after storing
in a java.lang.String data type.
javax.servlet.error.exception
5 This attribute gives information the exception raised which can be stored and analysed after storing in a
java.lang.Throwable data type.
javax.servlet.error.servlet_name
6 This attribute gives servlet name which can be stored and analysed after storing in a java.lang.String data
type.
TUTORIALS POINT
Simply Easy Learning
Error Handler Servlet Example:
Following is the Servlet Example that would be used as Error Handler in case of any error or exception occurs with
your any of the servlet defined.
This example would give you basic understanding of Exception Handling in Servlet, but you can write more
sophisticated filter applications using the same concept:
PrintWriterout= response.getWriter();
String title ="Error/Exception Information";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 "+
"transitional//en\">\n";
out.println(docType +
"<html>\n"+
"<head><title>"+ title +"</title></head>\n"+
"<body bgcolor=\"#f0f0f0\">\n");
TUTORIALS POINT
Simply Easy Learning
out.println("Servlet Name : "+ servletName +
"</br></br>");
out.println("Exception Type : "+
throwable.getClass().getName()+
"</br></br>");
out.println("The request URI: "+ requestUri +
"<br><br>");
out.println("The exception message: "+
throwable.getMessage());
}
out.println("</body>");
out.println("</html>");
}
// Method to handle POST method request.
publicvoid doPost(HttpServletRequest request,
HttpServletResponse response)
throwsServletException,IOException{
doGet(request, response);
}
}
Compile ErrorHandler.java in usual way and put your class file in <Tomcat-installation-
directory>/webapps/ROOT/WEB-INF/classes.
Let us add the following configuration in web.xml to handle exceptions:
<servlet>
<servlet-name>ErrorHandler</servlet-name>
<servlet-class>ErrorHandler</servlet-class>
</servlet>
<!-- servlet mappings -->
<servlet-mapping>
<servlet-name>ErrorHandler</servlet-name>
<url-pattern>/ErrorHandler</url-pattern>
</servlet-mapping>
<error-page>
<error-code>404</error-code>
<location>/ErrorHandler</location>
</error-page>
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/ErrorHandler</location>
</error-page>
Now try to use a servlet which raise any exception or type a wrong URL, this would trigger Web Container to
call ErrorHandler servlet and display an appropriate message as programmed. For example, if you type a wrong
URL then it would display the following result:
Above code may not work with some web browsers. So try with Mozilla and Safari and it should work.
TUTORIALS POINT
Simply Easy Learning
CHAPTER
11
Cookies Handling
C ookies are text files stored on the client computer and they are kept for various information tracking
Server script sends a set of cookies to the browser. For example name, age, or identification number etc.
When next time browser sends any request to web server then it sends those cookies information to the
server and server uses that information to identify the user.
This chapter will teach you how to set or reset cookies, how to access them and how to delete them.
HTTP/1.1200 OK
Date:Fri,04Feb200021:03:38 GMT
Server:Apache/1.3.9(UNIX) PHP/4.0b3
Set-Cookie: name=xyz; expires=Friday,04-Feb-0722:03:38 GMT;
path=/; domain=tutorialspoint.com
Connection: close
Content-Type: text/html
As you can see, the Set-Cookie header contains a name value pair, a GMT date, a path and a domain. The name
and value will be URL encoded. The expires field is an instruction to the browser to "forget" the cookie after the
given time and date.
If the browser is configured to store cookies, it will then keep this information until the expiry date. If the user points
the browser at any page that matches the path and domain of the cookie, it will resend the cookie to the server. The
browser's headers might look something like this:
GET / HTTP/1.0
Connection:Keep-Alive
TUTORIALS POINT
Simply Easy Learning
User-Agent:Mozilla/4.6(X11; I;Linux2.2.6-15apmac ppc)
Host: zink.demon.co.uk:1126
Accept: image/gif,*/*
Accept-Encoding: gzip
Accept-Language: en
Accept-Charset: iso-8859-1,*,utf-8
Cookie: name=xyz
A servlet will then have access to the cookie through the request method request.getCookies() which returns an
array of Cookie objects.
TUTORIALS POINT
Simply Easy Learning
Setting Cookies with Servlet:
Setting cookies with servlet involves three steps:
(1) Creating a Cookie object: You call the Cookie constructor with a cookie name and a cookie value, both of
which are strings.
Keep in mind, neither the name nor the value should contain white space or any of the following characters:
[]()=," / ? @ : ;
(2) Setting the maximum age: You use setMaxAge to specify how long (in seconds) the cookie should be valid.
Following would set up a cookie for 24 hours.
cookie.setMaxAge(60*60*24);
(3) Sending the Cookie into the HTTP response headers: You use response.addCookie to add cookies in the
HTTP response header as follows:
response.addCookie(cookie);
Example:
Let us modify our Form Example to set the cookies for first and last name.
PrintWriterout= response.getWriter();
String title ="Setting Cookies Example";
String docType =
TUTORIALS POINT
Simply Easy Learning
"<!doctype html public \"-//w3c//dtd html 4.0 "+
"transitional//en\">\n";
out.println(docType +
"<html>\n"+
"<head><title>"+ title +"</title></head>\n"+
"<body bgcolor=\"#f0f0f0\">\n"+
"<h1 align=\"center\">"+ title +"</h1>\n"+
"<ul>\n"+
" <li><b>First Name</b>: "
+ request.getParameter("first_name")+"\n"+
" <li><b>Last Name</b>: "
+ request.getParameter("last_name")+"\n"+
"</ul>\n"+
"</body></html>");
}
}
Compile above servlet HelloForm and create appropriate entry in web.xml file and finally try following HTML page
to call servlet.
<html>
<body>
<formaction="HelloForm"method="GET">
First Name: <inputtype="text"name="first_name">
<br/>
Last Name: <inputtype="text"name="last_name"/>
<inputtype="submit"value="Submit"/>
</form>
</body>
</html>
Keep above HTML content in a file Hello.htm and put it in <Tomcat-installation-directory>/webapps/ROOT directory.
When you would access http://localhost:8080/Hello.htm, here is the actual output of the above form.
Try to enter First Name and Last Name and then click submit button. This would display first name and last name on
your screen and same time it would set two cookies firstName and lastName which would be passed back to the
server when next time you would press Submit button.
Next section would explain you how you would access these cookies back in your web application.
Example:
Let us read cookies which we have set in previous example:
TUTORIALS POINT
Simply Easy Learning
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
PrintWriterout= response.getWriter();
String title ="Reading Cookies Example";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 "+
"transitional//en\">\n";
out.println(docType +
"<html>\n"+
"<head><title>"+ title +"</title></head>\n"+
"<body bgcolor=\"#f0f0f0\">\n");
if( cookies !=null){
out.println("<h2> Found Cookies Name and Value</h2>");
for(int i =0; i < cookies.length; i++){
cookie = cookies[i];
out.print("Name : "+ cookie.getName()+", ");
out.print("Value: "+ cookie.getValue()+" <br/>");
}
}else{
out.println(
"<h2>No cookies founds</h2>");
}
out.println("</body>");
out.println("</html>");
}
}
Compile above servlet ReadCookies and create appropriate entry in web.xml file. If you would have set first_name
cookie as "John" and last_name cookie as "Player" then runninghttp://localhost:8080/ReadCookies would display
the following result:
TUTORIALS POINT
Simply Easy Learning
Read an already exsiting cookie and store it in Cookie object.
Set cookie age as zero using setMaxAge() method to delete an existing cookie.
Example:
Following example would delete and existing cookie named "first_name" and when you would run ReadCookies
servlet next time it would return null value for first_name.
PrintWriterout= response.getWriter();
String title ="Delete Cookies Example";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 "+
"transitional//en\">\n";
out.println(docType +
"<html>\n"+
"<head><title>"+ title +"</title></head>\n"+
"<body bgcolor=\"#f0f0f0\">\n");
if( cookies !=null){
out.println("<h2> Cookies Name and Value</h2>");
for(int i =0; i < cookies.length; i++){
cookie = cookies[i];
if((cookie.getName()).compareTo("first_name")==0){
cookie.setMaxAge(0);
response.addCookie(cookie);
out.print("Deleted cookie : "+
cookie.getName()+"<br/>");
}
out.print("Name : "+ cookie.getName()+", ");
out.print("Value: "+ cookie.getValue()+" <br/>");
}
}else{
out.println(
"<h2>No cookies founds</h2>");
}
out.println("</body>");
out.println("</html>");
}
TUTORIALS POINT
Simply Easy Learning
}
Compile above servlet DeleteCookies and create appropriate entry in web.xml file. Now
runninghttp://localhost:8080/DeleteCookies would display the following result:
Now try to run http://localhost:8080/ReadCookies and it would display only one cookie as follows:
You can delete your cookies in Internet Explorer manually. Start at the Tools menu and select Internet Options. To
delete all cookies, press Delete Cookies.
TUTORIALS POINT
Simply Easy Learning
CHAPTER
12
Session Tracking
H TTP is a "stateless" protocol which means each time a client retrieves a Web page, the client opens a
separate connection to the Web server and the server automatically does not keep any record of previous client
request.
Still there are following three ways to maintain session between web client and web server:
Cookies:
A webserver can assign a unique session ID as a cookie to each web client and for subsequent requests from the
client they can be recognized using the recieved cookie.
This may not be an effective way because many time browser does not support a cookie, so I would not recommend
to use this procedure to maintain the sessions.
<inputtype="hidden"name="sessionid"value="12345">
This entry means that, when the form is submitted, the specified name and value are automatically included in the
GET or POST data. Each time when web browser sends request back, then session_id value can be used to keep
the track of different web browsers.
This could be an effective way of keeping track of the session but clicking on a regular (<A HREF...>) hypertext link
does not result in a form submission, so hidden form fields also cannot support general session tracking.
URL Rewriting:
You can append some extra data on the end of each URL that identifies the session, and the server can associate
that session identifier with data it has stored about that session.
TUTORIALS POINT
Simply Easy Learning
URL rewriting is a better way to maintain sessions and works for the browsers when they don't support cookies but
here drawback is that you would have generate every URL dynamically to assign a session ID though page is
simple static HTML page.
The servlet container uses this interface to create a session between an HTTP client and an HTTP server. The
session persists for a specified time period, across more than one connection or page request from the user.
You would get HttpSession object by calling the public method getSession() of HttpServletRequest, as below:
You need to call request.getSession() before you send any document content to the client. Here is a summary of
the important methods available through HttpSession object:
TUTORIALS POINT
Simply Easy Learning
Session Tracking Example:
This example describes how to use the HttpSession object to find out the creation time and the last-accessed time
for a session. We would associate a new session with the request if one does not already exist.
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 "+
"transitional//en\">\n";
out.println(docType +
"<html>\n"+
"<head><title>"+ title +"</title></head>\n"+
"<body bgcolor=\"#f0f0f0\">\n"+
"<h1 align=\"center\">"+ title +"</h1>\n"+
"<h2 align=\"center\">Session Infomation</h2>\n"+
"<table border=\"1\" align=\"center\">\n"+
"<tr bgcolor=\"#949494\">\n"+
" <th>Session info</th><th>value</th></tr>\n"+
"<tr>\n"+
TUTORIALS POINT
Simply Easy Learning
" <td>id</td>\n"+
" <td>"+ session.getId()+"</td></tr>\n"+
"<tr>\n"+
" <td>Creation Time</td>\n"+
" <td>"+ createTime +
" </td></tr>\n"+
"<tr>\n"+
" <td>Time of Last Access</td>\n"+
" <td>"+ lastAccessTime +
" </td></tr>\n"+
"<tr>\n"+
" <td>User ID</td>\n"+
" <td>"+ userID +
" </td></tr>\n"+
"<tr>\n"+
" <td>Number of visits</td>\n"+
" <td>"+ visitCount +"</td></tr>\n"+
"</table>\n"+
"</body></html>");
}
}
Compile above servlet SessionTrack and create appropriate entry in web.xml file. Now
runninghttp://localhost:8080/SessionTrack would display the following result when you would run for the first time:
Welcome to my website
Session Infomation
Session info Value
Id 0AE3EC93FF44E3C525B4351B77ABB2D5
User ID ABCD
Number of visits 0
Now try to run the same servlet for second time, it would display following result.
Id 0AE3EC93FF44E3C525B4351B77ABB2D5
User ID ABCD
Number of visits 1
TUTORIALS POINT
Simply Easy Learning
Deleting Session Data:
When you are done with a user's session data, you have several options:
Remove a particular attribute: You can call public void removeAttribute(String name) method to delete the
value associated with a particular key.
Delete the whole session: You can call public void invalidate() method to discard an entire session.
Setting Session timeout: You can call public void setMaxInactiveInterval(int interval) method to set the
timeout for a session individually.
Log the user out: The servers that support servlets 2.4, you can call logout to log the client out of the Web
server and invalidate all sessions belonging to all the users.
web.xml Configuration: If you are using Tomcat, apart from the above mentioned methods, you can
configure session time out in web.xml file as follows.
<session-config>
<session-timeout>15</session-timeout>
</session-config>
The timeout is expressed as minutes, and overrides the default timeout which is 30 minutes in Tomcat.
The getMaxInactiveInterval( ) method in a servlet returns the timeout period for that session in seconds. So if your
session is configured in web.xml for 15 minutes, getMaxInactiveInterval( ) returns 900.
TUTORIALS POINT
Simply Easy Learning
CHAPTER
13
Database Access
T his tutorial assumes you have understanding on how JDBC application works. Before starting with
database access through a servlet, make sure you have proper JDBC environment setup along with a database.
For more detail on how to access database using JDBC and its environment setup you can go through our JDBC
Tutorial.
To start with basic concept, let us create a simple table and create few records in that table as follows:
Create Table
To create the Employees table in TEST database, use the following steps:
Step 1:
Open a Command Prompt and change to the installation directory as follows:
C:\>
C:\>cd ProgramFiles\MySQL\bin
C:\Program Files\MySQL\bin>
Step 2:
Login to database as follows
Step 3:
Create the table Employee in TEST database as follows:
mysql>use TEST;
mysql> create table Employees
(
id intnotnull,
age intnotnull,
first varchar (255),
TUTORIALS POINT
Simply Easy Learning
last varchar (255)
);
Query OK,0 rows affected (0.08 sec)
mysql>
mysql>
Accessing a Database:
Here is an example which shows how to access TEST database using Servlet.
publicclassDatabaseAccessextendsHttpServlet{
// Database credentials
staticfinalString USER ="root";
staticfinalString PASS ="password";
TUTORIALS POINT
Simply Easy Learning
"<h1 align=\"center\">"+ title +"</h1>\n");
try{
// Register JDBC driver
Class.forName("com.mysql.jdbc.Driver");
// Open a connection
conn =DriverManager.getConnection(DB_URL,USER,PASS);
//Display values
out.println("ID: "+ id +"<br>");
out.println(", Age: "+ age +"<br>");
out.println(", First: "+ first +"<br>");
out.println(", Last: "+last+"<br>");
}
out.println("</body></html>");
// Clean-up environment
rs.close();
stmt.close();
conn.close();
}catch(SQLException se){
//Handle errors for JDBC
se.printStackTrace();
}catch(Exception e){
//Handle errors for Class.forName
e.printStackTrace();
}finally{
//finally block used to close resources
try{
if(stmt!=null)
stmt.close();
}catch(SQLException se2){
}// nothing we can do
try{
if(conn!=null)
conn.close();
}catch(SQLException se){
se.printStackTrace();
}//end finally try
}//end try
}
}
Now let us compile above servlet and create following entries in web.xml
....
<servlet>
TUTORIALS POINT
Simply Easy Learning
<servlet-name>DatabaseAccess</servlet-name>
<servlet-class>DatabaseAccess</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DatabaseAccess</servlet-name>
<url-pattern>/DatabaseAccess</url-pattern>
</servlet-mapping>
....
Now call this servlet using URL http://localhost:8080/DatabaseAccess which would display following response:
DatabaseResult
ID:100,Age:18,First:Zara,Last:Ali
ID:101,Age:25,First:Mahnaz,Last:Fatma
ID:102,Age:30,First:Zaid,Last:Khan
ID:103,Age:28,First:Sumit,Last:Mittal
TUTORIALS POINT
Simply Easy Learning
CHAPTER
14
File Uploading
A Servlet can be used with an HTML form tag to allow users to upload files to the server. An uploaded file
The form method attribute should be set to POST method and GET method can not be used.
To upload a single file you should use a single <input .../> tag with attribute type="file". To allow multiple files
uploading, include more than one input tags with different values for the name attribute. The browser
associates a Browse button with each of them.
<html>
<head>
<title>File Uploading Form</title>
</head>
<body>
<h3>File Upload:</h3>
Select a file to upload: <br/>
<formaction="UploadServlet"method="post"
enctype="multipart/form-data">
<inputtype="file"name="file"size="50"/>
<br/>
<inputtype="submit"value="Upload File"/>
</form>
</body>
</html>
This will display following result which would allow to select a file from local PC and when user would click at
"Upload File", form would be submitted along with the selected file:
TUTORIALS POINT
Simply Easy Learning
Writing Backend Servlet:
Following is the servlet UploadServlet which would take care of accepting uploaded file and to store it in directory
<Tomcat-installation-directory>/webapps/data. This directory name could also be added using an external
configuration such as a context-param element in web.xml as follows:
<web-app>
....
<context-param>
<description>Location to store uploaded file</description>
<param-name>file-upload</param-name>
<param-value>
c:\apache-tomcat-5.5.29\webapps\data\
</param-value>
</context-param>
....
</web-app>
Following is the source code for UploadServlet which can handle multiple file uploading at a time. Before
procedding you have make sure the followings:
Following example depends on FileUpload, so make sure you have the latest version ofcommons-
fileupload.x.x.jar file in your classpath. You can download it fromhttp://commons.apache.org/fileupload/.
FileUpload depends on Commons IO, so make sure you have the latest version of commons-io-x.x.jar file in
your classpath. You can download it from http://commons.apache.org/io/.
While testing following example, you should upload a file which has less size than maxFileSizeotherwise file
would not be uploaded.
Make sure you have created directories c:\temp and c:\apache-tomcat-5.5.29\webapps\data well in advance.
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
TUTORIALS POINT
Simply Easy Learning
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.commons.io.output.*;
publicclassUploadServletextendsHttpServlet{
privateboolean isMultipart;
privateString filePath;
privateint maxFileSize =50*1024;
privateint maxMemSize =4*1024;
privateFile file ;
publicvoid init(){
// Get the file location where it would be stored.
filePath =
getServletContext().getInitParameter("file-upload");
}
publicvoid doPost(HttpServletRequest request,
HttpServletResponse response)
throwsServletException, java.io.IOException{
// Check that we have a file upload request
isMultipart =ServletFileUpload.isMultipartContent(request);
response.setContentType("text/html");
java.io.PrintWriterout= response.getWriter();
if(!isMultipart ){
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet upload</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>No file uploaded</p>");
out.println("</body>");
out.println("</html>");
return;
}
DiskFileItemFactory factory =newDiskFileItemFactory();
// maximum size that will be stored in memory
factory.setSizeThreshold(maxMemSize);
// Location to save data that is larger than maxMemSize.
factory.setRepository(newFile("c:\\temp"));
try{
// Parse the request to get file items.
List fileItems = upload.parseRequest(request);
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet upload</title>");
out.println("</head>");
out.println("<body>");
while( i.hasNext ())
{
FileItemfi=(FileItem)i.next();
TUTORIALS POINT
Simply Easy Learning
if(!fi.isFormField ())
{
// Get the uploaded file parameters
String fieldName =fi.getFieldName();
String fileName =fi.getName();
String contentType =fi.getContentType();
boolean isInMemory =fi.isInMemory();
long sizeInBytes =fi.getSize();
// Write the file
if( fileName.lastIndexOf("\\")>=0){
file =newFile( filePath +
fileName.substring( fileName.lastIndexOf("\\")));
}else{
file =newFile( filePath +
fileName.substring(fileName.lastIndexOf("\\")+1));
}
fi.write( file );
out.println("Uploaded Filename: "+ fileName +"<br>");
}
}
out.println("</body>");
out.println("</html>");
}catch(Exception ex){
System.out.println(ex);
}
}
publicvoid doGet(HttpServletRequest request,
HttpServletResponse response)
throwsServletException, java.io.IOException{
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>UploadServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>UploadServlet</servlet-name>
<url-pattern>/UploadServlet</url-pattern>
</servlet-mapping>
Now try to upload files using the HTML form which you created above. When you would try
http://localhost:8080/UploadFile.htm, it would display following result which would help you uploading any file from
your local machine.
TUTORIALS POINT
Simply Easy Learning
If your servlet script works fine, your file should be uploaded in c:\apache-tomcat-5.5.29\webapps\data\ directory.
TUTORIALS POINT
Simply Easy Learning
CHAPTER
15
Handling Date
O ne of the most important advantages of using Servlet is that you can use most of the methods available in
core Java. This tutorial would take you through Java provided Date class which is available in java.util package,
this class encapsulates the current date and time.
The Date class supports two constructors. The first constructor initializes the object with the current date and time.
Date()
The following constructor accepts one argument that equals the number of milliseconds that have elapsed since
midnight, January 1, 1970
Date(long millisec)
Once you have a Date object available, you can call any of the following support methods to play with dates:
Object clone( )
3
Duplicates the invoking Date object.
TUTORIALS POINT
Simply Easy Learning
long getTime( )
7
Returns the number of milliseconds that have elapsed since January 1, 1970.
int hashCode( )
8
Returns a hash code for the invoking object.
String toString( )
10
Converts the invoking Date object into a string and returns the result.
PrintWriterout= response.getWriter();
String title ="Display Current Date & Time";
Date date =newDate();
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 "+
"transitional//en\">\n";
out.println(docType +
"<html>\n"+
"<head><title>"+ title +"</title></head>\n"+
"<body bgcolor=\"#f0f0f0\">\n"+
"<h1 align=\"center\">"+ title +"</h1>\n"+
"<h2 align=\"center\">"+ date.toString()+"</h2>\n"+
"</body></html>");
}
}
Now let us compile above servlet and create appropriate entries in web.xml and then call this servlet using URL
http://localhost:8080/CurrentDate. This would produce following result:
Try to refersh URL http://localhost:8080/CurrentDate and you would find difference in seconds everytime you
would refresh.
TUTORIALS POINT
Simply Easy Learning
Date Comparison:
As I mentioned above you can use all the available Java methods in your Servlet. In case you need to compare
two dates, following are the methods:
You can use getTime( ) to obtain the number of milliseconds that have elapsed since midnight, January 1,
1970, for both objects and then compare these two values.
You can use the methods before( ), after( ), and equals( ). Because the 12th of the month comes before the
18th, for example, new Date(99, 2, 12).before(new Date (99, 2, 18)) returns true.
You can use the compareTo( ) method, which is defined by the Comparable interface and implemented by
Date.
PrintWriterout= response.getWriter();
String title ="Display Current Date & Time";
Date dNow =newDate();
SimpleDateFormat ft =
newSimpleDateFormat("E yyyy.MM.dd 'at' hh:mm:ss a zzz");
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 "+
"transitional//en\">\n";
out.println(docType +
"<html>\n"+
"<head><title>"+ title +"</title></head>\n"+
"<body bgcolor=\"#f0f0f0\">\n"+
"<h1 align=\"center\">"+ title +"</h1>\n"+
"<h2 align=\"center\">"+ ft.format(dNow)+"</h2>\n"+
"</body></html>");
}
}
TUTORIALS POINT
Simply Easy Learning
Compile above servlet once again and then call this servlet using URL http://localhost:8080/CurrentDate. This would
produce following result:
G Era designator AD
d Day in month 10
m Minute in hour 30
s Second in minute 55
S Millisecond 234
w Week in year 40
W Week in month 1
a A.M./P.M. marker PM
For a complete list of constant available methods to manipulate date, you can refer to standard Java
documentation.
TUTORIALS POINT
Simply Easy Learning
CHAPTER
16
Page Redirect
P age redirection is generally used when a document moves to a new location and we need to send the client
to this new location or may be because of load balancing, or for simple randomization.
The simplest way of redirecting a request to another page is using method sendRedirect() of response object.
Following is the signature of this method:
publicvoidHttpServletResponse.sendRedirect(String location)
throwsIOException
This method sends back the response to the browser along with the status code and new page location. You can
also use setStatus() and setHeader() methods together to achieve the same:
....
String site ="http://www.newpage.com";
response.setStatus(response.SC_MOVED_TEMPORARILY);
response.setHeader("Location", site);
....
Example:
This example shows how a servlet performs page redirection to another location:
import java.io.*;
import java.sql.Date;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
publicclassPageRedirectextendsHttpServlet{
response.setStatus(response.SC_MOVED_TEMPORARILY);
TUTORIALS POINT
Simply Easy Learning
response.setHeader("Location", site);
}
}
Now let us compile above servlet and create following entries in web.xml
....
<servlet>
<servlet-name>PageRedirect</servlet-name>
<servlet-class>PageRedirect</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PageRedirect</servlet-name>
<url-pattern>/PageRedirect</url-pattern>
</servlet-mapping>
....
Now call this servlet using URL http://localhost:8080/PageRedirect. This would take you given URL
http://www.photofuntoos.com.
TUTORIALS POINT
Simply Easy Learning
CHAPTER
17
Hits Counter
Hit Counter for a Web Page
M any times you would be interested in knowing total number of hits on a particular page of your
website. It is very simple to count these hits using a servlet because the life cycle of a servlet is controlled by the
container in which it runs.
Following are the steps to be taken to implement a simple page hit counter which is based on Servlet Life Cycle:
Increase global variable every time either doGet() or doPost() method is called.
If required, you can use a database table to store the value of global variable in destroy() method. This value
can be read inside init() method when servlet would be initialized next time. This step is optional.
If you want to count only unique page hits with-in a session then you can use isNew() method to check if same
page already have been hit with-in that session. This step is optional.
You can display value of the global counter to show total number of hits on your web site. This step is also
optional.
Here I'm assuming that the web container will not be restarted. If it is restarted or servlet destroyed, the hit counter
will be reset.
Example:
This example shows how to implement a simple page hit counter:
import java.io.*;
import java.sql.Date;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
publicclassPageHitCounterextendsHttpServlet{
privateint hitCount;
TUTORIALS POINT
Simply Easy Learning
publicvoid init()
{
// Reset hit counter.
hitCount =0;
}
}
publicvoid destroy()
{
// This is optional step but if you like you
// can write hitCount value in your database.
}
}
Now let us compile above servlet and create following entries in web.xml
....
<servlet>
<servlet-name>PageHitCounter</servlet-name>
<servlet-class>PageHitCounter</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>PageHitCounter</servlet-name>
<url-pattern>/PageHitCounter</url-pattern>
</servlet-mapping>
....
Now call this servlet using URL http://localhost:8080/PageHitCounter. This would increase counter by one every
time this page gets refreshed and it would display following result:
TUTORIALS POINT
Simply Easy Learning
Total Number of Hits
6
Following are the steps to be taken to implement a simple website hit counter which is based on Filter Life Cycle:
If required, you can use a database table to store the value of global variable in destroy() method of filter. This
value can be read inside init() method when filter would be initialized next time. This step is optional.
Here I'm assuming that the web container will not be restarted. If it is restarted or servlet destroyed, the hit counter
will be reset.
Example:
This example shows how to implement a simple website hit counter:
publicclassSiteHitCounterimplementsFilter{
privateint hitCount;
TUTORIALS POINT
Simply Easy Learning
// This is optional step but if you like you
// can write hitCount value in your database.
}
}
Now let us compile above servlet and create following entries in web.xml
....
<filter>
<filter-name>SiteHitCounter</filter-name>
<filter-class>SiteHitCounter</filter-class>
</filter>
<filter-mapping>
<filter-name>SiteHitCounter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
....
Now call any URL like URL http://localhost:8080/. This would increase counter by one every time any page gets a
hit and it would display following message in the log:
TUTORIALS POINT
Simply Easy Learning
CHAPTER
18
Auto Refresh
C onsider a webpage which is displaying live game score or stock market status or currency exchange
ration. For all such type of pages, you would need to refresh your web page regularly using referesh or reload
button with your browser.
Java Servlet makes this job easy by providing you a mechanism where you can make a webpage in such a way that
it would refresh automatically after a given interval.
The simplest way of refreshing a web page is using method setIntHeader() of response object. Following is the
signature of this method:
This method sends back header "Refresh" to the browser along with an integer value which indicates time interval in
seconds.
TUTORIALS POINT
Simply Easy Learning
Calendar calendar =newGregorianCalendar();
String am_pm;
int hour = calendar.get(Calendar.HOUR);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
if(calendar.get(Calendar.AM_PM)==0)
am_pm ="AM";
else
am_pm ="PM";
PrintWriterout= response.getWriter();
String title ="Auto Page Refresh using Servlet";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 "+
"transitional//en\">\n";
out.println(docType +
"<html>\n"+
"<head><title>"+ title +"</title></head>\n"+
"<body bgcolor=\"#f0f0f0\">\n"+
"<h1 align=\"center\">"+ title +"</h1>\n"+
"<p>Current Time is: "+ CT +"</p>\n");
}
// Method to handle POST method request.
publicvoid doPost(HttpServletRequest request,
HttpServletResponse response)
throwsServletException,IOException{
doGet(request, response);
}
}
Now let us compile above servlet and create following entries in web.xml
....
<servlet>
<servlet-name>Refresh</servlet-name>
<servlet-class>Refresh</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Refresh</servlet-name>
<url-pattern>/Refresh</url-pattern>
</servlet-mapping>
....
Now call this servlet using URL http://localhost:8080/Refresh which would display current system time after every 5
seconds as follows. Just run the servlet and wait to see the result:
TUTORIALS POINT
Simply Easy Learning
CHAPTER
19
Sending Email
T o send an email using your a Servlet is simple enough but to start with you should have JavaMail
You can download latest version of JavaMail (Version 1.2) from Java's standard website.
You can download latest version of JAF (Version 1.1.1) from Java's standard website.
Download and unzip these files, in the newly created top level directories you will find a number of jar files for both
the applications. You need to add mail.jar and activation.jar files in your CLASSPATH.
publicclassSendEmailextendsHttpServlet{
TUTORIALS POINT
Simply Easy Learning
// Setup mail server
properties.setProperty("mail.smtp.host", host);
try{
// Create a default MimeMessage object.
MimeMessage message =newMimeMessage(session);
// Set From: header field of the header.
message.setFrom(newInternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO,
newInternetAddress(to));
// Set Subject: header field
message.setSubject("This is the Subject Line!");
// Now set the actual message
message.setText("This is actual message");
// Send message
Transport.send(message);
String title ="Send Email";
String res ="Sent message successfully....";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 "+
"transitional//en\">\n";
out.println(docType +
"<html>\n"+
"<head><title>"+ title +"</title></head>\n"+
"<body bgcolor=\"#f0f0f0\">\n"+
"<h1 align=\"center\">"+ title +"</h1>\n"+
"<p align=\"center\">"+ res +"</p>\n"+
"</body></html>");
}catch(MessagingException mex){
mex.printStackTrace();
}
}
}
Now let us compile above servlet and create following entries in web.xml
....
<servlet>
<servlet-name>SendEmail</servlet-name>
<servlet-class>SendEmail</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>SendEmail</servlet-name>
<url-pattern>/SendEmail</url-pattern>
</servlet-mapping>
....
Now call this servlet using URL http://localhost:8080/SendEmail which would send an email to given email
ID [email protected] and would display following response:
TUTORIALS POINT
Simply Easy Learning
Send Email
Sent message successfully....
If you want to send an email to multiple recipients then following methods would be used to specify multiple email
IDs:
This example is very similar to previous one, except here we are using setContent() method to set content whose
second argument is "text/html" to specify that the HTML content is included in the message.
Using this example, you can send as big as HTML content you like.
publicclassSendEmailextendsHttpServlet{
TUTORIALS POINT
Simply Easy Learning
// Get the default Session object.
Session session =Session.getDefaultInstance(properties);
try{
// Create a default MimeMessage object.
MimeMessage message =newMimeMessage(session);
// Set From: header field of the header.
message.setFrom(newInternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO,
newInternetAddress(to));
// Set Subject: header field
message.setSubject("This is the Subject Line!");
Compile and run above servlet to send HTML message on a given email ID.
publicclassSendEmailextendsHttpServlet{
TUTORIALS POINT
Simply Easy Learning
publicvoid doGet(HttpServletRequest request,
HttpServletResponse response)
throwsServletException,IOException
{
// Recipient's email ID needs to be mentioned.
String to ="[email protected]";
try{
// Create a default MimeMessage object.
MimeMessage message =newMimeMessage(session);
TUTORIALS POINT
Simply Easy Learning
message.setContent(multipart );
// Send message
Transport.send(message);
String title ="Send Email";
String res ="Sent message successfully....";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 "+
"transitional//en\">\n";
out.println(docType +
"<html>\n"+
"<head><title>"+ title +"</title></head>\n"+
"<body bgcolor=\"#f0f0f0\">\n"+
"<h1 align=\"center\">"+ title +"</h1>\n"+
"<p align=\"center\">"+ res +"</p>\n"+
"</body></html>");
}catch(MessagingException mex){
mex.printStackTrace();
}
}
}
Compile and run above servlet to send a file as an attachement along with a message on a given email ID.
props.setProperty("mail.user","myuser");
props.setProperty("mail.password","mypwd");
TUTORIALS POINT
Simply Easy Learning
CHAPTER
20
Packaging
T he web application structure involving the WEB-INF subdirectory is standard to all Java web applications
and specified by the servlet API specification. Given a top-level directory name of myapp, Here is what this directory
structure looks like:
/myapp
/images
/WEB-INF
/classes
/lib
The WEB-INF subdirectory contains the application's deployment descriptor, named web.xml. All the HTML files live
in the top-level directory which is myapp. For admin user, you would find ROOT directory as parent directory as
myapp.
/myapp/WEB-INF/classes/com/myorg/MyServlet.class
Following is the example to create MyServlet class with a package name com.myorg
publicclassMyServletextendsHttpServlet{
privateString message;
publicvoid init()throwsServletException
{
// Do required initialization
message ="Hello World";
}
TUTORIALS POINT
Simply Easy Learning
publicvoid doGet(HttpServletRequest request,
HttpServletResponse response)
throwsServletException,IOException
{
// Set response content type
response.setContentType("text/html");
publicvoid destroy()
{
// do nothing.
}
}
$ javac MyServlet.java
If the servlet depends on any other libraries, you have to include those JAR files on your CLASSPATH as well. I
have included only servlet-api.jar JAR file because I'm not using any other library in Hello World program.
This command line uses the built-in javac compiler that comes with the Sun Microsystems Java Software
Development Kit (JDK). For this command to work properly, you have to include the location of the Java SDK that
you are using in the PATH environment variable.
If everything goes fine, above compilation would produce MyServlet.class file in the same directory. Next section
would explain how a compiled servlet would be deployed in production.
If you have a fully qualified class name of com.myorg.MyServlet, then this servlet class must be located in WEB-
INF/classes/com/myorg/MyServlet.class and you would need to create following entries in web.xml file located in
<Tomcat-installation-directory>/webapps/ROOT/WEB-INF/
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.myorg.MyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/MyServlet</url-pattern>
</servlet-mapping>
TUTORIALS POINT
Simply Easy Learning
Above entries to be created inside <web-app>...</web-app> tags available in web.xml file. There could be various
entries in this table already available, but never mind.
You are almost done, now let us start tomcat server using <Tomcat-installation-directory>\bin\startup.bat (on
windows) or <Tomcat-installation-directory>/bin/startup.sh (on Linux/Solaris etc.) and finally
type http://localhost:8080/MyServlet in browser's address box. If everything goes fine, you would get following
result:
Hello World
TUTORIALS POINT
Simply Easy Learning
CHAPTER
21
Debugging
I tisalways difficult to testing/debugging a servlets. Servlets tend to involve a large amount of client/server
Here are a few hints and suggestions that may aid you in your debugging.
System.out.println()
System.out.println() is easy to use as a marker to test whether a certain piece of code is being executed or not. We
can print out variable values as well. Additionally:
Since the System object is part of the core Java objects, it can be used everywhere without the need to install
any extra classes. This includes Servlets, JSP, RMI, EJB's, ordinary Beans and classes, and standalone
applications.
Compared to stopping at breakpoints, writing to System.out doesn't interfere much with the normal execution
flow of the application, which makes it very valuable when timing is crucial.
System.out.println("Debugging message");
All the messages generated by above syntax would be logged in web server log file.
Message Logging:
It is always great idea to use proper logging method to log all the debug, warning and error messages using a
standard logging method. I use log4J to log all the messages.
The Servlet API also provides a simple way of outputting information by using the log() method as follows:
publicclassContextLogextendsHttpServlet{
publicvoid doGet(HttpServletRequest request,
HttpServletResponse response)throwsServletException,
TUTORIALS POINT
Simply Easy Learning
java.io.IOException{
response.setContentType("text/html");
java.io.PrintWriterout= response.getWriter();
String title ="Context Log";
String docType =
"<!doctype html public \"-//w3c//dtd html 4.0 "+
"transitional//en\">\n";
out.println(docType +
"<html>\n"+
"<head><title>"+ title +"</title></head>\n"+
"<body bgcolor=\"#f0f0f0\">\n"+
"<h1 align=\"center\">"+ title +"</h1>\n"+
"<h2 align=\"center\">Messages sent</h2>\n"+
"</body></html>");
}//doGet
}
The ServletContext logs its text messages to the servlet container's log file. With Tomcat these logs are found in
<Tomcat-installation-directory>/logs.
The log files do give an indication of new emerging bugs or the frequency of problems. For that reason it's good to
use the log() function in the catch clause of exceptions which should normally not occur.
To debug a servlet, we can debug sun.servlet.http.HttpServer, then watch as HttpServer executes servlets in
response to HTTP requests we make from a browser. This is very similar to how applets are debugged. The
difference is that with applets, the actual program being debugged is sun.applet.AppletViewer.
Most debuggers hide this detail by automatically knowing how to debug applets. Until they do the same for servlets,
you have to help your debugger by doing the following:
Set your debugger's classpath so that it can find sun.servlet.http.Http-Server and associated classes.
Set your debugger's classpath so that it can also find your servlets and support classes, typically
server_root/servlets and server_root/classes.
You normally wouldn't want server_root/servlets in your classpath because it disables servlet reloading. This
inclusion, however, is useful for debugging. It allows your debugger to set breakpoints in a servlet before the
custom servlet loader in HttpServer loads the servlet.
Once you have set the proper classpath, start debugging sun.servlet.http.HttpServer. You can set breakpoints in
whatever servlet you're interested in debugging, then use a web browser to make a request to the HttpServer for
TUTORIALS POINT
Simply Easy Learning
the given servlet (http://localhost:8080/servlet/ServletToDebug). You should see execution stop at your
breakpoints.
Using Comments:
Comments in your code can help the debugging process in various ways. Comments can be used in lots of other
ways in the debugging process.
The Servlet uses Java comments and single line (// ...) and multiple line (/* ... */) comments can be used to
temporarily remove parts of your Java code. If the bug disappears, take a closer look at the code you just
commented and find out the problem.
Be aware that server_root/classes doesn't reload and that server_root/servlets probably does.
Ask a browser to show the raw content of the page it is displaying. This can help identify formatting problems.
It's usually an option under the View menu.
Make sure the browser isn't caching a previous request's output by forcing a full reload of the page. With
Netscape Navigator, use Shift-Reload; with Internet Explorer use Shift-Refresh.
Verify that your servlet's init() method takes a ServletConfig parameter and calls super.init(config) right away.
TUTORIALS POINT
Simply Easy Learning
CHAPTER
22
Internationalization
Internationalization (i18n): This means enabling a web site to provide different versions of content translated
into the visitor's language or nationality.
Localization (l10n): This means adding resources to a web site to adapt it to a particular geographical or
cultural region for example Hindi translation to a web site.
locale: This is a particular cultural or geographical region. It is usually referred to as a language symbol
followed by a country symbol which is separated by an underscore. For example "en_US" represents english
locale for US.
There are number of items which should be taken care while building up a global website. This tutorial would not
give you complete detail on this but it would give you a good example on how you can offer your web page in
different languages to internet community by differentiating their location ie. locale.
A servlet can pickup appropriate version of the site based on the requester's locale and provide appropriate site
version according to the local language, culture and requirements. Following is the method of request object which
returns Locale object.
java.util.Locale request.getLocale()
Detecting Locale:
Following are the important locale methods which you can use to detect requester's location, language and of
course locale. All the below methods display country name and language name set in requester's browser.
String getCountry()
1
This method returns the country/region code in upper case for this locale in ISO 3166 2-letter format.
String getDisplayCountry()
2
This method returns a name for the locale's country that is appropriate for display to the user.
String getLanguage()
3
This method returns the language code in lower case for this locale in ISO 639 format.
String getDisplayLanguage()
4
This method returns a name for the locale's language that is appropriate for display to the user.
5 String getISO3Country()
TUTORIALS POINT
Simply Easy Learning
This method returns a three-letter abbreviation for this locale's country.
String getISO3Language()
6
This method returns a three-letter abbreviation for this locale's language.
Example:
This example shows how you display a language and associated country for a request:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
publicclassGetLocaleextendsHttpServlet{
Languages Setting:
A servlet can output a page written in a Western European language such as English, Spanish, German, French,
Italian, Dutch etc. Here it is important to set Content-Language header to display all the characters properly.
Second point is to display all the special characters using HTML entities, For example, "ñ" represents "ñ", and
"¡" represents "¡" as follows:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
publicclassDisplaySpanishextendsHttpServlet{
TUTORIALS POINT
Simply Easy Learning
HttpServletResponse response)
throwsServletException,IOException
{
// Set response content type
response.setContentType("text/html");
PrintWriterout= response.getWriter();
// Set spanish language code.
response.setHeader("Content-Language","es");
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.DateFormat;
import java.util.Date;
publicclassDateLocaleextendsHttpServlet{
TUTORIALS POINT
Simply Easy Learning
"</body></html>");
}
}
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.NumberFormat;
import java.util.Date;
publicclassCurrencyLocaleextendsHttpServlet{
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.Locale;
import java.text.NumberFormat;
import java.util.Date;
publicclassPercentageLocaleextendsHttpServlet{
TUTORIALS POINT
Simply Easy Learning
publicvoid doGet(HttpServletRequest request,
HttpServletResponse response)
throwsServletException,IOException
{
// Set response content type
response.setContentType("text/html");
PrintWriterout= response.getWriter();
//Get the client's Locale
Locale locale = request.getLocale();
NumberFormat nft =NumberFormat.getPercentInstance(locale);
String formattedPerc = nft.format(0.51);
TUTORIALS POINT
Simply Easy Learning