top of page

Servlet

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • Stand-alone applications of java are for providing service to one customer at a time.

  • A stand-alone application is a client side application.

  • We call stand-alone application as network-disabled applications because they are not accessible through network.

  • A stand-alone application with CUI is as console application and a stand-alone application with GUI is a desktop application.

  • Web applications are introduced to provide an application service to multiple clients across internet.

A Web application is a server side application; it runs on a server and provides its services to many clients across the internet.

  • We call a web application as a group of web resources. Here a web resource can be a static or dynamic file.

  • A web application is a group of passive and active web resources (passive means static and active means dynamic).

     

 

Web Applications

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • Web applications are divided into 2 types

  1. Presentation-Oriented or Static Web application.

  2. Service-Oriented or Dynamic Web application.

  • Static web applications are created using HTML, images, java script files etc.

  • Static applications with only concentrate in presentation.

  • Dynamic web applications are created using all HTML, images, jsp, servlet, php etc.

  • Dynamic web applications will concentrate on providing some service to the client.

  • For example, mostly many online tutorial websites are static web applications

For example, websites like gmail.com, yahoo.com are dynamic application because they offer mailing and chatting services to end-users.

 

Web applications are created using both client side and server side technology.

 

  • Client side technologies are going to run on a web browser and server side technologies are run a web server.

  • For Example- HTML pages, java script files are going to run on browser. So they are client side technologies.

  • For example- Servlets and jsps are going to run on a server.So,  they are a server side technologies.

 

A Web application which is running on server can be accessed in two ways.

 

  1. Directly by sending request from browser.

  2. Constructing a java program

     

Web browser is a thin client and a java program is a thick client.

 

If we create a java program to call a web application then we need java software in client system to run the client application. But, in case of browser there is no need of java software at client systems so , we always prefer a browser.

 

Web application directory structure

 

 Each java application should follow a standard directory structure given by SUN.

  • The important directories of a web applications are:

  1. Root directory

  2. Root/WEB-INF directory

  3. Root/WEB-INF/classes directory

  4. Root/WEB-INF/lib directory

 

Root directory name can be user defined , but remaining directory name are  fixed.

> SUN Microsystems given a directory structure for web applications in order to make a web application as server independent.

> Each java web application follows a principle Write Once Deploy Anywhere(WODA)

Diagram

Root

 

   WEB-INF

Classes(*.classes)

Lib(*.jar)

 

web.xml(Deployment Descriptor)

  *.html,js,jsp,gif

 

Container

 

  • Generally, a class which providing run time support for other classes is called a container.

 

Example-2: we created two classes A without main and B with main then B classes provides runtime support for A class. So, B is a container.

 

  • In web applications, we create Servlets  , nothing but java classes. There is a class at server to provide runtime support for our servlets.  That class is called a web container.

 

                        1- Web server

                        2- Web Container

 

 

Apart from providing run-time environment for Servlets, a container also offers some additional services.

The important services are

 

  • Life cycle management

  • Multi-threading  supports

  • Security

  • Chaining

 

Life cycle management means, a container takes care about instantiation,initialization services and destroy phrases of a Servlet.

When a request comes to a Servlet, then the container creates a thread and after its work, a container will destroy it. It means a container provides multi-threading support.

A container will verify the credentials of a client and based on credentials either it allow the request to Servlet or denies the request. It means container provides security. Sometime a request should be passed on one Servlet to another. A container will performs this chaining.

 

Types of web-container:

 

  • Stand-alone container

  • In-process container

  • Out-process container

 

If a container directly installed without a server. It is a stand-alone container.

If a container runs with in the process of a server then it is called in process container.

If a container runs in a separate process of a server then it is called out container.

For example: if we download and install apache tomcat then tomcat acts as a stand-alone container.

If we install glassfish or JBoss servers, then along with these servers tomcat also started with in the same process. So in this case, tomcat is acting as in process container.

 

