Java Servelets - IT Knowledge Base

indexadjustmentInternet και Εφαρμογές Web

13 Νοε 2013 (πριν από 3 χρόνια και 9 μήνες)

41 εμφανίσεις

Java Servelets


A servlet is a server side software
component, written in java that
dynamically extends the functionality of a
server.


Unlike applets servlets don’t display GUI.


It works behind the scene on server and
results of servlet’s processing are returned
to the client.

What Is a Servlet?



A
servlet

is a Java programming language class
used to extend the capabilities of servers that
host applications accessed via a request
-
response programming model.


Although servlets can respond to any type of
request, they are commonly used to extend the
applications hosted by Web servers.


For such applications, Java Servlet technology
defines HTTP
-
specific servlet classes.


A servlet is an instance of a class that implements the
java.servlet.Servlet interface.


The
javax.servlet

and
javax.servlet.http

packages
provide interfaces and classes for writing servlets.


All servlets must implement the
Servlet

interface, which
defines life
-
cycle methods.


When implementing a generic service, you can use or
extend the
GenericServlet

class provided with the Java
Servlet API.


The
HttpServlet

class provides methods, such as doGet
and doPost, for handling HTTP
-
specific services.



javax.servlet.GenericServlet

Signature: public abstract class GenericServlet extends
java.lang.Object implements Servlet, ServletConfig,
java.io.Serializable


GenericServlet defines a generic, protocol
-
independent servlet.


GenericServlet gives a blueprint and makes writing servlet easier.


GenericServlet provides simple versions of the lifecycle methods init
and destroy and of the methods in the ServletConfig interface.


GenericServlet implements the log method, declared in the
ServletContext interface.


To write a generic servlet, it is sufficient to override the abstract
service method.


javax.servlet.http.HttpServlet

Signature: public abstract class HttpServlet
extends GenericServlet implements
java.io.Serializable


HttpServlet defines a HTTP protocol specific
servlet.


HttpServlet gives a blueprint for Http servlet and
makes writing them easier.


HttpServlet extends the GenericServlet and
hence inherits the properties GenericServlet.



Advantages


Capable of running in same process space as the web
server.


Compiled.


Crash resistant


Cross platform


Durable


Dynamically loaded across the network


Extensible


Multithreaded


Protocol independent


Written in java


Functions


Dynamically build and return an HTML file
based on client request.


Process user input of HTML Form and
return appropriate response.


Facilitate communication among many
clients.


Interact with server resources like
database, other application.


Multiplayer games.


HTTP Request Structure


It is a stateless protocol.


Server does not have the overhead of
tracking client connections.


HTTP transactions are either a request or
response.


Servlet can overcome the stateless nature
of HTTP by tracking client state using
session information stored in URL, hidden
fields or cookies.

3 parts of HTTP transactions


A single request or response line


<HTTP Method>/<document address>HTTP/
<Version No> e.g.


GET /index.html HTTP/1.1


Response line contains an HTTP status code.

HTTP/1.1 200 OK

Date:……………………….GMT

Server:

Last
-
modified:

Content
-
type: text/html

Content
-
length:….bytes



501 error is generated by the server when
a servlet is sent an HTTP request that it
does not handle. E.g. if you write your
servlet to handle only GET requests, but it
receives a POST request, a 501 status will
return.


HTTP headers


A set of fields used to exchange information between
client and server.


Client uses the headers to tell the server about its
configuration and the document types it’ll accept.


Server uses the header to return information about
the requested document.


HTTP Body


Optionally used by client to send any additional
information.


The server uses the body to return the requested
document.


HTTP Methods


GET is used to request information from server.


POST is used to send data to the server.


GET can also be used to pass information in
form of query string in URL and POST can be
used for request.


Information sent as GET is visible to the client
and append at URL.


POST sends data directly after the header, in
body of message and doesn’t append at URL.


HEAD


If client wants information about a document but
does not want the document to be returned.


PUT


Requests to server to store the body at a specified
URL


DELETE


Requests the removal of data at URL


TRACE


Used for debugging. The HTTP body is simply
returned by the server.

Servlet Environement


