Servlets - Life Cycle
A servlet life cycle can be
defined as the entire process from its creation till the destruction. The
following are the paths followed by a servlet
·
The servlet is initialized by calling the init () method.
·
The servlet calls service() method to process a client's request.
·
The servlet is terminated by calling the destroy() method.
·
Finally, servlet is garbage collected by the garbage collector of
the JVM.
Now let us discuss the life cycle
methods in details.
The init() method :
The init method is designed to be
called only once. It is called when the servlet is first created, and not
called again for each user request. So, it is used for one-time
initializations, just as with the init method of applets.
The servlet is normally created
when a user first invokes a URL corresponding to the servlet, but you can also
specify that the servlet be loaded when the server is first started.
When a user invokes a servlet, a
single instance of each servlet gets created, with each user request resulting
in a new thread that is handed off to doGet or doPost as appropriate. The
init() method simply creates or loads some data that will be used throughout
the life of the servlet.
The init method definition looks
like this:
public void init() throws ServletException {
// Initialization code...
}
The service() method :
The service() method is the main
method to perform the actual task. The servlet container (i.e. web server)
calls the service() method to handle requests coming from the client( browsers)
and to write the formatted response back to the client.
Each time the server receives a
request for a servlet, the server spawns a new thread and calls service. The
service() method checks the HTTP request type (GET, POST, PUT, DELETE, etc.)
and calls doGet, doPost, doPut, doDelete, etc. methods as appropriate.
Here is the signature of this
method:
public void service(ServletRequest request,
ServletResponse response)
throws ServletException, IOException{
}
The service () method is called
by the container and service method invokes doGe, doPost, doPut, doDelete, etc.
methods as appropriate. So you have nothing to do with service() method but you
override either doGet() or doPost() depending on what type of request you
receive from the client.
The doGet() and doPost() are most
frequently used methods with in each service request. Here is the signature of
these two methods.
The doGet() Method
A GET request results from a
normal request for a URL or from an HTML form that has no METHOD specified and
it should be handled by doGet() method.
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Servlet code
}
The doPost() Method
A POST request results from an
HTML form that specifically lists POST as the METHOD and it should be handled
by doPost() method.
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Servlet code
}
The destroy() method :
The destroy() method is called
only once at the end of the life cycle of a servlet. This method gives your
servlet a chance to close database connections, halt background threads, write
cookie lists or hit counts to disk, and perform other such cleanup activities.
After the destroy() method is
called, the servlet object is marked for garbage collection. The destroy method
definition looks like this:
public void destroy() {
// Finalization code...
}
Architecture Digram:
The following figure depicts a
typical servlet life-cycle scenario.
·
First the HTTP requests coming to the server are delegated to the
servlet container.
·
The servlet container loads the servlet before invoking the
service() method.
·
Then the servlet container handles multiple requests by spawning
multiple threads, each thread executing the service() method of a single
instance of the servlet.
Servlets - Examples
Servlets are Java classes which
service HTTP requests and implement thejavax.servlet.Servlet interface. Web application developers
typically write servlets that extend javax.servlet.http.HttpServlet, an
abstract class that implements the Servlet interface and is specially designed
to handle HTTP requests.
Sample Code for Hello
World:
Following is the sample source
code structure of a servlet example to write Hello World:
// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
// Extend HttpServlet class
public class HelloWorld extends HttpServlet {
private String message;
public void init() throws ServletException
{
// Do required initialization
message = "Hello World";
}
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// Set response content type
response.setContentType("text/html");
// Actual logic goes here.
PrintWriter out = response.getWriter();
out.println("<h1>" + message + "</h1>");
}
public void destroy()
{
// do nothing.
}
}
Compiling a Servlet:
Let us put above code if
HelloWorld.java file and put this file in C:\ServletDevel (Windows) or
/usr/ServletDevel (Unix) then you would need to add these directories as well
in CLASSPATH.
Assuming your environment is
setup properly, go in ServletDevel directory and compile HelloWorld.java as
follows:
$ javac HelloWorld.java
If the servlet depends on any
other libraries, you have to include those JAR files on your CLASSPATH as well.
I have included only servlet-api.jar JAR file because I'm not using any other
library in Hello World program.
This command line uses the
built-in javac compiler that comes with the Sun Microsystems Java Software
Development Kit (JDK). For this command to work properly, you have to include
the location of the Java SDK that you are using in the PATH environment
variable.
If everything goes fine, above
compilation would produce HelloWorld.class file in the same directory. Next section
would explain how a compiled servlet would be deployed in production.
Servlet Deployment:
By default, a servlet application
is located at the path <Tomcat-installation-directory>/webapps/ROOT and
the class file would reside in <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes.
If you have a fully qualified
class name of com.myorg.MyServlet, then
this servlet class must be located in
WEB-INF/classes/com/myorg/MyServlet.class.
For now, let us copy
HelloWorld.class into <Tomcat-installation-directory>/webapps/ROOT/WEB-INF/classes
and create following entries in web.xml file located in
<Tomcat-installation-directory>/webapps/ROOT/WEB-INF/
<servlet>
<servlet-name>HelloWorld</servlet-name>
<servlet-class>HelloWorld</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorld</servlet-name>
<url-pattern>/HelloWorld</url-pattern>
</servlet-mapping>
Above entries to be created
inside <web-app>...</web-app> tags available in web.xml file. There
could be various entries in this table already available, but never mind.
You are almost done, now let us
start tomcat server using <Tomcat-installation-directory>\bin\startup.bat
(on windows) or <Tomcat-installation-directory>/bin/startup.sh (on
Linux/Solaris etc.) and finally type http://localhost:8080/HelloWorld in browser's address box. If everything goes
fine, you would get following result:

No comments:
Post a Comment