Servlet technology reduces burden on server when compared with CGI because Servlet technology follows thread-model, but CGI technology follows process-model.

 

  • Threads are light weight objects than process. So, Servlet is a light weight technology than CGI.

     

     

     

     

     

     

     

     

     

 

 

 

 

 

 

 

 

Q)What is a Servlet?

 

Def 1:A Servlet is a java class, it runs on a server and provides services to multiple clients across internet.

Def 2: A Servlet is a platform independent java class, which extends the functionality of a web server.

 

Q )why a Servlet class is created?

 

  • In a web application, if there is a requirement to generate dynamic content onto the browser(client) then a Servlet class is created.

Servlet API:

 

Servlet api contains three packages.

 

  • Javax.servlet

  • Javax.servlet.http

  • Javax.servlet.annotation(added in Servlet3.x)

Each package consists a group of classes and interfaces to develop a Servlet class.

 

 

Q) How a Servlet class is created?

>Every Servlet class created by the developers will implements Servlet interface of Servlet api.

>A Servlet class indirectly implements Servlet interface by extending GenericServlet or by extending HttpServlet class.

For example:

Public class MyServlet extends javax.servlet.Servlet

      {

          -------------

      }

            Or

Public class MyServlet extends javax.servlet.GenericServlet

       {

           ------------

       }

            Or

Public class MyServlet extends java.servlet.http.HttpServlet

        {

               ------------

         }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • Generic Servlet is an abstract class, because it contains one abstract methods called service.

  • HttpServlet is also an abstract class, but it doesn’t contain any abstract methods.

  • In java an abstract class may or mayn’t contain abstract methods.

     

     

Q) What is a difference between an applet and a Servlet?

 

Applet:

 

  • Applet runs on a web browser.

  • Applet increases the functionality of a browser.

  • Applet can provide service to one client at time.

  • Applets are visible, because of width and height.

 

Servlet:

 

  • Servlet runs on a web server.

  • Servlet increases the functionality of a server.

  • Servlet can provide service to multiple clients at time.

  • Servlet are invisible.

     

Life cycle stages of servlet:

 

  • Does not exist

  • Instantiated

  • Initialized

  • Service

  • Destroy

   

 

 

 

 

 

  • The first stage in the life cycle of a servlet is doesn’t exist. It means, an object for a servlet is not yet created by a web container.

  • When a first request is arrived for a servlet or when  a servlet is deployed in a server then web container creates an object of a servlet. It means a servlet is instantiated.

  • If a servlet is instantiated immediately whenever it is deployed in a server then it is called “early loading”.

  • If a servlet is instantiated when a first request is arrived for it then it is called “lazy loading”.

  • After a servlet object is created a web container initializes it by calling constructor then followed by init();

  • After a servlet object is initialized then it will provide service to all the request made by the client.

  • A web container invokes a service() to provide the service to a client.

  • After a servlet has provided service to client request, whenever a servlet object is no longer need then container will destroy that object.

  • To destroy the container called destroy().

  • Finally, once a servlet object is destroyed then a servlet will reach to doesn’t

     

     

Life cycle methods:

 

A servlet has three life cycle method and terse are given javax.servlet.Servlet interface.

The syntax of life cycle methods are,

1.public void init(ServletConfigconfig) throws ServletException

2.public void service(ServeletRequest request, ServletResponse response) throws ServletExceptionIOException

3.public void destroy()

>init() and destroy()  life cycle methods are called for once.

>service() is called for each request

 

Request Flow in a servlet:

 

Step-1: when a client made a request from browser to a servlet then it is first stopped at server.

  • A server will delegate the request to container.

  • A container prepares a request, response and thread objects for a given request.

  • A container will assign request, response object to thread.

  • Now thread calls service () by passing request and response objects as parameters.

  • The logic defined in service () will process the given request and generates the response data.

  • A container collects the response of a Servlet.

  • A container prepared a dynamic web page for the response of a Servlet.

  • A container will send the dynamic web page to a server.

