390 likes | 493 Views
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.
E N D
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.GenericServletSignature: 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.HttpServletSignature: 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 a 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 Garbage Collection Server no longer has a reference to the object Instantiation & loading Servlet engine can instantiate more than one servlet instance Destruction destroy() Initialization init(ServletConfig conf) Ready service() A service() executes for each servlet instance
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.addCookie().
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.getCookie(). • 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.