The web server provides support for servlets
with extensions called servlet containers.


Servlet Containers Functions:


Network services over which request / response are
sent.


Registers the servlet against one or more URL


Manage servlet life cycle


Decodes MIME (Multipurpose Internet Mail
Extensions) requests


Constructs MIME response


Support HTTP protocol


Enforce security restrictions on environment.

Advantage of Servlets Over
CGI



Java servlets are more efficient, easier to use, more powerful, more portable, and
cheaper than traditional CGI and than many alternative CGI
-
like technologies. (More
importantly, servlet developers get paid more than Perl programmers :
-
).


Efficient.



With traditional CGI, a new process is started for each HTTP request.


If the CGI program does a relatively fast operation, the overhead of starting the process can
dominate the execution time.


With servlets, the Java Virtual Machine stays up, and each request is handled by a
lightweight Java thread, not a heavyweight operating system process.


Similarly, in traditional CGI, if there are
N

simultaneous request to the same CGI program,
then the code for the CGI program is loaded into memory N times.


With servlets, however, there are
N

threads but only a single copy of the servlet class.
Servlets also have more alternatives than do regular CGI programs for optimizations such as
caching previous computations, keeping database connections open, and the like.


Convenient.



You already know Java.


Why learn Perl too? Besides the convenience of being able to use a familiar language,
servlets have an extensive infrastructure for automatically parsing and decoding HTML form
data, reading and setting HTTP headers, handling cookies, tracking sessions, and many
other such utilities.


Powerful.



Java servlets let you easily do several things that are difficult or impossible with regular CGI.