Note: A container will remove request, response and thread objects automatically whenever a web page is sent to a server.

  • Finally, a server will transfer a webpage as a response to the browser.

 

Servlet Configuration:

 

Servlets in a server are maintained by a web container.

  • A web container is pre-defined program that comes along with a server.

  • By default a container doesn’t know anything about  Servlets that created by developers.

  • In order to tell  the container about servlet, we configure that servlet in deployment descriptor file.

  • A descriptor file name should be “web.xml”.

This web.xml file is a mediator file from a program to a container, in order to talk with the container.

 

Q) What is configuration?

 

Ans- If the programmer writing something in the xml file then it is called configuration.

 

  • While configuring a servlet in web.xml file, we configure three names to  a servlet

  1. Alias name

  2. Fully qualified class name

  3. url pattern

  • One web application can contain multiple Servlets. A web container decides whether a request is made by a client to which servlet, container uses url pattern given in the request.

  • A container decides a servlet to handle a given request, based on its url pattern.

  • Alias name is used by the container, in order to forward a request to a particular servlet class.

  • We say that alias name is a mediator in connecting a container and a servlet class.

  • In order to configure the above three names of a servlet we use two entries(tags) in the deployment descriptor file(web.xml).

  1. <servlet>

  2. <servlet-mapping>

 

                                    web.xml

<web-app>

<servlet>

<servlet-name>aliasname</servlet-name>

<servlet-class>Fully qualified class name</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>aliasname</servlet-name>

<url-pattern>/some pattern</url-pattern>

</servlet-mapping>

</web-app>

Example:

                                    web.xml

                                    ======

<web-app>

<servlet>

<servlet-name>sone</servlet-name>

<servlet-class>pack1.Servlet1</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>sone</servlet-name>

<url-pattern>/srv1</url-pattern>

</servlet-mapping>

</web-app>

 

Installing Tomcat Server:

 

  • Visit tomcat.apache.org and download tomcat7 service installer.

  • By default tomcat server is installed at c:\Program File\Apache Software Foundation

  • By default Tomcat server is installed on port 8080. But oracle Database Sever comes with Oracle HTTP server on port 8080. So a port number clash occurs.

  • To change the port number of Tomcat, to the following

Open Tomcat\conf\server.xml

Change port number of connector tag from 8080 to 2014.

Note: Port no ranges from 1-65536

  • Tomcat server can be started in  the following ways

  1. Go to tomcat7\bin folder and double on tomcat7

  2. Go to tomcat7\bin and double click on tomcat7w

  3. Go to system tray of icons, right click on tomcat icon and start service.

     

Steps to create a web application with a Servlet:

 

Step-1: create directory structure like the following

Step-2: create WelcomeServlet.java

 

//WelcomeServlet.java

importjavax.servlet.GenericServlet;

importjavax.servlet.ServletRequest;

importjavax.servlet.ServletResponse;

importjava.io.IOException;

importjava.io.PrintWriter;

importjava.utilDate;

public class WelcomeServlet extends GenericServlet

{

public void service(ServletRequestrequest,ServletResponse response) throws ServletExcepton,IOException

{

PrintWriter out=response.getWriter();

out.println("Welcome to Servlet");

Date date=new Date();

out.println("<br>");

out.println("Today date is "+date);

out.close();

 }

}

Step-3: configure Servlet in web.xml

 

<!--web.xml-->

<web-app>

<servlet>

<servlet-name>welcomes</servlet-name>

<servlet-class>WelcomeServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>welcomes</servlet-name>

<url-pattern>/welcome</url-pattern>

</servlet-mapping>

</web-app>

 

Step -4: Servlet-api is a part of java EE(JEE), so this api is unknown to java compiler.

 

  • The api’s of Java EE comes along with severs in the form jar files.

  • So, we need to set a server provided jar file in class path to compile our Servlet.

  • In case of tomcat, the jar file is Servlet-api.jar and it exists tomcat\lib folder. So we need to set classpath like the following.

 

  • D:\WelcomeServlet\WEB-INF\classes>set classpath=C:\Program Files\Apache Software Foundation\Tomcat 7.0\lib\servlet-api.jar;.

  • Javac WelcomeServlet.java

 

