ServLet Notes
ServLet Notes
ServLet Notes
Servlet technology is used to create web application (resides at server side and generates dynamic web page).
Servlet technology is robust and scalable because of java language. Before Servlet, CGI (Common Gateway Interface) scripting language was
popular as a server-side programming language. But there was many disadvantages of this technology. We have discussed these disadvantages
below.
There are many interfaces and classes in the servlet API such as Servlet, GenericServlet, HttpServlet, ServletRequest, ServletResponse etc.
What is a Servlet?
o Servlet is an API that provides many interfaces and classes including documentations.
o Servlet is a class that extend the capabilities of the servers and respond to the incoming request. It can respond to any type of requests.
o Servlet is a web component that is deployed on the server to create dynamic web page.
A web application is an application accessible from the web. A web application is composed of web components like Servlet, JSP, Filter etc. and
other components such as HTML. The web components typically execute in Web Server and respond to HTTP request.
CGI(Commmon Gateway Interface)
CGI technology enables the web server to call an external program and pass HTTP request information to the external program to process the
request. For each request, it starts a new process.
Disadvantages of CGI
2. For each request, it starts a process and Web server is limited to start processes.
Advantage of Servlet
There are many advantages of servlet over CGI. The web container creates threads for handling the multiple requests to the servlet. Threads have a
lot of benefits over the Processes such as they share a common memory area, lightweight, cost of communication between the threads are low. The
basic benefits of servlet are as follows:
1. better performance: because it creates a thread for each request not process.
3. Robust: Servlets are managed by JVM so we don't need to worry about memory leak, garbage collection etc.
5. Web Terminology
Website: static vs It is a collection of related web pages that may contain text, images, audio and video.
dynamic
HTTP It is the data communication protocol used to establish communication between client and server.
HTTP Requests It is the request send by the computer to a web server that contains all sorts of potentially
interesting information.
Get vs Post It give the difference between GET and POST request.
Container It is used in java for dynamically generate the web pages on the server side.
Server: Web vs It is used to manage the network resources and for running the program or software that
Application provides services.
Content Type It is HTTP header that provides the description about what are you sending to the browser.
Website
Website is a collection of related web pages that may contain text, images, audio and video. The first page of a website is called home page. Each
website has specific internet address (URL) that you need to enter in your browser to access a website.
Website is hosted on one or more servers and can be accessed by visiting its homepage using a computer network. A website is managed by its
owner that can be an individual, company or an organization.
o Static Website
o Dynamic Website
Static website
Static website is the basic type of website that is easy to create. You don't need web programming and database design to create a static website.
Its web pages are coded in HTML.
The codes are fixed for each page so the information contained in the page does not change and it looks like a printed page.
Dynamic website
Dynamic website is a collection of dynamic web pages whose content changes dynamically. It accesses content from a database or Content
Management System (CMS). Therefore, when you alter or update the content of the database, the content of the website is also altered or updated.
Dynamic website uses client-side scripting or server-side scripting, or both to generate dynamic content.
Client side scripting generates content at the client computer on the basis of user input. The web browser downloads the web page from the server
and processes the code within the page to render information to the user.
In server side scripting, the software runs on the server and processing is completed in the server then plain pages are sent to the user.
Static vs Dynamic website
Prebuilt content is same every time the page is loaded. Content is generated quickly and changes regularly.
It uses the HTML code for developing a website. It uses the server side languages such as PHP,SERVLET, JSP,
and ASP.NET etc. for developing a website.
It sends exactly the same response for every request. It may generate different HTML for each of the request.
The content is only changes when someone publishes The page contains "server-side" code it allows the server to
and updates the file (sends it to the web server). generate the unique content when the page is loaded.
Flexibility is the main advantage of static website. Content Management System (CMS) is the main advantage of
dynamic website.
HTTP is TCP/IP based communication protocol, which is used to deliver the data like image files, query results, HTML files etc on the World Wide
Web (WWW) with the default port is TCP 80. It provides the standardized way for computers to communicate with each other.
o It is the protocol that allows web servers and browsers to exchange data over the web.
o It is stateless means each request is considered as the new request. In other words, server doesn't recognize the user by default.
There are three fundamental features that make the HTTP a simple and powerful protocol used for communication:
o HTTP is media independent: It refers to any type of media content can be sent by HTTP as long as both the server and the client can
handle the data content.
o HTTP is connectionless: It is a connectionless approach in which HTTP client i.e., a browser initiates the HTTP request and after the
request is sends the client disconnects from server and waits for the response.
o HTTP is stateless: The client and server are aware of each other during a current request only. Afterwards, both of them forget each
other. Due to the stateless nature of protocol, neither the client nor the server can retain the information about different request across
the web pages.
HTTP is request/response protocol which is based on client/server based architecture. In this web browser, search engines, etc behaves as a HTTP
clients, and the Web server like Servlet behaves as a server.
HTTP Requests
The request sends by the computer to a web server that contains all sorts of potentially interesting information is known as HTTP requests.
The HTTP client sends the request to the server in the form of request message which includes following information:
o The Request-line
The HTTP request method indicates the method to be performed on the resource identified by the Requested URI (Uniform Resource
Identifier). This method is case-sensitive and should be used in uppercase.
POST Asks the server to accept the body info attached. It is like GET request with extra info sent with the request.
HEAD Asks for only the header part of whatever a GET would return. Just like GET but with no body.
TRACE Asks for the loopback of the request message, for testing or troubleshooting.
PUT Says to put the enclosed info (the body) at the requested URL.
OPTIONS Asks for a list of the HTTP methods to which the thing at the request URL can respond
There are many differences between the Get and Post request. Let's see these differences:
GET POST
1) In case of Get request, only limited amount of data can be In case of post request, large amount of data can be
sent because data is sent in header. sent because data is sent in body.
2) Get request is not secured because data is exposed in URL Post request is secured because data is not exposed
bar. in URL bar.
4) Get request is idempotent . It means second request will be Post request is non-idempotent.
ignored until response of first request is delivered
5) Get request is more efficient and used more than Post. Post request is less efficient and used less than get.
Two common methods for the request-response between a server and client are:
The query string (name/value pairs) is sent inside the URL of a GET request:
1. GET /RegisterDao.jsp?name1=value1&name2=value2
As we know that data is sent in request header in case of get request. It is the default request type. Let's see what information is sent to the server.
Some other features of GET requests are:
o It can be bookmarked
o It can be cached
The query string (name/value pairs) is sent in HTTP message body for a POST request:
1. POST/RegisterDao.jsp HTTP/1.1
2. Host: www. aptech.com
3. name1=value1&name2=value2
As we know, in case of post request original data is sent in message body. Let's see how information is passed to the server in case of post request.
Some other features of POST requests are:
Servlet Container
It provides the runtime environment for JavaEE (j2ee) applications. The client/user can request only a static WebPages from the server. If the user
wants to read the web pages as per input then the servlet container is used in java.
The servlet container is used in java for dynamically generate the web pages on the server side. Therefore the servlet container is the part of a web
server that interacts with the servlet for handling the dynamic web pages from the client.
Servlet Container States
The servlet container is the part of web server which can be run in a separate process. We can classify the servlet container states in three types:
o Standalone: It is typical Java-based servers in which the servlet container and the web servers are the integral part of a single
program. For example:- Tomcat running by itself
o In-process: It is separated from the web server, because a different program is runs within the address space of the main server as a
plug-in. For example:- Tomcat running inside the JBoss.
o Out-of-process: The web server and servlet container are different programs which are run in a different process. For performing the
communications between them, web server uses the plug-in provided by the servlet container.
The Servlet Container performs many operations that are given below:
o Multithreaded support
o Object Pooling
o Security etc.
1. Web Server
2. Application Server
Web Server
Web server contains only web or servlet container. It can be used for servlet, jsp, struts, jsf etc. It can't be used for EJB.
It is a computer where the web content can be stored. In general web server can be used to host the web sites but there also used some other web
servers also such as FTP, email, storage, gaming etc.
It can respond to the client request in either of the following two possible ways:
o Generating response by using the script and communicating with database.
Important points
o If the requested web page at the client side is not found, then web server will sends the HTTP response: Error 404 Not found.
o When the web server searching the requested page if requested page is found then it will send to the client with an HTTP response.
o If the client requests some other resources then web server will contact to application server and data is store for constructing the HTTP
response.
Application Server
Application server contains Web and EJB containers. It can be used for servlet, jsp, struts, jsf, ejb etc. It is a component based product that lies in
the middle-tier of a server centric architecture.
It provides the middleware services for state maintenance and security, along with persistence and data access. It is a type of server designed to
install, operate and host associated services and applications for the IT services, end users and organizations.
Content Type
Content Type is also known as MIME (Multipurpose internet Mail Extension) Type. It is a HTTP header that provides the description about what are
you sending to the browser.
MIME is an internet standard that is used for extending the limited capabilities of email by allowing the insertion of sounds, images and text in a
message.
The features provided by MIME to the email services are as given below:
o It supports the attachment which contains executable audio, images and video files etc.
o text/html
o text/plain
o application/msword
o application/vnd.ms-excel
o application/jar
o application/pdf
o application/octet-stream
o application/x-zip
o images/jpeg
o images/png
o images/gif
o audio/mp3
o video/mp4
o video/quicktime etc.
Servlet API
1. Servlet API
2. Interfaces in javax.servlet package
3. Classes in javax.servlet package
4. Interfaces in javax.servlet.http package
5. Classes in javax.servlet.http package
The javax.servlet and javax.servlet.http packages represent interfaces and classes for servlet api.
The javax.servlet package contains many interfaces and classes that are used by the servlet or web container. These are not specific to any
protocol.
The javax.servlet.http package contains interfaces and classes that are responsible for http requests only.
1. Servlet
2. ServletRequest
3. ServletResponse
4. RequestDispatcher
5. ServletConfig
6. ServletContext
7. SingleThreadModel
8. Filter
9. FilterConfig
10. FilterChain
11. ServletRequestListener
12. ServletRequestAttributeListener
13. ServletContextListener
14. ServletContextAttributeListener
1. GenericServlet
2. ServletInputStream
3. ServletOutputStream
4. ServletRequestWrapper
5. ServletResponseWrapper
6. ServletRequestEvent
7. ServletContextEvent
8. ServletRequestAttributeEvent
9. ServletContextAttributeEvent
10. ServletException
11. UnavailableException
1. HttpServletRequest
2. HttpServletResponse
3. HttpSession
4. HttpSessionListener
5. HttpSessionAttributeListener
6. HttpSessionBindingListener
7. HttpSessionActivationListener
1. HttpServlet
2. Cookie
3. HttpServletRequestWrapper
4. HttpServletResponseWrapper
5. HttpSessionEvent
6. HttpSessionBindingEvent
Servlet Interface
1. Servlet Interface
2. Methods of Servlet interface
Servlet interface needs to be implemented for creating any servlet (either directly or indirectly). It provides 3 life cycle methods that are used to
initialize the servlet, to service the requests, and to destroy the servlet and 2 non-life cycle methods.
There are 5 methods in Servlet interface. The init, service and destroy are the life cycle methods of servlet. These are invoked by the web container.
Method Description
public void init(ServletConfig config) initializes the servlet. It is the life cycle method of servlet and
invoked by the web container only once.
public void service(ServletRequest provides response for the incoming request. It is invoked at each
request,ServletResponse response) request by the web container.
public void destroy() is invoked only once and indicates that servlet is being
destroyed.
public String getServletInfo() returns information about servlet such as writer, copyright,
version etc.
Let's see the simple example of servlet by implementing the servlet interface.
File: First.java
1. import java.io.*;
2. import javax.servlet.*;
3.
4. public class First implements Servlet{
5. ServletConfig config=null;
6.
7. public void init(ServletConfig config){
8. this.config=config;
9. System.out.println("servlet is initialized");
10. }
11.
12. public void service(ServletRequest req,ServletResponse res)
13. throws IOException,ServletException{
14.
15. res.setContentType("text/html");
16.
17. PrintWriter out=res.getWriter();
18. out.print("<html><body>");
19. out.print("<b>hello simple servlet</b>");
20. out.print("</body></html>");
21.
22. }
23. public void destroy(){System.out.println("servlet is destroyed");}
24. public ServletConfig getServletConfig(){return config;}
25. public String getServletInfo(){return "copyright 2007-1010";}
26.
27. }
GenericServlet class
1. GenericServlet class
2. Methods of GenericServlet class
3. Example of GenericServlet class
GenericServlet class implements Servlet, ServletConfig and Serializableinterfaces. It provides the implementaion of all the methods of these
interfaces except the service method.
You may create a generic servlet by inheriting the GenericServlet class and providing the implementation of the service method.
3. public void destroy() is invoked only once throughout the life cycle and indicates that servlet is being destroyed.
5. public String getServletInfo() returns information about servlet such as writer, copyright, version etc.
6. public void init() it is a convenient method for the servlet programmers, now there is no need to call super.init(config)
8. public String getInitParameter(String name) returns the parameter value for the given parameter name.
9. public Enumeration getInitParameterNames() returns all the parameters defined in the web.xml file.
10. public String getServletName() returns the name of the servlet object.
11. public void log(String msg) writes the given message in the servlet log file.
12. public void log(String msg,Throwable t) writes the explanatory message in the servlet log file and a stack trace.
Let's see the simple example of servlet by inheriting the GenericServlet class.
File: First.java
1. import java.io.*;
2. import javax.servlet.*;
3.
4. public class First extends GenericServlet{
5. public void service(ServletRequest req,ServletResponse res)
6. throws IOException,ServletException{
7.
8. res.setContentType("text/html");
9.
10. PrintWriter out=res.getWriter();
11. out.print("<html><body>");
12. out.print("<b>hello generic servlet</b>");
13. out.print("</body></html>");
14.
15. }
16. }
next →← prev
HttpServlet class
1. HttpServlet class
2. Methods of HttpServlet class
The HttpServlet class extends the GenericServlet class and implements Serializable interface. It provides http specific methods such as
doGet, doPost, doHead, doTrace etc.
1. public void service(ServletRequest req,ServletResponse res) dispatches the request to the protected service method by
converting the request and response object into http type.
2. protected void service(HttpServletRequest req, HttpServletResponse res) receives the request from the service method, and
dispatches the request to the doXXX() method depending on the incoming http request type.
3. protected void doGet(HttpServletRequest req, HttpServletResponse res) handles the GET request. It is invoked by the web
container.
4. protected void doPost(HttpServletRequest req, HttpServletResponse res) handles the POST request. It is invoked by the web
container.
5. protected void doHead(HttpServletRequest req, HttpServletResponse res) handles the HEAD request. It is invoked by the web
container.
6. protected void doOptions(HttpServletRequest req, HttpServletResponse res) handles the OPTIONS request. It is invoked by the
web container.
7. protected void doPut(HttpServletRequest req, HttpServletResponse res) handles the PUT request. It is invoked by the web
container.
8. protected void doTrace(HttpServletRequest req, HttpServletResponse res) handles the TRACE request. It is invoked by the web
container.
9. protected void doDelete(HttpServletRequest req, HttpServletResponse res) handles the DELETE request. It is invoked by the
web container.
10. protected long getLastModified(HttpServletRequest req) returns the time when HttpServletRequest was last modified since
midnight January 1, 1970 GMT.
The web container maintains the life cycle of a servlet instance. Let's see the life cycle of the servlet:
The classloader is responsible to load the servlet class. The servlet class is loaded when the first request for the servlet is received by the web
container.
The web container creates the instance of a servlet after loading the servlet class. The servlet instance is created only once in the servlet life cycle.
The web container calls the init method only once after creating the servlet instance. The init method is used to initialize the servlet. It is the life
cycle method of the javax.servlet.Servlet interface. Syntax of the init method is given below:
The web container calls the service method each time when request for the servlet is received. If servlet is not initialized, it follows the first three
steps as described above then calls the service method. If servlet is initialized, it calls the service method. Notice that servlet is initialized only once.
The syntax of the service method of the Servlet interface is given below:
The web container calls the destroy method before removing the servlet instance from the service. It gives the servlet an opportunity to clean up
any resource for example memory, thread etc. The syntax of the destroy method of the Servlet interface is given below:
The server checks if the servlet is requested for the first time.
else
The web container calls the destroy method when it needs to remove the servlet such as at time of stopping server or undeploying the project.
The web container is responsible to handle the request. Let's see how it handles the request.
o The public service method internally calls the protected service method
o The protected service method calls the doGet method depending on the type of request.
o The doGet method generates the response and it is passed to the client.
o After sending the response, the web container deletes the request and response objects. The thread is contained in the thread pool or
deleted depends on the server implementation.
The protected service method checks the type of request, if request type is get, it calls doGet method, if request type is post, it calls doPost method,
so on. Let's see the internal code:
War File
A war (web archive) File contains files of a web project. It may have servlet, xml, jsp, image, html, css, js etc. files.
Here, we will discuss what is war file, how to create war file, how to deploy war file and how to extract war file.
web archive (war) file contains all the contents of a web application. It reduces the time duration for transferring file.
saves time: The war file combines all the files into a single unit. So it takes less time while transferring file from client to server.
How to create war file?
To create war file, you need to use jar tool of JDK. You need to use -c switch of jar, to create the war file.
Go inside the project directory of your project (outside the WEB-INF), then write the following command:
Here, -c is used to create file, -v to generate the verbose output and -f to specify the arhive file name.
The * (asterisk) symbol signifies that all the files of this directory (including sub directory).
If you want to deploy the war file in apache tomcat server manually, go to the webapps directory of apache tomcat and paste the war file here.
Now, you are able to access the web project through browser.
To extract the war file, you need to use -x switch of jar tool of JDK. Let's see the command to extract the war file.
welcome-file-list in web.xml
The welcome-file-list element of web-app, is used to define a list of welcome files. Its sub element is welcome-file that is used to define the
welcome file.
A welcome file is the file that is invoked automatically by the server, if you don't specify any file name.
1. welcome-file-list in web.xml
2. index.html
3. index.htm
4. index.jsp
If you have specified welcome-file in web.xml, and all the files index.html, index.htm and index.jsp exists, priority goes to welcome-file.
If welcome-file-list entry doesn't exist in web.xml file, priority goes to index.html file then index.htm and at last index.jsp file.
Let's see the web.xml file that defines the welcome files.
web.xml
1. <web-app>
2. ....
3.
4. <welcome-file-list>
5. <welcome-file>home.html</welcome-file>
6. <welcome-file>default.html</welcome-file>
7. </welcome-file-list>
8. </web-app>
You can pass positive and negative value for the servlet.
As you know well, servlet is loaded at first request. That means it consumes more time at first request. If you specify the load-on-startup in
web.xml, servlet will be loaded at project deployment time or server start. So, it will take less time for responding to first request.
If you pass the positive value, the lower integer value servlet will be loaded before the higher integer value servlet. In other words, container loads
the servlets in ascending integer value. The 0 value will be loaded first then 1, 2, 3 and so on.
web.xml
1. <web-app>
2. ....
3.
4. <servlet>
5. <servlet-name>servlet1</servlet-name>
6. <servlet-class>com.aptech.FirstServlet</servlet-class>
7. <load-on-startup>0</load-on-startup>
8. </servlet>
9.
10. <servlet>
11. <servlet-name>servlet2</servlet-name>
12. <servlet-class>com.aptech.SecondServlet</servlet-class>
13. <load-on-startup>1</load-on-startup>
14. </servlet>
15.
16. ...
17. </web-app>
There are defined 2 servlets, both servlets will be loaded at the time of project deployment or server start. But, servlet1 will be loaded first then
servlet2.
Passing negative value
If you pass the negative value, servlet will be loaded at request time, at first request.
Creating servlet example in eclipse ide, saves a lot of work to be done. It is easy and simple to create a servlet example. Let's see the steps, you
need to follow to create the first servlet example.
o create a servlet
For creating a dynamic web project click on File Menu -> New -> Project..-> Web -> dynamic web project -> write your project name
e.g. first -> Finish.
2) Create the servlet in eclipse IDE:
For creating a servlet, explore the project by clicking the + icon -> explore the Java Resources -> right click on src -> New -> servlet -
> write your servlet name e.g. Hello -> uncheck all the checkboxes except doGet() -> next -> Finish.
3) add jar file in eclipse IDE:
For adding a jar file, right click on your project -> Build Path -> Configure Build Path -> click on Libraries tab in Java Build Path ->
click on Add External JARs button -> select the servlet-api.jar file under tomcat/lib -> ok.
Now servlet has been created, Let's write the first servlet code.
4) Start the server and deploy the project:
For starting the server and deploying the project in one step, Right click on your project -> Run As -> Run on Server -> choose tomcat
server -> next -> addAll -> finish.
Now tomcat server has been started and project is deployed. To access the servlet write the url pattern name in the URL bar of the browser. In this
case Hello then enter.
download this example
If you are using Eclipse IDE first time, you need to configure the tomcat server First.
For configuring the tomcat server in eclipse IDE, click on servers tab at the bottom side of the IDE -> right click on blank area -> New ->
Servers -> choose tomcat then its version -> next -> click on Browse button -> select the apache tomcat root folder previous to bin -
> next -> addAll -> Finish.
Now tomcat7 server has been configured in eclipse IDE.
Creating a servlet in NetBeans IDE:
Next Topic
ServletRequest Interface
1. ServletRequest Interface
2. Methods of ServletRequest interface
3. Example of ServletRequest interface
4. Displaying all the header information
An object of ServletRequest is used to provide the client request information to a servlet such as content type, content length, parameter names
and values, header informations, attributes etc.
There are many methods defined in the ServletRequest interface. Some of them are as follows:
Method Description
public String getParameter(String name) is used to obtain the value of a parameter by name.
public String[] getParameterValues(String returns an array of String containing all values of given parameter
name) name. It is mainly used to obtain values of a Multi select list box.
public int getContentLength() Returns the size of the request entity data, or -1 if not known.
public String getCharacterEncoding() Returns the character set encoding for the input of this request.
public String getContentType() Returns the Internet Media Type of the request entity data, or null if
not known.
public ServletInputStream getInputStream() Returns an input stream for reading binary data in the request body.
throws IOException
public abstract String getServerName() Returns the host name of the server that received the request.
public int getServerPort() Returns the port number on which this request was received.
In this example, we are displaying the name of the user in the servlet. For this purpose, we have used the getParameter method that returns the
value for the given request parameter name.
index.html
1. <form action="welcome" method="get">
2. Enter your name<input type="text" name="name"><br>
3. <input type="submit" value="login">
4. </form>
DemoServ.java
1. import javax.servlet.http.*;
2. import javax.servlet.*;
3. import java.io.*;
4. public class DemoServ extends HttpServlet{
5. public void doGet(HttpServletRequest req,HttpServletResponse res)
6. throws ServletException,IOException
7. {
8. res.setContentType("text/html");
9. PrintWriter pw=res.getWriter();
10.
11. String name=req.getParameter("name");//will return value
12. pw.println("Welcome "+name);
13.
14. pw.close();
15. }}
In this example, we are displaying the header information of the servlet such as content type, content length, user agent etc.
RequestDispatcher in Servlet
1. RequestDispatcher Interface
2. Methods of RequestDispatcher interface
1. forward method
2. include method
3. How to get the object of RequestDispatcher
4. Example of RequestDispatcher interface
The RequestDispatcher interface provides the facility of dispatching the request to another resource it may be html, servlet or jsp. This interface can
also be used to include the content of another resource also. It is one of the way of servlet collaboration.
As you can see in the above figure, response of second servlet is included in the response of the first servlet that is being sent to the client.
How to get the object of RequestDispatcher
The getRequestDispatcher() method of ServletRequest interface returns the object of RequestDispatcher. Syntax:
In this example, we are validating the password entered by the user. If password is servlet, it will forward the request to the WelcomeServlet,
otherwise will show an error message: sorry username or password error!. In this program, we are cheking for hardcoded information. But you can
check it to the database also that we will see in the development chapter. In this example, we have created following files:
o Login.java file: a servlet class for processing the response. If password is servet, it will forward the request to the welcome servlet.
o web.xml file: a deployment descriptor file that contains the information about the servlet.
index.html
Login.java
1. import java.io.*;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4.
5.
6. public class Login extends HttpServlet {
7.
8. public void doPost(HttpServletRequest request, HttpServletResponse response)
9. throws ServletException, IOException {
10.
11. response.setContentType("text/html");
12. PrintWriter out = response.getWriter();
13.
14. String n=request.getParameter("userName");
15. String p=request.getParameter("userPass");
16.
17. if(p.equals("servlet"){
18. RequestDispatcher rd=request.getRequestDispatcher("servlet2");
19. rd.forward(request, response);
20. }
21. else{
22. out.print("Sorry UserName or Password Error!");
23. RequestDispatcher rd=request.getRequestDispatcher("/index.html");
24. rd.include(request, response);
25.
26. }
27. }
28.
29. }
WelcomeServlet.java
1. import java.io.*;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4.
5. public class WelcomeServlet extends HttpServlet {
6.
7. public void doPost(HttpServletRequest request, HttpServletResponse response)
8. throws ServletException, IOException {
9.
10. response.setContentType("text/html");
11. PrintWriter out = response.getWriter();
12.
13. String n=request.getParameter("userName");
14. out.print("Welcome "+n);
15. }
16.
17. }
web.xml
1. <web-app>
2. <servlet>
3. <servlet-name>Login</servlet-name>
4. <servlet-class>Login</servlet-class>
5. </servlet>
6. <servlet>
7. <servlet-name>WelcomeServlet</servlet-name>
8. <servlet-class>WelcomeServlet</servlet-class>
9. </servlet>
10.
11.
12. <servlet-mapping>
13. <servlet-name>Login</servlet-name>
14. <url-pattern>/servlet1</url-pattern>
15. </servlet-mapping>
16. <servlet-mapping>
17. <servlet-name>WelcomeServlet</servlet-name>
18. <url-pattern>/servlet2</url-pattern>
19. </servlet-mapping>
20.
21. <welcome-file-list>
22. <welcome-file>index.html</welcome-file>
23. </welcome-file-list>
24. </web-app>
SendRedirect in servlet
1. sendRedirect method
2. Syntax of sendRedirect() method
3. Example of RequestDispatcher interface
The sendRedirect() method of HttpServletResponse interface can be used to redirect response to another resource, it may be servlet, jsp or
html file.
It works at client side because it uses the url bar of the browser to make another request. So, it can work inside and outside the server.
The forward() method works at server side. The sendRedirect() method works at client
side.
It sends the same request and response objects to another servlet. It always sends a new request.
It can work within the server only. It can be used within and outside the server.
1. response.sendRedirect("http://www.aptech.com");
In this example, we are redirecting the request to the google server. Notice that sendRedirect method works at client side, that is why we can
our request to anywhere. We can send our request within and outside the server.
DemoServlet.java
1. import java.io.*;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4.
5. public class DemoServlet extends HttpServlet{
6. public void doGet(HttpServletRequest req,HttpServletResponse res)
7. throws ServletException,IOException
8. {
9. res.setContentType("text/html");
10. PrintWriter pw=res.getWriter();
11.
12. response.sendRedirect("http://www.google.com");
13.
14. pw.close();
15. }}
In this example, we are using sendRedirect method to send request to google server with the request data.
index.html
1. <!DOCTYPE html>
2. <html>
3. <head>
4. <meta charset="ISO-8859-1">
5. <title>sendRedirect example</title>
6. </head>
7. <body>
8.
9.
10. <form action="MySearcher">
11. <input type="text" name="name">
12. <input type="submit" value="Google Search">
13. </form>
14.
15. </body>
16. </html>
MySearcher.java
1. import java.io.IOException;
2. import javax.servlet.ServletException;
3. import javax.servlet.http.HttpServlet;
4. import javax.servlet.http.HttpServletRequest;
5. import javax.servlet.http.HttpServletResponse;
6.
7. public class MySearcher extends HttpServlet {
8. protected void doGet(HttpServletRequest request, HttpServletResponse response)
9. throws ServletException, IOException {
10.
11. String name=request.getParameter("name");
12. response.sendRedirect("https://www.google.co.in/#q="+name);
13. }
14. }
ServletConfig Interface
1. ServletConfig Interface
2. Methods of ServletConfig interface
3. How to get the object of ServletConfig
4. Syntax to provide the initialization parameter for a servlet
5. Example of ServletConfig to get initialization parameter
6. Example of ServletConfig to get all the initialization parameter
An object of ServletConfig is created by the web container for each servlet. This object can be used to get configuration information from web.xml
file.
If the configuration information is modified from the web.xml file, we don't need to change the servlet. So it is easier to manage the web application
if any specific content is modified from time to time.
Advantage of ServletConfig
The core advantage of ServletConfig is that you don't need to edit the servlet file if information is modified from the web.xml file.
1. public String getInitParameter(String name):Returns the parameter value for the specified parameter name.
The init-param sub-element of servlet is used to specify the initialization parameter for a servlet.
1. <web-app>
2. <servlet>
3. ......
4.
5. <init-param>
6. <param-name>parametername</param-name>
7. <param-value>parametervalue</param-value>
8. </init-param>
9. ......
10. </servlet>
11. </web-app>
In this example, we are getting the one initialization parameter from the web.xml file and printing this information in the servlet.
DemoServlet.java
1. import java.io.*;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4.
5. public class DemoServlet extends HttpServlet {
6. public void doGet(HttpServletRequest request, HttpServletResponse response)
7. throws ServletException, IOException {
8.
9. response.setContentType("text/html");
10. PrintWriter out = response.getWriter();
11.
12. ServletConfig config=getServletConfig();
13. String driver=config.getInitParameter("driver");
14. out.print("Driver is: "+driver);
15.
16. out.close();
17. }
18.
19. }
web.xml
1. <web-app>
2.
3. <servlet>
4. <servlet-name>DemoServlet</servlet-name>
5. <servlet-class>DemoServlet</servlet-class>
6.
7. <init-param>
8. <param-name>driver</param-name>
9. <param-value>sun.jdbc.odbc.JdbcOdbcDriver</param-value>
10. </init-param>
11.
12. </servlet>
13.
14. <servlet-mapping>
15. <servlet-name>DemoServlet</servlet-name>
16. <url-pattern>/servlet1</url-pattern>
17. </servlet-mapping>
18.
19. </web-app>
In this example, we are getting all the initialization parameter from the web.xml file and printing this information in the servlet.
DemoServlet.java
1. import java.io.IOException;
2. import java.io.PrintWriter;
3. import java.util.Enumeration;
4.
5. import javax.servlet.ServletConfig;
6. import javax.servlet.ServletException;
7. import javax.servlet.http.HttpServlet;
8. import javax.servlet.http.HttpServletRequest;
9. import javax.servlet.http.HttpServletResponse;
10.
11.
12. public class DemoServlet extends HttpServlet {
13. public void doGet(HttpServletRequest request, HttpServletResponse response)
14. throws ServletException, IOException {
15.
16. response.setContentType("text/html");
17. PrintWriter out = response.getWriter();
18.
19. ServletConfig config=getServletConfig();
20. Enumeration<String> e=config.getInitParameterNames();
21.
22. String str="";
23. while(e.hasMoreElements()){
24. str=e.nextElement();
25. out.print("<br>Name: "+str);
26. out.print(" value: "+config.getInitParameter(str));
27. }
28.
29. out.close();
30. }
31.
32. }
web.xml
1. <web-app>
2.
3. <servlet>
4. <servlet-name>DemoServlet</servlet-name>
5. <servlet-class>DemoServlet</servlet-class>
6.
7. <init-param>
8. <param-name>username</param-name>
9. <param-value>system</param-value>
10. </init-param>
11.
12. <init-param>
13. <param-name>password</param-name>
14. <param-value>oracle</param-value>
15. </init-param>
16.
17. </servlet>
18.
19. <servlet-mapping>
20. <servlet-name>DemoServlet</servlet-name>
21. <url-pattern>/servlet1</url-pattern>
22. </servlet-mapping>
23.
24. </web-app>
ServletContext Interface
1. ServletContext Interface
2. Usage of ServletContext Interface
3. Methods of ServletContext interface
4. How to get the object of ServletContext
5. Syntax to provide the initialization parameter in Context scope
6. Example of ServletContext to get initialization parameter
7. Example of ServletContext to get all the initialization parameter
An object of ServletContext is created by the web container at time of deploying the project. This object can be used to get configuration
information from web.xml file. There is only one ServletContext object per web application.
If any information is shared to many servlet, it is better to provide it from the web.xml file using the <context-param> element.
Advantage of ServletContext
Easy to maintain if any information is shared to all the servlet, it is better to make it available for all the servlet. We provide this information from
the web.xml file, so if the information is changed, we don't need to modify the servlet. Thus it removes maintenance problem.
There can be a lot of usage of ServletContext object. Some of them are as follows:
1. The object of ServletContext provides an interface between the container and servlet.
2. The ServletContext object can be used to get configuration information from the web.xml file.
3. The ServletContext object can be used to set, get or remove attribute from the web.xml file.
1. public String getInitParameter(String name):Returns the parameter value for the specified parameter name.
3. public void setAttribute(String name,Object object):sets the given object in the application scope.
4. public Object getAttribute(String name):Returns the attribute for the specified name.
5. public Enumeration getInitParameterNames():Returns the names of the context's initialization parameters as an Enumeration of
String objects.
6. public void removeAttribute(String name):Removes the attribute with the given name from the servlet context.
The context-param element, subelement of web-app, is used to define the initialization parameter in the application scope. The param-name
and param-value are the sub-elements of the context-param. The param-name element defines parameter name and and param-value defines
its value.
1. <web-app>
2. ......
3.
4. <context-param>
5. <param-name>parametername</param-name>
6. <param-value>parametervalue</param-value>
7. </context-param>
8. ......
9. </web-app>
In this example, we are getting the initialization parameter from the web.xml file and printing the value of the initialization parameter. Notice
that the object of ServletContext represents the application scope. So if we change the value of the parameter from the web.xml file, all the
servlet classes will get the changed value. So we don't need to modify the servlet. So it is better to have the common information for most of the
servlets in the web.xml file by context-param element. Let's see the simple example:
DemoServlet.java
1. import java.io.*;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4.
5.
6. public class DemoServlet extends HttpServlet{
7. public void doGet(HttpServletRequest req,HttpServletResponse res)
8. throws ServletException,IOException
9. {
10. res.setContentType("text/html");
11. PrintWriter pw=res.getWriter();
12.
13. //creating ServletContext object
14. ServletContext context=getServletContext();
15.
16. //Getting the value of the initialization parameter and printing it
17. String driverName=context.getInitParameter("dname");
18. pw.println("driver name is="+driverName);
19.
20. pw.close();
21.
22. }}
web.xml
1. <web-app>
2.
3. <servlet>
4. <servlet-name>sonoojaiswal</servlet-name>
5. <servlet-class>DemoServlet</servlet-class>
6. </servlet>
7.
8. <context-param>
9. <param-name>dname</param-name>
10. <param-value>sun.jdbc.odbc.JdbcOdbcDriver</param-value>
11. </context-param>
12.
13. <servlet-mapping>
14. <servlet-name>sonoojaiswal</servlet-name>
15. <url-pattern>/context</url-pattern>
16. </servlet-mapping>
17.
18. </web-app>
In this example, we are getting all the initialization parameter from the web.xml file. For getting all the parameters, we have used the
getInitParameterNames() method in the servlet class.
DemoServlet.java
1. import java.io.*;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4.
5.
6. public class DemoServlet extends HttpServlet{
7. public void doGet(HttpServletRequest req,HttpServletResponse res)
8. throws ServletException,IOException
9. {
10. res.setContentType("text/html");
11. PrintWriter out=res.getWriter();
12.
13. ServletContext context=getServletContext();
14. Enumeration<String> e=context.getInitParameterNames();
15.
16. String str="";
17. while(e.hasMoreElements()){
18. str=e.nextElement();
19. out.print("<br> "+context.getInitParameter(str));
20. }
21. }}
web.xml
1. <web-app>
2.
3. <servlet>
4. <servlet-name>sonoojaiswal</servlet-name>
5. <servlet-class>DemoServlet</servlet-class>
6. </servlet>
7.
8. <context-param>
9. <param-name>dname</param-name>
10. <param-value>sun.jdbc.odbc.JdbcOdbcDriver</param-value>
11. </context-param>
12.
13. <context-param>
14. <param-name>username</param-name>
15. <param-value>system</param-value>
16. </context-param>
17.
18. <context-param>
19. <param-name>password</param-name>
20. <param-value>oracle</param-value>
21. </context-param>
22.
23. <servlet-mapping>
24. <servlet-name>sonoojaiswal</servlet-name>
25. <url-pattern>/context</url-pattern>
26. </servlet-mapping>
27.
28. </web-app>
Attribute in Servlet
1. Attribute in Servlet
2. Attribute specific methods
3. Example of ServletContext to set and get attribute
4. Difference between ServletConfig and ServletContext
An attribute in servlet is an object that can be set, get or removed from one of the following scopes:
1. request scope
2. session scope
3. application scope
The servlet programmer can pass informations from one servlet to another using attributes. It is just like passing object from one class to another
so that we can reuse the same object again and again.
1. public void setAttribute(String name,Object object):sets the given object in the application scope.
2. public Object getAttribute(String name):Returns the attribute for the specified name.
3. public Enumeration getInitParameterNames():Returns the names of the context's initialization parameters as an Enumeration of
String objects.
4. public void removeAttribute(String name):Removes the attribute with the given name from the servlet context.
In this example, we are setting the attribute in the application scope and getting that value from another servlet.
DemoServlet1.java
1. import java.io.*;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4.
5.
6. public class DemoServlet1 extends HttpServlet{
7. public void doGet(HttpServletRequest req,HttpServletResponse res)
8. {
9. try{
10.
11. res.setContentType("text/html");
12. PrintWriter out=res.getWriter();
13.
14. ServletContext context=getServletContext();
15. context.setAttribute("company","IBM");
16.
17. out.println("Welcome to first servlet");
18. out.println("<a href='servlet2'>visit</a>");
19. out.close();
20.
21. }catch(Exception e){out.println(e);}
22.
23. }}
DemoServlet2.java
1. import java.io.*;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4.
5.
6. public class DemoServlet2 extends HttpServlet{
7. public void doGet(HttpServletRequest req,HttpServletResponse res)
8. {
9. try{
10.
11. res.setContentType("text/html");
12. PrintWriter out=res.getWriter();
13.
14. ServletContext context=getServletContext();
15. String n=(String)context.getAttribute("company");
16.
17. out.println("Welcome to "+n);
18. out.close();
19.
20. }catch(Exception e){out.println(e);}
21.
22. }}
web.xml
1. <web-app>
2.
3. <servlet>
4. <servlet-name>s1</servlet-name>
5. <servlet-class>DemoServlet1</servlet-class>
6. </servlet>
7.
8. <servlet-mapping>
9. <servlet-name>s1</servlet-name>
10. <url-pattern>/servlet1</url-pattern>
11. </servlet-mapping>
12.
13. <servlet>
14. <servlet-name>s2</servlet-name>
15. <servlet-class>DemoServlet2</servlet-class>
16. </servlet>
17.
18. <servlet-mapping>
19. <servlet-name>s2</servlet-name>
20. <url-pattern>/servlet2</url-pattern>
21. </servlet-mapping>
22.
23. </web-app>
The servletconfig object refers to the single servlet whereas servletcontext object refers to the whole web application.
Session Tracking is a way to maintain state (data) of an user. It is also known as session management in servlet.
Http protocol is a stateless so we need to maintain state using session tracking techniques. Each time user requests to the server, server treats the
request as the new request. So we need to maintain the state of an user to recognize to particular user.
HTTP is stateless that means each request is considered as the new request. It is shown in the figure given below:
Why use Session Tracking?
1. Cookies
3. URL Rewriting
4. HttpSession
Cookies in Servlet
A cookie is a small piece of information that is persisted between the multiple client requests.
A cookie has a name, a single value, and optional attributes such as a comment, path and domain qualifiers, a maximum age, and a version
number.
By default, each request is considered as a new request. In cookies technique, we add cookie with response from the servlet. So cookie is stored in
the cache of the browser. After that if request is sent by the user, cookie is added with request by default. Thus, we recognize the user as the old
user.
Types of Cookie
1. Non-persistent cookie
2. Persistent cookie
Non-persistent cookie
It is valid for single session only. It is removed each time when user closes the browser.
Persistent cookie
It is valid for multiple session . It is not removed each time when user closes the browser. It is removed only if user logout or signout.
Advantage of Cookies
Disadvantage of Cookies
Note: Gmail uses cookie technique for login. If you disable the cookie, gmail won't work.
Cookie class
javax.servlet.http.Cookie class provides the functionality of using cookies. It provides a lot of useful methods for cookies.
Constructor Description
Cookie(String name, String value) constructs a cookie with a specified name and value.
There are given some commonly used methods of the Cookie class.
Method Description
public void setMaxAge(int expiry) Sets the maximum age of the cookie in seconds.
public String getName() Returns the name of the cookie. The name cannot be changed after creation.
1. public void addCookie(Cookie ck):method of HttpServletResponse interface is used to add cookie in response object.
2. public Cookie[] getCookies():method of HttpServletRequest interface is used to return all the cookies from the browser.
Let's see the simple code to delete cookie. It is mainly used to logout or signout the user.
1. Cookie ck[]=request.getCookies();
2. for(int i=0;i<ck.length;i++){
3. out.print("<br>"+ck[i].getName()+" "+ck[i].getValue());//printing name and value of cookie
4. }
In this example, we are storing the name of the user in the cookie object and accessing it in another servlet. As we know well that session
corresponds to the particular user. So if you access it from too many browsers with different values, you will get the different value.
index.html
FirstServlet.java
1. import java.io.*;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4.
5.
6. public class FirstServlet extends HttpServlet {
7.
8. public void doPost(HttpServletRequest request, HttpServletResponse response){
9. try{
10.
11. response.setContentType("text/html");
12. PrintWriter out = response.getWriter();
13.
14. String n=request.getParameter("userName");
15. out.print("Welcome "+n);
16.
17. Cookie ck=new Cookie("uname",n);//creating cookie object
18. response.addCookie(ck);//adding cookie in the response
19.
20. //creating submit button
21. out.print("<form action='servlet2'>");
22. out.print("<input type='submit' value='go'>");
23. out.print("</form>");
24.
25. out.close();
26.
27. }catch(Exception e){System.out.println(e);}
28. }
29. }
SecondServlet.java
1. import java.io.*;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4.
5. public class SecondServlet extends HttpServlet {
6.
7. public void doPost(HttpServletRequest request, HttpServletResponse response){
8. try{
9.
10. response.setContentType("text/html");
11. PrintWriter out = response.getWriter();
12.
13. Cookie ck[]=request.getCookies();
14. out.print("Hello "+ck[0].getValue());
15.
16. out.close();
17.
18. }catch(Exception e){System.out.println(e);}
19. }
20.
21.
22. }
web.xml
1. <web-app>
2.
3. <servlet>
4. <servlet-name>s1</servlet-name>
5. <servlet-class>FirstServlet</servlet-class>
6. </servlet>
7.
8. <servlet-mapping>
9. <servlet-name>s1</servlet-name>
10. <url-pattern>/servlet1</url-pattern>
11. </servlet-mapping>
12.
13. <servlet>
14. <servlet-name>s2</servlet-name>
15. <servlet-class>SecondServlet</servlet-class>
16. </servlet>
17.
18. <servlet-mapping>
19. <servlet-name>s2</servlet-name>
20. <url-pattern>/servlet2</url-pattern>
21. </servlet-mapping>
22.
23. </web-app>
Output
Servlet Login and Logout Example using Cookies
A cookie is a kind of information that is stored at client side.
In the previous page, we learned a lot about cookie e.g. how to create cookie, how to delete cookie, how to get cookie etc.
Here, we are going to create a login and logout example using servlet cookies.
In this example, we are creating 3 links: login, logout and profile. User can't go to profile page until he/she is logged in. If user is logged out, he
need to login again to visit profile.
1. index.html
2. link.html
3. login.html
4. LoginServlet.java
5. LogoutServlet.java
6. ProfileServlet.java
7. web.xml
File: index.html
1. <!DOCTYPE html>
2. <html>
3. <head>
4. <meta charset="ISO-8859-1">
5. <title>Servlet Login Example</title>
6. </head>
7. <body>
8.
9. <h1>Welcome to Login App by Cookie</h1>
10. <a href="login.html">Login</a>|
11. <a href="LogoutServlet">Logout</a>|
12. <a href="ProfileServlet">Profile</a>
13.
14. </body>
15. </html>
File: link.html
1. <a href="login.html">Login</a> |
2. <a href="LogoutServlet">Logout</a> |
3. <a href="ProfileServlet">Profile</a>
4. <hr>
File: login.html
File: LoginServlet.java
1. package com.aptech;
2.
3. import java.io.IOException;
4. import java.io.PrintWriter;
5. import javax.servlet.ServletException;
6. import javax.servlet.http.Cookie;
7. import javax.servlet.http.HttpServlet;
8. import javax.servlet.http.HttpServletRequest;
9. import javax.servlet.http.HttpServletResponse;
10. public class LoginServlet extends HttpServlet {
11. protected void doPost(HttpServletRequest request, HttpServletResponse response)
12. throws ServletException, IOException {
13. response.setContentType("text/html");
14. PrintWriter out=response.getWriter();
15.
16. request.getRequestDispatcher("link.html").include(request, response);
17.
18. String name=request.getParameter("name");
19. String password=request.getParameter("password");
20.
21. if(password.equals("admin123")){
22. out.print("You are successfully logged in!");
23. out.print("<br>Welcome, "+name);
24.
25. Cookie ck=new Cookie("name",name);
26. response.addCookie(ck);
27. }else{
28. out.print("sorry, username or password error!");
29. request.getRequestDispatcher("login.html").include(request, response);
30. }
31.
32. out.close();
33. }
34.
35. }
File: LogoutServlet.java
1. package com.aptech;
2.
3. import java.io.IOException;
4. import java.io.PrintWriter;
5. import javax.servlet.ServletException;
6. import javax.servlet.http.Cookie;
7. import javax.servlet.http.HttpServlet;
8. import javax.servlet.http.HttpServletRequest;
9. import javax.servlet.http.HttpServletResponse;
10. public class LogoutServlet extends HttpServlet {
11. protected void doGet(HttpServletRequest request, HttpServletResponse response)
12. throws ServletException, IOException {
13. response.setContentType("text/html");
14. PrintWriter out=response.getWriter();
15.
16.
17. request.getRequestDispatcher("link.html").include(request, response);
18.
19. Cookie ck=new Cookie("name","");
20. ck.setMaxAge(0);
21. response.addCookie(ck);
22.
23. out.print("you are successfully logged out!");
24. }
25. }
File: ProfileServlet.java
1. package com.aptech;
2.
3. import java.io.IOException;
4. import java.io.PrintWriter;
5. import javax.servlet.ServletException;
6. import javax.servlet.http.Cookie;
7. import javax.servlet.http.HttpServlet;
8. import javax.servlet.http.HttpServletRequest;
9. import javax.servlet.http.HttpServletResponse;
10. public class ProfileServlet extends HttpServlet {
11. protected void doGet(HttpServletRequest request, HttpServletResponse response)
12. throws ServletException, IOException {
13. response.setContentType("text/html");
14. PrintWriter out=response.getWriter();
15.
16. request.getRequestDispatcher("link.html").include(request, response);
17.
18. Cookie ck[]=request.getCookies();
19. if(ck!=null){
20. String name=ck[0].getValue();
21. if(!name.equals("")||name!=null){
22. out.print("<b>Welcome to Profile</b>");
23. out.print("<br>Welcome, "+name);
24. }
25. }else{
26. out.print("Please login first");
27. request.getRequestDispatcher("login.html").include(request, response);
28. }
29. out.close();
30. }
31. }
File: web.xml
In case of Hidden Form Field a hidden (invisible) textfield is used for maintaining the state of an user.
In such case, we store the information in the hidden field and get it from another servlet. This approach is better if we have to submit form in all the
pages and we don't want to depend on the browser.
It is widely used in comment form of a website. In such case, we store page id or page name in the hidden field so that each page can be uniquely
identified.
In this example, we are storing the name of the user in a hidden textfield and getting that value from another servlet.
index.html
1. <form action="servlet1">
2. Name:<input type="text" name="userName"/><br/>
3. <input type="submit" value="go"/>
4. </form>
FirstServlet.java
1. import java.io.*;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4.
5. public class FirstServlet extends HttpServlet {
6. public void doGet(HttpServletRequest request, HttpServletResponse response){
7. try{
8.
9. response.setContentType("text/html");
10. PrintWriter out = response.getWriter();
11.
12. String n=request.getParameter("userName");
13. out.print("Welcome "+n);
14.
15. //creating form that have invisible textfield
16. out.print("<form action='servlet2'>");
17. out.print("<input type='hidden' name='uname' value='"+n+"'>");
18. out.print("<input type='submit' value='go'>");
19. out.print("</form>");
20. out.close();
21.
22. }catch(Exception e){System.out.println(e);}
23. }
24.
25. }
SecondServlet.java
1. import java.io.*;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4. public class SecondServlet extends HttpServlet {
5. public void doGet(HttpServletRequest request, HttpServletResponse response)
6. try{
7. response.setContentType("text/html");
8. PrintWriter out = response.getWriter();
9.
10. //Getting the value from the hidden field
11. String n=request.getParameter("uname");
12. out.print("Hello "+n);
13.
14. out.close();
15. }catch(Exception e){System.out.println(e);}
16. }
17. }
web.xml
1. <web-app>
2.
3. <servlet>
4. <servlet-name>s1</servlet-name>
5. <servlet-class>FirstServlet</servlet-class>
6. </servlet>
7.
8. <servlet-mapping>
9. <servlet-name>s1</servlet-name>
10. <url-pattern>/servlet1</url-pattern>
11. </servlet-mapping>
12.
13. <servlet>
14. <servlet-name>s2</servlet-name>
15. <servlet-class>SecondServlet</servlet-class>
16. </servlet>
17.
18. <servlet-mapping>
19. <servlet-name>s2</servlet-name>
20. <url-pattern>/servlet2</url-pattern>
21. </servlet-mapping>
22.
23. </web-app>
3)URL Rewriting
1. URL Rewriting
2. Advantage of URL Rewriting
3. Disadvantage of URL Rewriting
4. Example of URL Rewriting
In URL rewriting, we append a token or identifier to the URL of the next Servlet or the next resource. We can send parameter name/value pairs
using the following format:
url?name1=value1&name2=value2&??
A name and a value is separated using an equal = sign, a parameter name/value pair is separated from another parameter using the
ampersand(&). When the user clicks the hyperlink, the parameter name/value pairs will be passed to the server. From a Servlet, we can use
getParameter() method to obtain a parameter value.
index.html
1. <form action="servlet1">
2. Name:<input type="text" name="userName"/><br/>
3. <input type="submit" value="go"/>
4. </form>
FirstServlet.java
1. import java.io.*;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4.
5.
6. public class FirstServlet extends HttpServlet {
7.
8. public void doGet(HttpServletRequest request, HttpServletResponse response){
9. try{
10.
11. response.setContentType("text/html");
12. PrintWriter out = response.getWriter();
13.
14. String n=request.getParameter("userName");
15. out.print("Welcome "+n);
16.
17. //appending the username in the query string
18. out.print("<a href='servlet2?uname="+n+"'>visit</a>");
19.
20. out.close();
21.
22. }catch(Exception e){System.out.println(e);}
23. }
24.
25. }
SecondServlet.java
1. import java.io.*;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4.
5. public class SecondServlet extends HttpServlet {
6.
7. public void doGet(HttpServletRequest request, HttpServletResponse response)
8. try{
9.
10. response.setContentType("text/html");
11. PrintWriter out = response.getWriter();
12.
13. //getting value from the query string
14. String n=request.getParameter("uname");
15. out.print("Hello "+n);
16.
17. out.close();
18.
19. }catch(Exception e){System.out.println(e);}
20. }
21.
22.
23. }
web.xml
1. <web-app>
2.
3. <servlet>
4. <servlet-name>s1</servlet-name>
5. <servlet-class>FirstServlet</servlet-class>
6. </servlet>
7.
8. <servlet-mapping>
9. <servlet-name>s1</servlet-name>
10. <url-pattern>/servlet1</url-pattern>
11. </servlet-mapping>
12.
13. <servlet>
14. <servlet-name>s2</servlet-name>
15. <servlet-class>SecondServlet</servlet-class>
16. </servlet>
17.
18. <servlet-mapping>
19. <servlet-name>s2</servlet-name>
20. <url-pattern>/servlet2</url-pattern>
21. </servlet-mapping>
22.
23. </web-app>
4) HttpSession interface
1. HttpSession interface
2. How to get the HttpSession object
3. Commonly used methods of HttpSession interface
4. Example of using HttpSession
In such case, container creates a session id for each user.The container uses this id to identify the particular user.An object of HttpSession can be
used to perform two tasks:
1. bind objects
2. view and manipulate information about a session, such as the session identifier, creation time, and last accessed time.
How to get the HttpSession object ?
The HttpServletRequest interface provides two methods to get the object of HttpSession:
1. public HttpSession getSession():Returns the current session associated with this request, or if the request does not have a session,
creates one.
2. public HttpSession getSession(boolean create):Returns the current HttpSession associated with this request or, if there is no
current session and create is true, returns a new session.
2. public long getCreationTime():Returns the time when this session was created, measured in milliseconds since midnight January 1,
1970 GMT.
3. public long getLastAccessedTime():Returns the last time the client sent a request associated with this session, as the number of
milliseconds since midnight January 1, 1970 GMT.
4. public void invalidate():Invalidates this session then unbinds any objects bound to it.
In this example, we are setting the attribute in the session scope in one servlet and getting that value from the session scope in another servlet. To
set the attribute in the session scope, we have used the setAttribute() method of HttpSession interface and to get the attribute, we have used the
getAttribute method.
index.html
1. <form action="servlet1">
2. Name:<input type="text" name="userName"/><br/>
3. <input type="submit" value="go"/>
4. </form>
FirstServlet.java
1. import java.io.*;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4.
5.
6. public class FirstServlet extends HttpServlet {
7.
8. public void doGet(HttpServletRequest request, HttpServletResponse response){
9. try{
10.
11. response.setContentType("text/html");
12. PrintWriter out = response.getWriter();
13.
14. String n=request.getParameter("userName");
15. out.print("Welcome "+n);
16.
17. HttpSession session=request.getSession();
18. session.setAttribute("uname",n);
19.
20. out.print("<a href='servlet2'>visit</a>");
21.
22. out.close();
23.
24. }catch(Exception e){System.out.println(e);}
25. }
26.
27. }
SecondServlet.java
1. import java.io.*;
2. import javax.servlet.*;
3. import javax.servlet.http.*;
4.
5. public class SecondServlet extends HttpServlet {
6.
7. public void doGet(HttpServletRequest request, HttpServletResponse response)
8. try{
9.
10. response.setContentType("text/html");
11. PrintWriter out = response.getWriter();
12.
13. HttpSession session=request.getSession(false);
14. String n=(String)session.getAttribute("uname");
15. out.print("Hello "+n);
16.
17. out.close();
18.
19. }catch(Exception e){System.out.println(e);}
20. }
21.
22.
23. }
web.xml
1. <web-app>
2.
3. <servlet>
4. <servlet-name>s1</servlet-name>
5. <servlet-class>FirstServlet</servlet-class>
6. </servlet>
7.
8. <servlet-mapping>
9. <servlet-name>s1</servlet-name>
10. <url-pattern>/servlet1</url-pattern>
11. </servlet-mapping>
12.
13. <servlet>
14. <servlet-name>s2</servlet-name>
15. <servlet-class>SecondServlet</servlet-class>
16. </servlet>
17.
18. <servlet-mapping>
19. <servlet-name>s2</servlet-name>
20. <url-pattern>/servlet2</url-pattern>
21. </servlet-mapping>
22.
23. </web-app>
In the previous page, we have learnt about what is HttpSession, How to store and get data from session object etc.
Here, we are going to create a real world login and logout application without using database code. We are assuming that password is admin123.
Visit here for login and logout application using cookies only servlet login and logout example using cookies
In this example, we are creating 3 links: login, logout and profile. User can't go to profile page until he/she is logged in. If user is logged out, he
need to login again to visit profile.
1. index.html
2. link.html
3. login.html
4. LoginServlet.java
5. LogoutServlet.java
6. ProfileServlet.java
7. web.xml
File: index.html
1. <!DOCTYPE html>
2. <html>
3. <head>
4. <meta charset="ISO-8859-1">
5. <title>Servlet Login Example</title>
6. </head>
7. <body>
8.
9. <h1>Login App using HttpSession</h1>
10. <a href="login.html">Login</a>|
11. <a href="LogoutServlet">Logout</a>|
12. <a href="ProfileServlet">Profile</a>
13.
14. </body>
15. </html>
File: link.html
1. <a href="login.html">Login</a> |
2. <a href="LogoutServlet">Logout</a> |
3. <a href="ProfileServlet">Profile</a>
4. <hr>
File: login.html
File: LoginServlet.java
1. import java.io.IOException;
2. import java.io.PrintWriter;
3.
4. import javax.servlet.ServletException;
5. import javax.servlet.http.HttpServlet;
6. import javax.servlet.http.HttpServletRequest;
7. import javax.servlet.http.HttpServletResponse;
8. import javax.servlet.http.HttpSession;
9. public class LoginServlet extends HttpServlet {
10. protected void doPost(HttpServletRequest request, HttpServletResponse response)
11. throws ServletException, IOException {
12. response.setContentType("text/html");
13. PrintWriter out=response.getWriter();
14. request.getRequestDispatcher("link.html").include(request, response);
15.
16. String name=request.getParameter("name");
17. String password=request.getParameter("password");
18.
19. if(password.equals("admin123")){
20. out.print("Welcome, "+name);
21. HttpSession session=request.getSession();
22. session.setAttribute("name",name);
23. }
24. else{
25. out.print("Sorry, username or password error!");
26. request.getRequestDispatcher("login.html").include(request, response);
27. }
28. out.close();
29. }
30. }
File: LogoutServlet.java
1. import java.io.IOException;
2. import java.io.PrintWriter;
3.
4. import javax.servlet.ServletException;
5. import javax.servlet.http.HttpServlet;
6. import javax.servlet.http.HttpServletRequest;
7. import javax.servlet.http.HttpServletResponse;
8. import javax.servlet.http.HttpSession;
9. public class LogoutServlet extends HttpServlet {
10. protected void doGet(HttpServletRequest request, HttpServletResponse response)
11. throws ServletException, IOException {
12. response.setContentType("text/html");
13. PrintWriter out=response.getWriter();
14.
15. request.getRequestDispatcher("link.html").include(request, response);
16.
17. HttpSession session=request.getSession();
18. session.invalidate();
19.
20. out.print("You are successfully logged out!");
21.
22. out.close();
23. }
24. }
File: ProfileServlet.java
1. import java.io.IOException;
2. import java.io.PrintWriter;
3. import javax.servlet.ServletException;
4. import javax.servlet.http.HttpServlet;
5. import javax.servlet.http.HttpServletRequest;
6. import javax.servlet.http.HttpServletResponse;
7. import javax.servlet.http.HttpSession;
8. public class ProfileServlet extends HttpServlet {
9. protected void doGet(HttpServletRequest request, HttpServletResponse response)
10. throws ServletException, IOException {
11. response.setContentType("text/html");
12. PrintWriter out=response.getWriter();
13. request.getRequestDispatcher("link.html").include(request, response);
14.
15. HttpSession session=request.getSession(false);
16. if(session!=null){
17. String name=(String)session.getAttribute("name");
18.
19. out.print("Hello, "+name+" Welcome to Profile");
20. }
21. else{
22. out.print("Please login first");
23. request.getRequestDispatcher("login.html").include(request, response);
24. }
25. out.close();
26. }
27. }
File: web.xml
Events are basically occurrence of something. Changing the state of an object is known as an event.
We can perform some important tasks at the occurrence of these exceptions, such as counting total and current logged-in users, creating tables
of the database at time of deploying the project, creating database connection object etc.
There are many Event classes and Listener interfaces in the javax.servlet and javax.servlet.http packages.
Event classes
2. ServletContextEvent
3. ServletRequestAttributeEvent
4. ServletContextAttributeEvent
5. HttpSessionEvent
6. HttpSessionBindingEvent
Event interfaces
1. ServletRequestListener
2. ServletRequestAttributeListener
3. ServletContextListener
4. ServletContextAttributeListener
5. HttpSessionListener
6. HttpSessionAttributeListener
7. HttpSessionBindingListener
8. HttpSessionActivationListener
ServletContextEvent
HttpSessionEvent
ServletRequestEvent
ServletContext AttributeEvent
HttpSessionBindingEvent
ServletRequestAttributeEvent
It is mainly used to perform filtering tasks such as conversion, logging, compression, encryption and decryption, input validation etc.
The servlet filter is pluggable, i.e. its entry is defined in the web.xml file, if we remove the entry of filter from the web.xml file, filte r will be
removed automatically and we don't need to change the servlet.
Note: Unlike Servlet, One filter doesn't have dependency on another filter.
Usage of Filter
o logs the IP addresses of the computers from which the requests originate
o conversion
o data compression
Advantage of Filter
1. Filter is pluggable.
3. Less Maintenance
Filter API
Like servlet filter have its own API. The javax.servlet package contains the three interfaces of Filter API.
1. Filter
2. FilterChain
3. FilterConfig
1) Filter interface
For creating any filter, you must implement the Filter interface. Filter interface provides the life cycle methods for a filter.
Method Description
public void init(FilterConfig config) init() method is invoked only once. It is used to initialize the
filter.
public void doFilter(HttpServletRequest doFilter() method is invoked every time when user request to
request,HttpServletResponse response, FilterChain chain) any resource, to which the filter is mapped.It is used to perform
filtering tasks.
public void destroy() This is invoked only once when filter is taken out of the service.
2) FilterChain interface
The object of FilterChain is responsible to invoke the next filter or resource in the chain.This object is passed in the doFilter method of Filter
interface.The FilterChain interface contains only one method:
1. public void doFilter(HttpServletRequest request, HttpServletResponse response): it passes the control to the next filter or
resource.
We can define filter same as servlet. Let's see the elements of filter and filter-mapping.
1. <web-app>
2.
3. <filter>
4. <filter-name>...</filter-name>
5. <filter-class>...</filter-class>
6. </filter>
7.
8. <filter-mapping>
9. <filter-name>...</filter-name>
10. <url-pattern>...</url-pattern>
11. </filter-mapping>
12.
13. </web-app>
For mapping filter we can use, either url-pattern or servlet-name. The url-pattern elements has an advantage over servlet-name element i.e. it can
be applied on servlet, JSP or HTML.
In this example, we are simply displaying information that filter is invoked automatically after the post processing of the request.
index.html
MyFilter.java
1. import java.io.IOException;
2. import java.io.PrintWriter;
3.
4. import javax.servlet.*;
5.
6. public class MyFilter implements Filter{
7.
8. public void init(FilterConfig arg0) throws ServletException {}
9.
10. public void doFilter(ServletRequest req, ServletResponse resp,
11. FilterChain chain) throws IOException, ServletException {
12.
13. PrintWriter out=resp.getWriter();
14. out.print("filter is invoked before");
15.
16. chain.doFilter(req, resp);//sends request to next resource
17.
18. out.print("filter is invoked after");
19. }
20. public void destroy() {}
21. }
HelloServlet.java
1. import java.io.IOException;
2. import java.io.PrintWriter;
3.
4. import javax.servlet.ServletException;
5. import javax.servlet.http.*;
6.
7. public class HelloServlet extends HttpServlet {
8. public void doGet(HttpServletRequest request, HttpServletResponse response)
9. throws ServletException, IOException {
10.
11. response.setContentType("text/html");
12. PrintWriter out = response.getWriter();
13.
14. out.print("<br>welcome to servlet<br>");
15.
16. }
17.
18. }
web.xml
For defining the filter, filter element of web-app must be defined just like servlet.
1. <web-app>
2.
3. <servlet>
4. <servlet-name>s1</servlet-name>
5. <servlet-class>HelloServlet</servlet-class>
6. </servlet>
7.
8. <servlet-mapping>
9. <servlet-name>s1</servlet-name>
10. <url-pattern>/servlet1</url-pattern>
11. </servlet-mapping>
12.
13. <filter>
14. <filter-name>f1</filter-name>
15. <filter-class>MyFilter</filter-class>
16. </filter>
17.
18. <filter-mapping>
19. <filter-name>f1</filter-name>
20. <url-pattern>/servlet1</url-pattern>
21. </filter-mapping>
22.
23.
24. </web-app>
Authentication Filter
We can perform authentication in filter. Here, we are going to check to password given by the user in filter class, if given password is admin, it will
forward the request to the WelcomeAdmin servlet otherwise it will display error message.
o index.html
o MyFilter.java
o AdminServlet.java
o web.xml
index.html
1. <form action="servlet1">
2. Name:<input type="text" name="name"/><br/>
3. Password:<input type="password" name="password"/><br/>
4.
5. <input type="submit" value="login">
6.
7. </form>
MyFilter.java
1. import java.io.IOException;
2. import java.io.PrintWriter;
3. import javax.servlet.*;
4.
5. public class MyFilter implements Filter{
6.
7. public void init(FilterConfig arg0) throws ServletException {}
8.
9. public void doFilter(ServletRequest req, ServletResponse resp,
10. FilterChain chain) throws IOException, ServletException {
11.
12. PrintWriter out=resp.getWriter();
13.
14. String password=req.getParameter("password");
15. if(password.equals("admin")){
16. chain.doFilter(req, resp);//sends request to next resource
17. }
18. else{
19. out.print("username or password error!");
20. RequestDispatcher rd=req.getRequestDispatcher("index.html");
21. rd.include(req, resp);
22. }
23.
24. }
25. public void destroy() {}
26.
27. }
AdminServlet.java
1. import java.io.IOException;
2. import java.io.PrintWriter;
3.
4. import javax.servlet.ServletException;
5. import javax.servlet.http.*;
6.
7. public class AdminServlet extends HttpServlet {
8. public void doGet(HttpServletRequest request, HttpServletResponse response)
9. throws ServletException, IOException {
10.
11. response.setContentType("text/html");
12. PrintWriter out = response.getWriter();
13.
14. out.print("welcome ADMIN");
15. out.close();
16. }
17. }
web.xml
1. <web-app>
2. <servlet>
3. <servlet-name>AdminServlet</servlet-name>
4. <servlet-class>AdminServlet</servlet-class>
5. </servlet>
6.
7. <servlet-mapping>
8. <servlet-name>AdminServlet</servlet-name>
9. <url-pattern>/servlet1</url-pattern>
10. </servlet-mapping>
11.
12. <filter>
13. <filter-name>f1</filter-name>
14. <filter-class>MyFilter</filter-class>
15. </filter>
16. <filter-mapping>
17. <filter-name>f1</filter-name>
18. <url-pattern>/servlet1</url-pattern>
19. </filter-mapping>
20.
21. </web-app>
FilterConfig
An object of FilterConfig is created by the web container. This object can be used to get the configuration information from the web.xml file.
1. public void init(FilterConfig config): init() method is invoked only once it is used to initialize the filter.
2. public String getInitParameter(String parameterName): Returns the parameter value for the specified parameter name.
3. public java.util.Enumeration getInitParameterNames(): Returns an enumeration containing all the parameter names.
Example of FilterConfig
In this example, if you change the param-value to no, request will be forwarded to the servlet otherwise filter will create the response with the
message: this page is underprocessing. Let's see the simple example of FilterConfig. Here, we have created 4 files:
o index.html
o MyFilter.java
o HelloServlet.java
o web.xml
index.html
1. <a href="servlet1">click here</a>
MyFilter.java
1. import java.io.IOException;
2. import java.io.PrintWriter;
3.
4. import javax.servlet.*;
5.
6. public class MyFilter implements Filter{
7. FilterConfig config;
8.
9. public void init(FilterConfig config) throws ServletException {
10. this.config=config;
11. }
12.
13. public void doFilter(ServletRequest req, ServletResponse resp,
14. FilterChain chain) throws IOException, ServletException {
15.
16. PrintWriter out=resp.getWriter();
17.
18. String s=config.getInitParameter("construction");
19.
20. if(s.equals("yes")){
21. out.print("This page is under construction");
22. }
23. else{
24. chain.doFilter(req, resp);//sends request to next resource
25. }
26.
27. }
28. public void destroy() {}
29. }
HelloServlet.java
1. import java.io.IOException;
2. import java.io.PrintWriter;
3.
4. import javax.servlet.ServletException;
5. import javax.servlet.http.*;
6.
7. public class HelloServlet extends HttpServlet {
8. public void doGet(HttpServletRequest request, HttpServletResponse response)
9. throws ServletException, IOException {
10.
11. response.setContentType("text/html");
12. PrintWriter out = response.getWriter();
13.
14. out.print("<br>welcome to servlet<br>");
15.
16. }
17.
18. }
web.xml
1. <web-app>
2.
3. <servlet>
4. <servlet-name>HelloServlet</servlet-name>
5. <servlet-class>HelloServlet</servlet-class>
6. </servlet>
7.
8. <servlet-mapping>
9. <servlet-name>HelloServlet</servlet-name>
10. <url-pattern>/servlet1</url-pattern>
11. </servlet-mapping>
12.
13. <filter>
14. <filter-name>f1</filter-name>
15. <filter-class>MyFilter</filter-class>
16. <init-param>
17. <param-name>construction</param-name>
18. <param-value>no</param-value>
19. </init-param>
20. </filter>
21. <filter-mapping>
22. <filter-name>f1</filter-name>
23. <url-pattern>/servlet1</url-pattern>
24. </filter-mapping>
25.
26.
27. </web-app>
MyFilter.java
1. import java.io.*;
2. import javax.servlet.*;
3.
4. public class MyFilter implements Filter{
5. public void init(FilterConfig arg0) throws ServletException {}
6.
7. public void doFilter(ServletRequest req, ServletResponse res,
8. FilterChain chain) throws IOException, ServletException {
9.
10. PrintWriter out=res.getWriter();
11.
12. out.print("<br/>this site is underconstruction..");
13. out.close();
14.
15. }
16. public void destroy() {}
17. }
MyFilter.java
1. import java.io.*;
2. import javax.servlet.*;
3.
4. public class MyFilter implements Filter{
5. static int count=0;
6. public void init(FilterConfig arg0) throws ServletException {}
7.
8. public void doFilter(ServletRequest req, ServletResponse res,
9. FilterChain chain) throws IOException, ServletException {
10.
11. PrintWriter out=res.getWriter();
12. chain.doFilter(request,response);
13.
14. out.print("<br/>Total visitors "+(++count));
15. out.close();
16.
17. }
18. public void destroy() {}
19. }
Example of checking total response time in filter
MyFilter.java
1. import java.io.*;
2. import javax.servlet.*;
3.
4. public class MyFilter implements Filter{
5. static int count=0;
6. public void init(FilterConfig arg0) throws ServletException {}
7.
8. public void doFilter(ServletRequest req, ServletResponse res,
9. FilterChain chain) throws IOException, ServletException {
10.
11. PrintWriter out=res.getWriter();
12. long before=System.currentTimeMillis();
13.
14. chain.doFilter(request,response);
15.
16. long after=System.currentTimeMillis();
17. out.print("<br/>Total response time "+(after-before)+" miliseconds");
18. out.close();
19.
20. }
21. public void destroy() {}
22. }
ServletInputStream class
1. ServletInputStream class
2. Method of ServletInputStream class
ServletInputStream class provides stream to read binary data such as image etc. from the request object. It is an abstract class.
The getInputStream() method of ServletRequest interface returns the instance of ServletInputStream class. So can be get as:
1. ServletInputStream sin=request.getInputStream();
1. int readLine(byte[] b, int off, int len) it reads the input stream.
ServletOutputStream class
1. ServletOutputStream class
2. Methods of ServletOutputStream class
3. Example of ServletOutputStream class
ServletOutputStream class provides a stream to write binary data into the response. It is an abstract class.
The getOutputStream() method of ServletResponse interface returns the instance of ServletOutputStream class. It may be get as:
1. ServletOutputStream out=response.getOutputStream();
8. void println{}
Annotation represents the metadata. If you use annotation, deployment descriptor (web.xml file) is not required. But you should have tomcat7 as it
will not run in the previous versions of tomcat. @WebServlet annotation is used to map the servlet with the specified name.
Simple.java
1. import java.io.IOException;
2. import java.io.PrintWriter;
3.
4. import javax.servlet.ServletException;
5. import javax.servlet.annotation.WebServlet;
6. import javax.servlet.http.HttpServlet;
7. import javax.servlet.http.HttpServletRequest;
8. import javax.servlet.http.HttpServletResponse;
9.
10. @WebServlet("/Simple")
11. public class Simple extends HttpServlet {
12. private static final long serialVersionUID = 1L;
13.
14. protected void doGet(HttpServletRequest request, HttpServletResponse response)
15. throws ServletException, IOException {
16.
17.
18. response.setContentType("text/html");
19. PrintWriter out=response.getWriter();
20.
21. out.print("<html><body>");
22. out.print("<h3>Hello Servlet</h3>");
23. out.print("</body></html>");
24. }
25. }
SingleThreadModel interface
1. SingleThreadModel interface
This interface is currently deprecated since Servlet API 2.4 because it doesn't solves all
the thread-safety issues such as static variable and session attributes can be accessed
by multiple threads at the same time even if we have implemented the
SingleThreadModel interface. So it is recommended to use other means to resolve these
thread safety issues such as synchronized block etc.
1. import java.io.IOException;
2. import java.io.PrintWriter;
3. import javax.servlet.ServletException;
4. import javax.servlet.SingleThreadModel;
5. import javax.servlet.http.HttpServlet;
6. import javax.servlet.http.HttpServletRequest;
7. import javax.servlet.http.HttpServletResponse;
8.
9.
10. public class MyServlet extends HttpServlet implements SingleThreadModel{
11.
12. public void doGet(HttpServletRequest request, HttpServletResponse response)
13. throws ServletException, IOException {
14.
15. response.setContentType("text/html");
16. PrintWriter out = response.getWriter();
17.
18. out.print("welcome");
19. try{Thread.sleep(10000);}catch(Exception e){e.printStackTrace();}
20. out.print(" to servlet");
21.
22.
23. out.close();
24. }
25.
26. }
To create the registration page in servlet, we can separate the database logic from the servlet. But here, we are mixing the database logic in the
servlet only for simplicity of the program. We will develop this page in JSP following DAO, DTO and Singleton design pattern later.
o register.html
o Register.java
o web.xml
register.html
In this page, we have getting input from the user using text fields and combobox. The information entered by the user is forwarded to Register
servlet, which is responsible to store the data into the database.
1. <html>
2. <body>
3. <form action="servlet/Register" method="post">
4.
5. Name:<input type="text" name="userName"/><br/><br/>
6. Password:<input type="password" name="userPass"/><br/><br/>
7. Email Id:<input type="text" name="userEmail"/><br/><br/>
8. Country:
9. <select name="userCountry">
10. <option>India</option>
11. <option>Pakistan</option>
12. <option>other</option>
13. </select>
14.
15. <br/><br/>
16. <input type="submit" value="register"/>
17.
18. </form>
19. </body>
20. </html>
Register.java
This servlet class receives all the data entered by user and stores it into the database. Here, we are performing the database logic. But you may
separate it, which will be better for the web application.
1. import java.io.*;
2. import java.sql.*;
3. import javax.servlet.ServletException;
4. import javax.servlet.http.*;
5.
6. public class Register extends HttpServlet {
7. public void doPost(HttpServletRequest request, HttpServletResponse response)
8. throws ServletException, IOException {
9.
10. response.setContentType("text/html");
11. PrintWriter out = response.getWriter();
12.
13. String n=request.getParameter("userName");
14. String p=request.getParameter("userPass");
15. String e=request.getParameter("userEmail");
16. String c=request.getParameter("userCountry");
17.
18. try{
19. Class.forName("oracle.jdbc.driver.OracleDriver");
20. Connection con=DriverManager.getConnection(
21. "jdbc:oracle:thin:@localhost:1521:xe","system","oracle");
22.
23. PreparedStatement ps=con.prepareStatement(
24. "insert into registeruser values(?,?,?,?)");
25.
26. ps.setString(1,n);
27. ps.setString(2,p);
28. ps.setString(3,e);
29. ps.setString(4,c);
30.
31. int i=ps.executeUpdate();
32. if(i>0)
33. out.print("You are successfully registered...");
34.
35.
36. }catch (Exception e2) {System.out.println(e2);}
37.
38. out.close();
39. }
40.
41. }
web.xml file
We are assuming there are many records in this table. In this example, we are getting the data from the database in servlet and printing it. We are
doing all the database logic in servlet for simplicity of the program. But it will be better to separate it from the servlet file.
o index.html
o Search.java
o web.xml
index.html
This page gets rollno from the user and forwards this data to servlet which is responsible to show the records based on the given rollno.
1. <html>
2. <body>
3. <form action="servlet/Search">
4. Enter your Rollno:<input type="text" name="roll"/><br/>
5.
6. <input type="submit" value="search"/>
7. </form>
8. </body>
9. </html>
Search.java
This is the servlet file which gets the input from the user and maps this data with the database and prints the record for the matched data. In this
page, we are displaying the column name of the database along with data, so we are using ResultSetMetaData interface.
1. import java.io.*;
2. import java.sql.*;
3. import javax.servlet.ServletException;
4. import javax.servlet.http.*;
5.
6. public class Search extends HttpServlet {
7.
8. public void doGet(HttpServletRequest request, HttpServletResponse response)
9. throws ServletException, IOException {
10.
11. response.setContentType("text/html");
12. PrintWriter out = response.getWriter();
13.
14. String rollno=request.getParameter("roll");
15. int roll=Integer.valueOf(rollno);
16.
17. try{
18. Class.forName("oracle.jdbc.driver.OracleDriver");
19. Connection con=DriverManager.getConnection(
20. "jdbc:oracle:thin:@localhost:1521:xe","system","oracle");
21.
22. PreparedStatement ps=con.prepareStatement("select * from result where rollno=?");
23. ps.setInt(1,roll);
24.
25. out.print("<table width=50% border=1>");
26. out.print("<caption>Result:</caption>");
27.
28. ResultSet rs=ps.executeQuery();
29.
30. /* Printing column names */
31. ResultSetMetaData rsmd=rs.getMetaData();
32. int total=rsmd.getColumnCount();
33. out.print("<tr>");
34. for(int i=1;i<=total;i++)
35. {
36. out.print("<th>"+rsmd.getColumnName(i)+"</th>");
37. }
38.
39. out.print("</tr>");
40.
41. /* Printing result */
42.
43. while(rs.next())
44. {
45. out.print("<tr><td>"+rs.getInt(1)+"</td><td>"+rs.getString(2)+"
46. </td><td>"+rs.getString(3)+"</td><td>"+rs.getString(4)+"</td></tr>");
47.
48. }
49.
50. out.print("</table>");
51.
52. }catch (Exception e2) {e2.printStackTrace();}
53.
54. finally{out.close();}
55.
56. }
57. }
web.xml file
This is the configuration file which provides information of the servlet to the container.
1. <web-app>
2.
3. <servlet>
4. <servlet-name>Search</servlet-name>
5. <servlet-class>Search</servlet-class>
6. </servlet>
7.
8. <servlet-mapping>
9. <servlet-name>Search</servlet-name>
10. <url-pattern>/servlet/Search</url-pattern>
11. </servlet-mapping>
12.
13. </web-app>
To connect java application with the Oracle database ojdbc14.jar file is required to be loaded. Put this jar file in WEB-INF/lib folder.
To run this application, you need to create following table with some records.
1. index.html
2. User.java
3. MyListener.java
4. MyServlet1.java
5. MyServlet2.java
6. web.xml
1) index.html
This html file contains two links that sends request to the servlet.
2) User.java
This is simple bean class containing 3 properties with its getters and setters. This class represents the table of the database.
1. public class User {
2. private int id;
3. private String name,password;
4.
5. public int getId() {
6. return id;
7. }
8. public void setId(int id) {
9. this.id = id;
10. }
11. public String getName() {
12. return name;
13. }
14. public void setName(String name) {
15. this.name = name;
16. }
17. public String getPassword() {
18. return password;
19. }
20. public void setPassword(String password) {
21. this.password = password;
22. }
23.
24.
25. }
3) MyListener.java
It is the listener class. When the project will be deployed, contextInitialized method of ServletContextListener is invoked by default. Here, we are
getting the records of the table and storing it in the User class object which is added in the ArrayList class object. At last, all the records of the table
will be stored in the ArrayList class object (collection). Finally, we are storing the ArrayList object in the ServletConext object as an attribute so that
we can get it in the servlet and use it.
1. import javax.servlet.ServletContext;
2. import javax.servlet.ServletContextEvent;
3. import javax.servlet.ServletContextListener;
4. import java.sql.*;
5. import java.util.ArrayList;
6.
7. public class MyListener implements ServletContextListener{
8.
9. public void contextInitialized(ServletContextEvent e) {
10.
11. ArrayList list=new ArrayList();
12. try{
13. Class.forName("oracle.jdbc.driver.OracleDriver");
14. Connection con=DriverManager.getConnection(
15. "jdbc:oracle:thin:@localhost:1521:xe","system","oracle");
16.
17. PreparedStatement ps=con.prepareStatement("select * from csuser");
18. ResultSet rs=ps.executeQuery();
19. while(rs.next()){
20. User u=new User();
21. u.setId(rs.getInt(1));
22. u.setName(rs.getString(2));
23. u.setPassword(rs.getString(3));
24. list.add(u);
25. }
26. con.close();
27.
28. }catch(Exception ex){System.out.print(ex);}
29.
30. //storing the ArrayList object in ServletContext
31. ServletContext context=e.getServletContext();
32. context.setAttribute("data",list);
33.
34. }
35. public void contextDestroyed(ServletContextEvent arg0) {
36. System.out.println("project undeployed...");
37. }
38.
39. }
4) MyServlet1.java
This servlet gets the information from the servlet context object and prints it.
1. import java.io.IOException;
2. import java.io.PrintWriter;
3. import java.sql.Connection;
4. import java.sql.DriverManager;
5. import java.sql.PreparedStatement;
6. import java.sql.ResultSet;
7. import java.util.Iterator;
8. import java.util.List;
9.
10. import javax.servlet.ServletContext;
11. import javax.servlet.ServletException;
12. import javax.servlet.http.HttpServlet;
13. import javax.servlet.http.HttpServletRequest;
14. import javax.servlet.http.HttpServletResponse;
15.
16.
17. public class MyServlet1 extends HttpServlet {
18. public void doGet(HttpServletRequest request, HttpServletResponse
19. response)throws ServletException, IOException {
20.
21. response.setContentType("text/html");
22. PrintWriter out = response.getWriter();
23.
24. long before=System.currentTimeMillis();
25.
26. ServletContext context=getServletContext();
27. List list=(List)context.getAttribute("data");
28.
29. Iterator itr=list.iterator();
30. while(itr.hasNext()){
31. User u=(User)itr.next();
32. out.print("<br>"+u.getId()+" "+u.getName()+" "+u.getPassword());
33. }
34.
35. long after=System.currentTimeMillis();
36. out.print("<br>total time :"+(after-before));
37.
38. out.close();
39. }
40.
41. }
5) MyServlet2.java
It is same as MyServlet1. This servlet gets the information from the servlet context object and prints it.
1. import java.io.IOException;
2. import java.io.PrintWriter;
3. import java.sql.Connection;
4. import java.sql.DriverManager;
5. import java.sql.PreparedStatement;
6. import java.sql.ResultSet;
7. import java.util.Iterator;
8. import java.util.List;
9.
10. import javax.servlet.ServletContext;
11. import javax.servlet.ServletException;
12. import javax.servlet.http.HttpServlet;
13. import javax.servlet.http.HttpServletRequest;
14. import javax.servlet.http.HttpServletResponse;
15.
16.
17. public class MyServlet2 extends HttpServlet {
18. public void doGet(HttpServletRequest request, HttpServletResponse
19. response)throws ServletException, IOException {
20.
21. response.setContentType("text/html");
22. PrintWriter out = response.getWriter();
23.
24. long before=System.currentTimeMillis();
25.
26. ServletContext context=getServletContext();
27. List list=(List)context.getAttribute("data");
28.
29. Iterator itr=list.iterator();
30. while(itr.hasNext()){
31. User u=(User)itr.next();
32. out.print("<br>"+u.getId()+" "+u.getName()+" "+u.getPassword());
33. }
34.
35. long after=System.currentTimeMillis();
36. out.print("<br>total time :"+(after-before));
37.
38. out.close();
39. }
40.
41. }
6) web.xml
index.html
1. <html>
2. <body>
3. <form action="go" method="post" enctype="multipart/form-data">
4. Select File:<input type="file" name="fname"/><br/>
5. <input type="submit" value="upload"/>
6. </form>
7. </body>
8. </html>
Now, for uploading a file to the server, there can be various ways. But, I am going to use MultipartRequest class provided by oreilly. For using this
class you must have cos.jar file. If you will download this example, we will the cos.jar file alongwith code.
UploadServlet.java
1. import java.io.*;
2. import javax.servlet.ServletException;
3. import javax.servlet.http.*;
4. import com.oreilly.servlet.MultipartRequest;
5.
6. public class UploadServlet extends HttpServlet {
7.
8. public void doPost(HttpServletRequest request, HttpServletResponse response)
9. throws ServletException, IOException {
10.
11. response.setContentType("text/html");
12. PrintWriter out = response.getWriter();
13.
14. MultipartRequest m=new MultipartRequest(request,"d:/new");
15. out.print("successfully uploaded");
16. }
17. }
There are two arguments passed in MultipartRequest class constructor, first one is HttpServletRequest object and second one is Stri ng object (for
location). Here I am supposing that you have new folder in D driver.
web.xml file
1. <web-app>
2.
3. <servlet>
4. <servlet-name>UploadServlet</servlet-name>
5. <servlet-class>UploadServlet</servlet-class>
6. </servlet>
7.
8. <servlet-mapping>
9. <servlet-name>UploadServlet</servlet-name>
10. <url-pattern>/go</url-pattern>
11. </servlet-mapping>
12.
13. </web-app>
o index.html
o DownloadServlet.java
o web.xml
index.html
DownloadServlet.java
This is the servlet file that reads the content of the file and writes it into the stream to send as a response. For this purpose, we need to inform the
server, so we are setting the content type as APPLICATION/OCTET-STREAM .
1. import java.io.*;
2. import javax.servlet.ServletException;
3. import javax.servlet.http.*;
4.
5. public class DownloadServlet extends HttpServlet {
6.
7. public void doGet(HttpServletRequest request, HttpServletResponse response)
8. throws ServletException, IOException {
9.
10. response.setContentType("text/html");
11. PrintWriter out = response.getWriter();
12. String filename = "home.jsp";
13. String filepath = "e:\\";
14. response.setContentType("APPLICATION/OCTET-STREAM");
15. response.setHeader("Content-Disposition","attachment; filename=\"" + filename + "\"");
16.
17. FileInputStream fileInputStream = new FileInputStream(filepath + filename);
18.
19. int i;
20. while ((i=fileInputStream.read()) != -1) {
21. out.write(i);
22. }
23. fileInputStream.close();
24. out.close();
25. }
26.
27. }
web.xml file
This configuration file provides informations to the server about the servlet.
1. <web-app>
2.
3. <servlet>
4. <servlet-name>DownloadServlet</servlet-name>
5. <servlet-class>DownloadServlet</servlet-class>
6. </servlet>
7.
8. <servlet-mapping>
9. <servlet-name>DownloadServlet</servlet-name>
10. <url-pattern>/servlet/DownloadServlet</url-pattern>
11. </servlet-mapping>
12.
13. </web-app>
For better understanding of this example click steps for sending email from javamail api
For sending the email using JavaMail API, you need to load the two jar files:
o mail.jar
o activation.jar
download these jar files or go to the Oracle site to download the latest version.
Here is the simple example of sending email from servlet. For this example we are creating 3 files:
o SendMail.java , a servlet file for handling the request and providing the response to the user. It uses the send method of Mailer class to
send the email.
o Mailer.java , a java class that contains send method to send the emails to the mentioned recipient.
index.html
1. <form action="servlet/SendMail">
2. To:<input type="text" name="to"/><br/>
3. Subject:<input type="text" name="subject"><br/>
4. Text:<textarea rows="10" cols="70" name="msg"></textarea><br/>
5. <input type="submit" value="send"/>
6. </form>
SendMail.java
1. import java.io.IOException;
2. import java.io.PrintWriter;
3.
4. import javax.servlet.ServletException;
5. import javax.servlet.http.HttpServlet;
6. import javax.servlet.http.HttpServletRequest;
7. import javax.servlet.http.HttpServletResponse;
8.
9.
10. public class SendMail extends HttpServlet {
11. public void doGet(HttpServletRequest request,
12. HttpServletResponse response)
13. throws ServletException, IOException {
14.
15. response.setContentType("text/html");
16. PrintWriter out = response.getWriter();
17.
18. String to=request.getParameter("to");
19. String subject=request.getParameter("subject");
20. String msg=request.getParameter("msg");
21.
22. Mailer.send(to, subject, msg);
23. out.print("message has been sent successfully");
24. out.close();
25. }
26.
27. }
Mailer.java
1. import java.util.Properties;
2.
3. import javax.mail.*;
4. import javax.mail.internet.InternetAddress;
5. import javax.mail.internet.MimeMessage;
6.
7. public class Mailer {
8. public static void send(String to,String subject,String msg){
9.
10. final String user="[email protected]";//change accordingly
11. final String pass="xxxxx";
12.
13. //1st step) Get the session object
14. Properties props = new Properties();
15. props.put("mail.smtp.host", "mail.aptech.com");//change accordingly
16. props.put("mail.smtp.auth", "true");
17.
18. Session session = Session.getDefaultInstance(props,
19. new javax.mail.Authenticator() {
20. protected PasswordAuthentication getPasswordAuthentication() {
21. return new PasswordAuthentication(user,pass);
22. }
23. });
24. //2nd step)compose message
25. try {
26. MimeMessage message = new MimeMessage(session);
27. message.setFrom(new InternetAddress(user));
28. message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
29. message.setSubject(subject);
30. message.setText(msg);
31.
32. //3rd step)send message
33. Transport.send(message);
34.
35. System.out.println("Done");
36.
37. } catch (MessagingException e) {
38. throw new RuntimeException(e);
39. }
40.
41. }
42. }
To create such application, you need to have the spdf.jar file. If you download this example, you will get the example with jar file.
Example to write data into PDF using servlet
Let's see the simple example of writing data into PDF using servlet. In this example, we have mentioned the content type application/pdf that must
be specified to display data in the PDF format.
ServletPDF.java
1. package com.aptech;
2. import java.io.*;
3. import java.util.*;
4. import javax.servlet.*;
5. import javax.servlet.http.*;
6. import com.darwinsys.spdf.PDF;
7. import com.darwinsys.spdf.Page;
8. import com.darwinsys.spdf.Text;
9. import com.darwinsys.spdf.MoveTo;
10.
11. public class ServletPDF extends HttpServlet {
12.
13. public void doGet(HttpServletRequest request,
14. HttpServletResponse response) throws IOException {
15.
16. PrintWriter out = response.getWriter();
17. response.setContentType("application/pdf");
18.
19. response.setHeader("Content-disposition","inline; filename='aptech.pdf'");
20.
21. PDF p = new PDF(out);
22. Page p1 = new Page(p);
23. p1.add(new MoveTo(p, 200, 700));
24. p1.add(new Text(p, "www.aptech.com"));
25. p1.add(new Text(p, "by Sonoo Jaiswal"));
26.
27. p.add(p1);
28. p.setAuthor("Ian F. Darwin");
29.
30. p.writePDF();
31.
32. }
33. }
o index.html
o FirstServlet.java
o LoginDao.java
o SecondServlet.java
o web.xml
You must need to create a table userreg with name and pass fields. Moreover, it must have contained some data. The table should be as:
index.html
1. <form action="servlet1" method="post">
2. Name:<input type="text" name="username"/><br/><br/>
3. Password:<input type="password" name="userpass"/><br/><br/>
4. <input type="submit" value="login"/>
5. </form>
FirstServlet.java
1. import java.io.IOException;
2. import java.io.PrintWriter;
3.
4. import javax.servlet.RequestDispatcher;
5. import javax.servlet.ServletException;
6. import javax.servlet.http.HttpServlet;
7. import javax.servlet.http.HttpServletRequest;
8. import javax.servlet.http.HttpServletResponse;
9.
10.
11. public class FirstServlet extends HttpServlet {
12. public void doPost(HttpServletRequest request, HttpServletResponse response)
13. throws ServletException, IOException {
14.
15. response.setContentType("text/html");
16. PrintWriter out = response.getWriter();
17.
18. String n=request.getParameter("username");
19. String p=request.getParameter("userpass");
20.
21. if(LoginDao.validate(n, p)){
22. RequestDispatcher rd=request.getRequestDispatcher("servlet2");
23. rd.forward(request,response);
24. }
25. else{
26. out.print("Sorry username or password error");
27. RequestDispatcher rd=request.getRequestDispatcher("index.html");
28. rd.include(request,response);
29. }
30.
31. out.close();
32. }
33. }
LoginDao.java
1. import java.sql.*;
2.
3. public class LoginDao {
4. public static boolean validate(String name,String pass){
5. boolean status=false;
6. try{
7. Class.forName("oracle.jdbc.driver.OracleDriver");
8. Connection con=DriverManager.getConnection(
9. "jdbc:oracle:thin:@localhost:1521:xe","system","oracle");
10.
11. PreparedStatement ps=con.prepareStatement(
12. "select * from userreg where name=? and pass=?");
13. ps.setString(1,name);
14. ps.setString(2,pass);
15.
16. ResultSet rs=ps.executeQuery();
17. status=rs.next();
18.
19. }catch(Exception e){System.out.println(e);}
20. return status;
21. }
22. }
WelcomeServlet.java
1. import java.io.IOException;
2. import java.io.PrintWriter;
3.
4. import javax.servlet.ServletException;
5. import javax.servlet.http.HttpServlet;
6. import javax.servlet.http.HttpServletRequest;
7. import javax.servlet.http.HttpServletResponse;
8.
9. public class WelcomeServlet extends HttpServlet {
10. public void doPost(HttpServletRequest request, HttpServletResponse response)
11. throws ServletException, IOException {
12.
13. response.setContentType("text/html");
14. PrintWriter out = response.getWriter();
15.
16. String n=request.getParameter("username");
17. out.print("Welcome "+n);
18.
19. out.close();
20. }
21.
22. }
In this example, we are assuming that you have java.jpg image inside the c:\test directory. You may change the location accordingly.
1. index.html
2. DisplayImage.java
3. web.xml
index.html
This file creates a link that invokes the servlet. The url-pattern of the servlet is servlet1.
DisplayImage.java
This servlet class reads the image from the mentioned directory and writes the content in the response object using ServletOutputStream and
BufferedOutputStream classes.
1. package com.aptech;
2. import java.io.*;
3. import javax.servlet.*;
4. import javax.servlet.http.*;
5. public class DisplayImage extends HttpServlet {
6.
7. public void doGet(HttpServletRequest request,HttpServletResponse response)
8. throws IOException
9. {
10. response.setContentType("image/jpeg");
11. ServletOutputStream out;
12. out = response.getOutputStream();
13. FileInputStream fin = new FileInputStream("c:\\test\\java.jpg");
14.
15. BufferedInputStream bin = new BufferedInputStream(fin);
16. BufferedOutputStream bout = new BufferedOutputStream(out);
17. int ch =0; ;
18. while((ch=bin.read())!=-1)
19. {
20. bout.write(ch);
21. }
22.
23. bin.close();
24. fin.close();
25. bout.close();
26. out.close();
27. }
28. }