For one thing, servlets can talk directly to the Web server (regular CGI programs can't).


This simplifies operations that need to look up images and other data stored in standard
places.


Servlets can also share data among each other, making useful things like database
connection pools easy to implement.


They can also maintain information from request to request, simplifying things like session
tracking and caching of previous computations.


Portable.



Servlets are written in Java and follow a well
-
standardized API.


Consequently, servlets written for, say I
-
Planet Enterprise Server can run virtually
unchanged on Apache, Microsoft IIS, or WebStar.


Servlets are supported directly or via a plugin on almost every major Web server.


Inexpensive.



There are a number of free or very inexpensive Web servers available that are good for
"personal" use or low
-
volume Web sites.


However, with the major exception of Apache, which is free, most commercial
-
quality Web
servers are relatively expensive.


Nevertheless, once you have a Web server, no matter the cost of that server, adding servlet
support to it (if it doesn't come preconfigured to support servlets) is generally free or cheap



Servlet API


It doesn’t run as an application rather it is loaded in
memory and as instance is created.


When a servlet instance is created its init() is called.


Servlets are required to respond to new connections to
the server.


When a new connection is detected, a call is made to
the service() of the servlet.


service() takes two parameters defined by interface type
called ServletRequest and ServletResponse.


Servlet class is abstract because service() is defined not
implemented; so to implement a servlet, it is necessary
to override this method.


Servlet class is not protocol specific.


A subclass of Servlet class, the HttpServlet class
is provided to handle http protocol.


Two interfaces are defined for use with
HttpServlet class


HttpServletRequest


HttpServletResponse


These extend the ServletRequest &
ServletResponse.

Life Cycle of Servlet


Servlet life cycle is defined by
javax.servlet.Servlet inteface.


All servlets must implement
javax.servlet.Servlet interface to run in a
servlet engine.


Servlet Class

Instantiation & loading

Servlet engine can

instantiate more than one

servlet instance

Initialization

init(ServletConfig conf)

Ready

service()

A service() executes

for each servlet instance


Destruction

destroy()

Garbage Collection

Server no longer

has a reference to

the object

Servlet


init()


destroy()


getServletConfig()


getServletInfo()


service()

GenericServlet


init()


distroy()


log()


getServletConfig()


getServletContext()


getInitParameter()


getInitParameterNames()


getServletInfo()


getServletName()


service()

HTTPServlet


doGet()


doPost()


doHead()


doDelete()


doOptions()


doPut()


doTrace()


getLastModified()


service()

Creating servlets


protected void service(HttpServletRequest
req, HttpServletResponse resp) throws
ServletException, IOException


Standard HTTP requests like Get and Post
are supported by doGet() and doPost().


HttpServletRequest


getMethod()


Returns get/post with which request was made.


getQueryString()


getRemoteUser()


getRequestSessionId()


getSession(boolean)


If FALSE returns current valid session otherwise
creates a new session.


isRequestedSessionIdValid()


getCookies()

HttpServletResponse


addCookie(Cookie)


Add cookie to response


encodeUrl(String)


sendRedirect(String)


sendError(int)

Servlet Context


The javax.servlet.ServletContext interface
provides a set of methods that the servlet
can use to communicate with the web
server.


The ServletContext object is contained
within javax.servlet.ServletConfig Object
which is provided to the servlet when it is
initialized.

Functions of ServletContext Object


Set and store attributes that other servlets in the
context can access.


Log events


Obtain URL references to resources.


Get values assigned to initialization parameters.


Get the MIME types of files.


Obtain information about the servlet container
such as its name and version.


A servlet context is associated with a web
application and shared by all the servlets within
that application.

Web Application Files and Directory
Structure


Each web application has a root called the context path.


No two applications, in the same Web Server, can have
the same context path because this would cause URL
conflicts.


Document root is a special directory called WEB
-
INF.


Contents of WEB
-
INF are
-


Web.xml file web application deployment descriptor


/classes directory


/lib directory storage area for JAR file


/tags directory used to store tag libraries


There may be META
-
INF directory that contains
implementation
-
specific deployment descriptor
and WSDL (Web Service Definition Language)
directory.


/META
-
INF/MANIFEST.MF


/WEB
-
INF/classes/HTMLPage.class


/WEB
-
INF/classes/VerifyData.class


/WEB
-
INF/Web.xml


/WEB
-
INF/sun
-
Web.xml


/index.html




Handling Errors


HTTP Errors


XML error
-
page tag can be used

<error
-
page>


<error
-
code>404</error
-
code>


<location>/examples/error404.html</location>

</error
-
page>


On error, the servlet can use either of the following method to
set HTTP status code:


public void HttpServletResponse.sendError(int sc)


public void HttpServletResponse.sendError(int sc,String msg)


On error servlet can be redirected to another URL


HttpServletResponse.sendRedirect(String location)



Servlet Exceptions


Catch all servlet generated exceptions in servlet
and take actions accordingly.


When a fatal error is generated an error
message can be displayed

Catch(RemoteException e){

Res.sendError(503,”Internal Error”);

Res.sendRedirect(“/example/ReportErrorPage”);

}


During initialization or while handling requests the
servlet instance can throw an UnavailableException or
ServletException.

Cookie Class


Cookie used for session management with HTTP
and HTTPS.


Used to get browsers to hold small data
associated with user’s browsing.


Cookies are named and have single value.


Assigned by the servers using fields added to
HTTP response headers.


Cookies are saved one at a time into HTTP
response headers using
javax.servlet.http.HttpServletResponse.addCooki
e().


Web browsers are expected to support 20
cookies per host of at least 4KB each.


HTTP request fields are retrieved using
javax.servlet.http.HttpServletRequest.getC
ookie().


This returns all cookies found in request.


Cookie Class


Cookie(String name,String value)


setDomain(String)


getDomain()


setMaxAge(int)


Age in sec; 0 to delete


getMaxAge()


setValue(String)


getValue()


getName()


Example


FirstServlet.html


FirstServlet.java


STEPS


Set
classpath=c:/jsdk2.0/lib/jsdk.jar;C:/jsdk2.0/src


Compile .java file


.class file should be in example directory


Run servletrunner


Run FirstServlet.html in browser


C:
\
JSDK2.0
\
examples
\
FirstServlet.html


Survey.html


Survey.java

Questions


What are two methods of HTTP to send requests
to web server? Which should you use to send
large amounts of information to the server?


What are the main uses of ServletContext
Object?


What are the differences between Generic
Servlet and Servlet?


What is pre initialization and lazy initialization of
servlet?


Write short notes on Error handling of Servlet.