Step-5: Deploy the web application into tomcat server.

 

  • Copy WelcomeApp folder into tomcat\webapps folder.

 

Step-6: Start tomcat server

Step-7: Open the browser and type the following request.

 

Q) What is the use of request and response object in a Servlet?

Ans :–If any input values are send with request to a Servlet then container stores the input in request object. From that request object a Servlet will get the input.

If a Servlet wants to write any output to the browser then Servlet will put output into response object. Later container collects output from response object and then it will be send to a browser.

 

Q) what is the need of PrintWriter object?

 

Ans-

  • If a Servlet wants to write output into a response object then PrintWriter object is required.

  • The PrintWriter object for a Servlet will be supplied by response object only.so, to get PrintWriter object from response object we call getWriter() method.

  • PrintWriter out=response.getWriter();

     

    It is object name and it can be any name.

 

 

Q) Can we create a PrintWriter() object explicitly in a Servlet class or not?

 

Ans:-

  • If we directly create PrintWriter class object then it will write output on console of server, not in response object.

  • PrintWriter out=new PrintWriter(System.out);

    out.println(“Welcome to Servlet”);

 

Q) Why every Servlet class must be a public class?

 

Ans:-

  • An object of Servlet class is created by a container.

  • A Servlet class becomes visible to a container, if that Servlet class is public.

 

Q) What happens if a Servlet class is not public?

 

Ans:-

  • If a Servlet class is not a public class then it can be compiled and it can be deployed in a server.But, when a request is given from browser then container throws the following exception

  • Javax.servlet.ServletExcepton: Error instantiating Servlet class

 

Q) Sending input values to a Servlet?

 

Ans:-

  • While sending a request to a Servlet input values can be send along with request, in two ways

  • By adding input values to the url in address bar

  • By designing html page with form tags.

  • If we add input values to url of address bar then those values are called query string.

  • The url and query string are separated with ?symbol.

  • The query string contains one or more parameters, where a parameter is nothing but key=value pair.

  • One parameter and another parameter in a query string are separated with & symbol.

  • http://localhost:2014/App/serv1 ? username=sathya&password=java

     

  • In the above query string there are two parameters and key are username and password.

  • A container will put the input values in request object

  • A Servlet class will read the input values by calling getParameter().

 

  • String s1=request.getParameter (“username”);

    String s2=request.getParameter (“password”);

 

 

  • If a web application contain index.html page and in web.xml if login.html is configured as a welcome file then login.html is considered as welcome page.

  • If a request comes for an html page for a server from a browser then the request is handled by server.

  • If a request comes for a static resource thenserver will handle the request and if a request is came for a dynamic resource then container will handle the request.

  •  

Steps to develop a login application in Eclipse IDE:

 

  • Eclipse is an open source java/Java EE ide from eclipse foundation.

  • Myeclipse is not open source ide but on top of eclipse.

  • The difference eclipse and myeclipse is,myeclipse had build in support for developing framework applications. But, in eclipse we need to add xml’s ,jar’setc explicitly to develop framework applications.

  • Eclipse can be downloaded from eclipse from www.eclipse.org/downloads.

 

Start eclipse IDE and enter some workspace(c:\ServletsWorkspace)              Ok

 

  • Click on file    ->    New    ->  dynamic web project    ->   Project name(LoginProject)

Select dynamic web module version(2.5)     ->       Finish

 

Step-3:Right click on WebContent    ->    New  -> HTML file   ->     enter file name(Login.html)   ->  finish

 

//login.html

<center>

<h2>Login Credentials</h2>

<hr width=”50%”>

<form action=”loginsrv”>

Username:<input type=”text” name=”uname”/>

Password:<input type=”password” name=”pwd”/>

<input type=”submit” value=”SUBMIT”/>

</form>

</center>

Step-4: Right click on project name   ->     Build path    ->    Configure Build path ->      libraries   ->     Add external jars Button        Servlet-api.jar      ->    Ok

 

Step-6: Add the following code in service method of LoginServlet

 

Publicvoidservice(ServletRequestrequest,ServletResponse response)throws ServletException,IOException

{

PrintWriter out=response.getWriter();

 String str1=request.getParamater("uname");

 String str2=request.getParamater("pwd");

if(str1.equals("sathya") && (str2.equals("java"))

{

out.println("<h1> Login Success</h1>");

}

else

{

out.println("<h1> Login Failed</h1>");

}

}

 

Note:The IDE automatically configures our Servlet in web.xml

 

Step-7:Click on window menuàshow viewàservers àright click on servers view-àNewàserveràexpand apacheàselect tomcat 7.0àNextàclick on browser and select tomcat 7ànextàfinish.

 

Step-8: Right click on project nameàRun asàRun on serveràselect tomcatànextàfinish

 

Q) can we define more than one <url-pattern> for a Servlet?

 

Ans- yes, we can repeat <url-pattern> for multiple times in <Servlet-mapping> tags of web.xml.

 

<Servlet>

<Servlet-name>login</Servlet-name>

<Servlet-class>LoginServlet<Servlet-class>

</Servlet>

<Servlet-mapping>

<Servlet-name>login</Servlet-name>

<url-pattern>/loginsrv</url-pattern>

<url-pattern>/login</url-pattern>

<url-pattern>/srv1</url-pattern>

</Servlet-mapping>

 

Early loading of a Servlet:

 

By default, a web container loads a Servlet lazily. It means a Servlet object is created by container when first request is arrived for that Servlet.

  • While developing MVC(Model-View-Controller) projects using struts framework or spring MVC framework etc, a Servlet object is needed immediately whenever an application is deployed in a server.

  • If a Servlet object is created before a first request is arrived then it is called early loading.

  • In order to inform a container that load a Servlet early, we configure a tag <load-on-startup> under <Servlet> tag.

 

<load-on-startup>:

 

Allows a positive integer as a value.<load-on-startup> works like the following

  1. If the value is –ve then container ignores load on startup and creates a Servlet object when first request is arrived. But container doesn’t throw any exception.

  2. If more than one Servlet contains load on startup then the objects are created based on priority order. The order is decided based on load on startup value.

  3. Low value get high priority and high value gets low priority.

  4. If more than one Servlet contains equal load on startup then the order will decided by a container.

 

<Servlet>

<Servlet-name>login</Servlet-name>

<Servlet-class>LoginServlet<Servlet-class>

 

<load-on-startup>10</load-on-startup>

</Servlet>

 

Request parameter methods:

 

àgetParameter()

àgetParameterValues()

àgetParameterNames()

àgetParameterMap()

 

  • If a request parameter has a single value then we call getParameter().

  • If a parameter has multiple values then we call getParameterValues().

     

Q) Can we make a Servlet class as final class or not?

 

Ans- yes, we can make a java class as final when we want to restrict the class to participate in inheritance.

 

Q) Can we define an user defined method in a Servlet or not?

 

Ans- yes, but a container doesn’t call the user defined method, it is not a life cycle method.

  • We can explicitly call user-defined method from one of the life cycle method.

Example

public final class LoginServlet extends GenericServlet

{

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException

{

m1();

}

public void m1()

{

}

}

 

Q) Can we define main() in a Servlet class or not?

 

Ans- Yes, main() is a also not a life cycle method. So, it is not called by container.

  • We can  call the main() explicitly from one of the life cycle methods of a Servlet.

  •  

Q) Is a Servlet object is serialized object or not?

 

Ans- Yes, our Servlet class extends GenericServlet and GenericServlet interface implements Seriralizable interface.

  • In java if super class implements serializable then its subclasses also implements Serializable indirectly. So, subclass object also becomes a serialized object.

 

Life cycle and non-life cycle init() methods of Servlet:

 

  • In GenericServlet class there are two init() methods.

 

  1. Lifecycle

  2. Non life-cycle

  • Lifecycle init() method is came from Servlet interface and non-lifecycle init() method is created by GenericServlet class.

  • We can differentiate life cycle and non life cycle init() methods with the help of parameter. Life cycle init() contains ServletConfig object as a parameter and non life cycle method doesn’t contain any parameters.

 

Public void init(ServletConfigconfig) throws ServletExceptionàlife cycle

 

Public void init() throws ServeltExceptionànon-life cycle

 

  • In GenericServlet class life cycle init() method contain code and non-life cycle init() is empty.

  • When we are creating our Servlet class, we have two options to define initialization logic of our Servlet.

 

  1. We can directly override life cycle init() method

  2. We can override non-life cycle init() method

 

  • It is recommended to override non-life cycle init(), because in super class it doesn’t contain any logic.

  • If we override life cycle init() method then our Servlet class loose the logic defined by super class in the life cycle init(). So, it is always recommended to override non-life cycle init() in a Servlet class.

 

Example :

Public class MyServlet extends GenericServlet

{

 

Public void int( ) throws ServletException

{

}

 

Public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException

{

}

}

 

When doGet() and doPost() methods are Overridden in a Servlet?

 

Ans- There are two cases, where we override both doGet() and doPost() methods in a Servlet.

  1. When we want to define separate logics for get request and post request.

  2. When a Servlet programmer doesn’t know a request from browser comes with get or post.

 

public class MyServlet extends HttpServlet

{

 Public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

 //Login-1

}

Public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

 //Login-2

}

}

 

  • If we don’t know whether a request comes from with get() or post() from browser and if we want to define same logic for both request then again we have two options.

  1. Define the logic in one method and call it from another method.

  2. Create an user-defined method for the logic and call it from doGet() and doPost() methods.

OPTION -1:

public class MyServlet extends HttpServlet

{

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

doPost(request,response);

}

Public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

//login

}

}

 

OPTION-2

public class MyServlet extends HttpServlet

{

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

{

processRequest(req,res);

}

Public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException

 

{

processRequest(req,res);

 

}

 

public void processRequest(HttpServletrequest,HttpServletResponse response) throws ServletException, IOException

{

//login

}

}

 

Q) What happens if a Servlet doesn’t contain doGet() for a GET request and doPost() for POST() request?

 

Ans- If you don’t override doGet() for a get request and doPost() for a post request then super class(HttpServlet) methods are called.

  • The super class methods send Http Status 405 error to the browser.

 

Q) How many init() and service() methods are present in GenericServlet?

 

Ans- Two init() and one service().

 

Q) How many init() and service() methods are present in HttpServlet?

 

Ans- Two int() and two service().

 

Note:

            Non-life cycle service method and seven doXxx() methods are protected methods in HttpServlet. So, while overriding these methods we can use either protected or public modifier.

  • While overriding a super class method in a subclass, either we can use same level of access modifier or we can replace low level to high level but, we can’t replace high level to low level.

     

MIME type/Content type:

 

MIME-(Multipurpose Internet Mail Extensions)

  • response of a Servlet will be shown to the end users by a web browser.

  • A Servlet can generate response in different text format like html , xml, pdf , xml etc.

  • If a response of a Servlet is a non html format then a Servlet has to inform a browser about the format of the response.

  • A Servlet can inform the browser by setting contentType to the response. This can be done by calling setContentType().

  • If the response format is html then it is optional to set the content type.

  • If a content type set from a response then the browser will be ready and takes necessary actions to show the response of a Servlet to a given format.

  • The predefined MIME type

text/html -->defalut

text/xml

application/pdf

application/vnd.ms-excel​

applica

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

JAVA KEY POINTS

bottom of page