Tuesday, June 10, 2008

What are Servlets and how can they help in developing Web Applications?

"Servlets are modules that extend request/response-oriented servers, such as Java-enabled web servers. For example, a servlet might be responsible for taking data in an HTML order-entry form and applying the business logic used to update a company's order database. Servlets are to servers what applets are to browsers. Unlike applets, however, servlets have no graphical user interface. Servlets can be embedded in many different servers because the servlet API, which you use to write servlet assumes nothing about the server's environment or protocol. Servlets have become most widely used within HTTP servers; many web servers support the Servlet API.


What is the Advantage of using Servlets over CGI programming?

Servlets are only instantiated when the client first accesses the program. That is, the first time any client hits the URL that is used to access the Servlet, the Servlet engine instantiates that object. All subsequent accesses are done to that instance. This keeps the response time of Servlets lower than that of CGI programs, which must be run once per hit. Also, because a Servlet is instantiated only once, all accesses are put through that one object. This helps in maintaining objects like internal Connection Pooling or user session tracking and lots of other features.

Here are a few more of the many applications for Servlets:

1. Allowing collaboration between people. A Servlet can handle multiple requests concurrently, and can synchronize requests. This allows Servlets to support systems such as on-line conferencing.

2. Forwarding requests. Servlets can forward requests to other servers and Servlets. Thus Servlets can be used to balance load among several servers that mirror the same content, and to partition a single logical service over several servers, according to task type or organizational boundaries.


What is the Jakarta Project ?

The goal of the Jakarta Project is to provide commercial-quality server solutions based on the Java Platform that are developed in an open and cooperative fashion. The flagship product, Tomcat, is a world-class implementation of the Java Servlet 2.2 and JavaServer Pages 1.1Specifications. This implementation will be used in the Apache Web Server as well as in other web servers and development tools." (The Apache Software Foundation).


Where can i find a good tutorial and more details on Servlets?

These URL's are a good starting point if you want to know more about Servlets.


How do I connect to a database from my Servlet?Java includes support for databases, using Java Database Connectivity (JDBC). Most modern databases offer JDBC drivers, which allow you to connect any Java application (including Servlets) directly to your database.

If your database vendor does not offer a JDBC driver, and there are no third party drivers available, you may like to use a JDBC bridge. For example, the ODBC-JDBC bridge allows you to connect to any ODBC data source, which many databases support. Also there are four type of Drivers

Type I : JDBC-ODBC bridge
Type II : native-API partly JavaTM technology-enabled driver
Type III : net-protocol fully Java technology-enabled driver
Type IV : native-protocol fully Java technology-enabled driver

For a list of currently available Database drivers, please visit this page http://industry.java.sun.com/products/jdbc/drivers

Creating a new Connection to Database frequently could slow down your application. Most of the projects use a concept called Connection Pooling. Here when the Servlet starts up, in the init method , a pool of connections are created and are stored in memory (Mostly in a Vector). When a transaction with Database is required, then the next free available connection is retrieved from this Vector and used for that purpose. Once it's work is done, it is again put back into Connections Pool, indicating it is available. Today most of the JDBC Drivers support this feature have inbuilt connection pooling mechanisms.

Please Note : If you are creating your own Connection Pooling, it is strongly recommended to close all the open connections in the destroy method. Else there are chances of your data getting corrupted.


How do I get authentication with myServlet?

Many popular Servlet engines offer Servlet authentication and the API has a call HttpServletRequest.getUserName() which is responsible for returning the username of an authenticated user.


What is a Session Object ?

Session Object is used to maintain a user session related information on the Server side. You can store , retrieve and remove information from a Session object according to your program logic. A session object created for each user persists on the server side, either until user closes the browser or user remains idle for the session expiration time, which is configurable on each server.


How to create Session object and use it for storing information ?

This code will get the Session context for the current user and place values of count1 and count2 into MyIdentifier1 and MyIdentifier2 respectively

HttpSession session = req.getSession(true); //Creating a Session instance

session.putValue ("MyIdentifier1",count1); // Storing Value into session Object
session.putValue ("MyIdentifier2", count2);

session.getValue(MyIdentifier1); // Prints value of Count

session.removeValue(MyIdentifier1); // Removing Valuefrom Session Object


What is the Max amount of information that canbe saved in a Session Object ?

As such there is no limit on the amount of information that can be saved in a Session Object. Only the RAM available on the server machine is the limitation. The only limit is the Session ID length(Identifier) , which should not exceed more than 4K. If the data to be store is very huge, then it's preferred to save it to a temporary file onto hard disk, rather than saving it in session. Internally if the amount of data being saved in Session exceeds the predefined limit, most of the servers write it to a temporary cache on Hard disk.


What are Cookies and how to use them?

A cookie is a bit of information sent by the Web server that can later be read back from the browser. Limitations for cookies are, browsers are only required to accept 20 cookies per site, 300 total per user , and they can limit each cookie's size to 4096 bytes (4K).

Cookie cookie = new Cookie("userId", "28764"); //Creating new Cookie

response.addCookie (cookie); // sending cookie to the browser

// Printing out all Cookies


Cookie[] cookies = request.getCookies();

if (cookies != null)
{
for (int i=0; i< cookies.length; i++)
{
String name = cookies[i].getName();
String value = cookies[i].getValue();
}
}

Note : If you want to save special characters like "=", or spaces, in the value of the cookie, then makesure you URL encode the value of the cookie , before creating a cookie. Please refer to FAQ on URLEncode and Decoding.


How to confirm that user's browser accepted the Cookie ?

There's no direct API to directly verify that user's browser accepted the cookie. But the quick alternative would be, after sending the required data tothe users browser, redirect the response to a different Servlet which would try to read back the cookie. If this Servlet is able to read back the cookie, then it was successfully saved, else user had disabled the option to accept cookies.


How can i delete or set max duration for which Cookie exists?

You can set the maximum age of a cookie with the cookie.setMaxAge(int seconds) method: Here are different options to this method,

  • Zero means to delete the cookie
  • A positive value is the maximum number of seconds the cookie will live, before it expires
  • A negative value means the cookie will not be stored beyond this browser session (deleted on browser close)

Here is a sample code to delete cookie.

private void deleteCookie(String cookieName)
{
Cookie[] cookies =request.getCookies();

if (cookies != null)
{
for (int i=0; i lt cookies.length; i++)
{
if (cookies[i].getName().equals(cookieName));
cookies[i].setMaxAge(0);
}
}
}


What are the Servlets Equivalents of CGI for commonly requested variables?
SERVER_NAME         request.getServerName();

SERVER_SOFTWARE request.getServletContext().getServerInfo();
SERVER_PROTOCOL request.getProtocol();
SERVER_PORT request.getServerPort()
REQUEST_METHOD request.getMethod()
PATH_INFO request.getPathInfo()
PATH_TRANSLATED request.getPathTranslated()
SCRIPT_NAME request.getServletPath()
DOCUMENT_ROOT request.getRealPath("/")
QUERY_STRING request.getQueryString()
REMOTE_HOST request.getRemoteHost()
REMOTE_ADDR request.getRemoteAddr()
AUTH_TYPE request.getAuthType()
REMOTE_USER request.getRemoteUser()
CONTENT_TYPE request.getContentType()
CONTENT_LENGTH request.getContentLength()
HTTP_ACCEPT request.getHeader("Accept")
HTTP_USER_AGENT request.getHeader("User-Agent")
HTTP_REFERER request.getHeader("Referer")

For more details on these variables please referto this URL http://hoohoo.ncsa.uiuc.edu/cgi/env.html


How can get the entire URL of the current Servlet ?The following code fragment will return the entire URL of the current Servlet

String currentFile = request.getRequestURI();
if (request.getQueryString() != null)
{
currentFile = currentFile + '?' + request.getQueryString();
}

URL currentURL = new URL(request.getScheme(),
request.getServerName(), request.getServerPort(), currentFile);

out.println(URL.toString());


What are different methods in HttpServlet ? Also what are advantages of Get and POST methods?

There are two main methods by which data can be sent to Servlets. They are GET and POST. Here is the over view of sample Servlet and the methods youshould be over riding.

public abstract synchronized class HttpServlet extendsGenericServlet implements Serializable
{
protected void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// If from the Form, the data is submitted using GET method then this method
// is called. Also by default when this Servlet is called from Browser then this
// method is called.
}

protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// If from the Form, the data is submitted using PUT method then this method is called
}

protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// If you must respond to requestsmade by a client that is not using the
// HTTP protocol, you must use service(). You normally should never need
// to override this method, except in special cases.
}
}

If you want to support doPost and doGet from same servlet, then in either doPost or doGet method, which ever is getting called, call the other method using doGet(request, response) or doPost(request,response)

For security reasons if the data being submitted is sensitive, then it's always preferred to use POST method so that the elements don't shown up in URL. When submitted using GET, then all the elements get appended to the URL. If user clicks on a third party click and if that server is logging the Referrer, then the entire URL is saved, which will also have sensitive information.

Also there are limitations of amount of data that can be sent through GET method. Some Operating Systems have a limitation on the Max Length of the URL, which is normally 255 characters. If sending through GET method, then the total length of the target Servlet name and all parameters dataneed to be less than 255 characters.


How do I send email from my Servlet?

You have two options. The first is to write or find a Simple Mail Transfer Protocol (SMTP) implementation in Java. The second is to use the JavaMail API. You can Download the JavaMail from this site at http://java.sun.com/products/javamail


How do I pass arguments to the Servlets?

Arguments to the servlets can be passed at two levels.

  • When a client is invoking the servlet, the client can pass the arguments as part of a URL in form of name/value pairs in the query string portion of the URL. If a tag is used in the html language to invoke the servlet, the arguments can be passed through the param name construct:



  • The server administrator/web-master can pass arguments to the servlet at loading/intialization time by specifying the arguments as part of the server configuration. For Tomcat and JSWDK, edit the conf/web.xml file.

    The required argument (parameter1 in this example ) can be retrieved this way, getServletContext().getAttribute( "paramater1")

How can i set Class Path for my Servlets ?

For developing servlets, just make sure that the JAR filecontaining javax.servlet.* is in your CLASSPATH, and use your normal development tools


Can you provide a sample Servlet ?

Here's the sample implementation of a Servlet to print "Welcome to the World of Servlets." on to the browser

class HelloServlet extends HttpServlet
{
/**
* Handle the HTTP GET method bybuilding a simple web page.
*/

public void doGet (HttpServletRequestrequest, HttpServletResponse response) throws
ServletException,IOException
{
PrintWriterout;

String title= "Hello Servlet";

//set content type and other response header fields first
response.setContentType("text/html");

// then write the data of the response
out =response.getWriter();
out.println(""); <br /> out.println(title); <br /> out.println("");
out.println("

"+ title + "

");
out.println("

Welcometo the World of Servlets.");
out.println("");
out.close();
}
}


How do I get the name of the currently executing script?

Use req.getRequestURI() or req.getServletPath(). The former returns the path to the script including any extra path information following the name of the servlet; the latter strips the extra path info. For example:

URL http://www.javasoft.com/servlets/HelloServlet/jdata/userinfo?pagetype=s3&pagenum=4
getRequestURI servlets/HelloServlet/jdata/userinfo
getServletPath servlets/HelloServlet/
getPathInfo /jdata/userinfo
getQueryString pagetype=s3&pagenum=4

Can you provide me with a List of ISP's who support Servlets ?

Here is the list of all ISP's who supportServlets , http://www.servlets.com/isps/servlet/ISPViewAll


What is URL Encoding and URL Decoding ?

URL encoding is the method of replacing all the spaces and other extra characters into their corresponding Hex Characters and Decoding is the reverse process converting all Hex Characters back their normal form.

For Example consider this URL, /ServletsDirectory/Hello'servlet/

When Encoded using URLEncoder.encode("/ServletsDirectory/Hello'servlet/") the output is

http%3A%2F%2Fwww.javacommerce.com%2FServlets+Directory%2FHello%27servlet%2F


This can be decoded back using

URLDecoder.decode("http%3A%2F%2Fwww.javacommerce.com%2FServlets+Directory%2FHello%27servlet%2F")


What are Good Ways of Debugging a Servlet ? Are are IDE's which support Servlet Debugging ?

There are couple of Methods. Firstly servers like JRun and others provide separate logs where all your Print requests will print their data into. For example requests to System.out. and System.err go to different log files. If this features is not available or you want to maintain logs separately for each module then you can create a static class called "LogWriter" and call the method inside the try catch loop. The print method in Log Writer will be writing to a custom defined Log File.

try
{ ....
}
catch(Exception exp)
{
LogWriter.print("Debug : The following error occurred at function .... ')
}

Also Inprise JBuilder supports Servlet Debugging. Please refer to JBuilder documentation for details.

Just as a Cautionary note, from your Servlets, never call System.exit(0). The results might be unpredictable. Might close down the entire Server. The Best way is to catch the Exception and either send resultant Error Page to the Browser or Write to a Log file and inform user about the Error.


If i put a Servlet on each servers, and there is a static variable in thisServlet. Do all the instances on these servers share the same static variable? If not, how can I share data among these instances?

No you can't , because on every server there is a different VM running and a static variable is shared only between class instances in the same VM.


How can i create Images Directly on fly and send them to browser, also at run time if i want to write text on top of a image ,how to do it ? You can get the latest image generator package from http://www.acme.com
How can i upload File using a Servlet?

You can show a Browse and Upload Form buttonusing the following code.

multipart/form-data" method=post action="/utils/FileUploadServlet">


It's easy to use a readily available class, which you can easily embed into your servlet for uploading the file. Download the most widely used File Upload package written by Jason Hunter at this URL http://www.servlets.com/cos/


How can i prevent Browser from Caching the Page content ?

Before sending the data to the browser, write thefollowing statements,

response.setHeader("Cache-Control","no-store");
response.setHeader("Pragma","no-cache");
response.setDateHeader ("Expires", 0);

This also helps in case, when user should not beable to see previous pages by clicking the Back button in the browser. (Whenvery sensitive information is being displayed and someone else comes back tomachine and tries to see what data was entered)


How can i reduce the number of writes to Client from Servlet ?

It is always recommended to use StringBuffer instead of String even for Concatenating a group of Strings. Avoid writing every small string to client. Instead store all the strings into a StringBuffer and after sufficient data is available, send this data to Browser.

Here is some sample code,

PrintWriter out =res.getWriter();
StringBuffer sb = new StringBuffer();

//concatenate all text to StringBuffer
sb.append("............. ")

res.setContentLength(sb.length());
out.print(sb);


Can you compare the Performance of Servlets, JSP and Perl Pages ?

Servlets will be faster than Perl CGI ,because the Perl executable needs to launch as a separate process, then Perl needs to initialize itself, then load in the script, then compile the script, and finally execute the script. Here are some Benchmarks for running Servlets and Perl under similar conditions http://www.caucho.com/articles/benchmark.xtp


How can i call another Servlet or JSP from the current Servlet ?

One of the previous methods for calling another servlet was

HelloServlet hello = (HelloServlet)getServletConfig().getServletContext().getServlet("hello");

From Servlet API version 2.1, this method has been deprecated and the preferred method is to use RequestDispatcher. Here is the syntax for it,

getServletContext().getRequestDispatcher("/jsp/hello/hello.jsp").forward(req, res);


How can i write Data submitted from a Applet into a different file , then show users this data on a new page ?

This is one of the most frequently used techniques. From your applet create a URL connection the Servlet and send the data using DataOutputStream. Next in the Service method of Servlet, using PrintWriter, create a new File. On the other end Applet will be waiting for response from Servlet, using DataInputStream. Pass the newly created filename to the Applet. Next From applet call ShowDocument() method with new URL.

Here is some sample code,

URL ticketservlet = new URL( "http://jcom.com/servlet/Ticketservlet ");
URLConnection servletConnection = ticketservlet.openConnection();

// inform the connection that we will send output and accept input
servletConnection.setDoInput(true);
servletConnection.setDoOutput(true);

// Don't use a cached version of URL connection.
servletConnection.setUseCaches (false);
servletConnection.setDefaultUseCaches (false);

// Specify the content type that we will send binary data
servletConnection.setRequestProperty ("Content-Type", "application/octet-stream");

// send the student object to the servlet using serialization
ObjectOutputStream ticketOutputToServlet = new ObjectOutputStream(servletConnection.getOutputStream());

// serialize the object , and sending it to servlet , ticketData should implement Serializable interface.
ticketOutputToServlet .writeObject(ticketData);
ticketOutputToServlet .flush();
ticketOutputToServlet .close();

//reading back data from servlet
ObjectInputStream inputFromServlet = new ObjectInputStream(servletConnection.getInputStream());
Vector resultantData = (Vector) inputFromServlet.readObject();
String filename = (String) resultantData.elementAt(0)

//Showing the newly created page from Applet
getAppletContext().showDocument(new URL("http://www.jcom.com/profiles/" + filename));


What are Application Servers , Servlet Engines and Web Servers ? How are they different from each other ?

Initially when the Web started, then all it needed was a Server which would receive the requests for HTML pages or images and send them back to browsers. These are called Web Servers. Then came requests for handling high capacity Database Transactions, supporting latest Java Features like Servlets, JSP, EJB etc. These requests are handled by Application Servers. Normally for a Application Server to exists and process client requests, they need to come through Web servers. All the static data like plain HTML pages etc are placed on Web Server. All the Dynamic Content generators like Servlets, EJB are placed on application server.

Servlet Engines are similar to Application servers, except they support only Servlets and JSP.

Here is the Servlet Engines which support Servlets and JSP , http://java.sun.com/products/servlet/industry.html. Also here is a the list of All Web Servers and Application Servers.

Applications servers are just another level above Servlet Engines. Normally all the Application servers support Servlets and JSP. Not all Servlet Engines support other features like EJB etc, which Application Servers support.


What are the Latest Developments to ServletsAPI ?

Please visit this URL. http://java.sun.com/aboutJava/communityprocess/jsr/jsr_053_jspservlet.html


Is there a Mailing List for Servlets related discussions?

Here is the archive of all the Servlets Interest discussions maintained by JavaSoft http://archives.java.sun.com/archives/servlet-interest.html. You can also subscribe to this mailing list from here.


How do i download a binary file from a Servlet or JSP page ?

Use the Normal Anchor Tag from your page. This is the most preferred way and let the browser handle the downloading part. Here is the Simple syntax for it,

DownloadFile From Here

Another way to have Servlet do this would be, provide a link to Servlet, and from the Servlet call this function ,

response.sendRedirect("/downloads/Profiler.zip");


How do i know when user Session has expired or removed?

Define a class, say SessionTimeoutIndicator,which implements javax.servlet.http.HttpSessionBindingListener. Create a SessionTimeoutIndicator object and add it to the user session. When the session is removed, SessionTimeoutIndicator.valueUnbound() will be called by the Servlet engine. You can implement valueUnbound() to do the required operation.


How can i read data from any URL, which can bea binary data or from a Active Server Page ?

Using the Following code, you can download any data. If it connects to either Servlet or ASP page, then the data get's processed if required and the resultant data is read back.

//Connect to any URL, can be to a image, to a static URL like www.yahoo.com or any ASP page.
URL url = new URL("http://www.aspkit.com/jdata/transaction/transact.asp");

URLConnection connection = url.openConnection();
InputStream stream = connection.getInputStream();
BufferedInputStream in = new BufferedInputStream(stream);
FileOutputStream file = new FileOutputStream("result.txt");
BufferedOutputStream out = new BufferedOutputStream(file);

//Reading Data from the above URL
int i; while ((i = in.read()) != -1){
out.write(i);
}


How can i stress test my Servlets ?

You can use one of the following products to stress test your Servlets.


What is Servlet Changing ?

Servlet Chaining is the process of chaining the output of one Servlet to another Servlet.

You need to configure your servlet engine Java Web server, JRun, , JServ ... for this process to work.

For example to configure JRun for servlet chaining,

  • Select the JSE service (JRun servlet engine) to access to the JSE Service Config panel. You have just to define a new mapping rule where you define your chaining servlet.
  • Let's say /servlets/TicketChainServlet for the virtual path and a comma separated list of servlets as CustomerServlet ,TicketServlet.
  • So when you invoke a request like http://javacommerce.com/servlets/chainServlet, internally the servlet CustomerServlet will be invoked first and its results will be piped into the servlet TicketServlet.

The CustomerServlet servlet code should look like:

public class CustomerServletextends HttpServlet {

public void doGet (HttpServletRequest request, HttpServletResponseresponse) {
PrintWriter out =res.getWriter();
rest.setContentType("text/html");
...
out.println("Customer Name : Tom");
}
}

TicketServlet has to do is to open an inputstream to the request object and read the data into a BufferedReader object.

BufferedReader b = newBufferedReader( new InputStreamReader(req.getInputStream() ) );
String data = b.readLine();
b.close();

Here in data variable you would get "CustomerName : Tom"

Note : Not many Servlet Engines support ServletChaining. Also it has been removed from the standard specifications for Servlets.


How can i make sure User had logged in when accessing Secure Pages ?

At the beginning of each page , place this small code, or include it in a common file

HttpSession session =request.getSession(true);
if (session.getValue("username") == null) {

response.sendRedirect (response.encodeRedirectUrl("LoginPage.jsp?currentURL=productdata.jsp"));
}
else
{
// Go ahead and show the page
}

In LoginPage.jsp once the user has provided the correct logon credentials:

session.putValue("username",currentuser);
response.sendRedirect(response.encodeRedirectUrl(request.getParameter("currentURL")));


Why am i not seeing the most recent updates made to the servlet, from my browser even though i am clicking on Refresh button and removed all the cache from the browser?

This is actually one of the features of Servlet. The first time when the Servlet is invoked, then the init() method is called. So once the Servlet is loaded into memory, it will stay there until the server is restarted. According to specs, the Servlet should reload itself when there is a change in the code or new class is created. But because of performance reasons, most of the Servers don't check for this option and the Same old Servlet is used which is currently in memory for all requests. In JRun, you need to click on the restart button. Any other solutions to this one are welcome. Tomcat requires you to just replace the WAR file.


How can i limit the number of Simultaneous connections to the same Servlet?

This option is configurable on the Server. For example JRun allows you to setup the number of maximum concurrent connections from Admin option.


What is Server Side Push and how is it implemented and when is it useful ?

Server Side push is useful when data needs to change regularly on the clients application or browser , without intervention from client. Standard examples might include apps like Stock's Tracker, Current News etc. As such server cannot connect to client's application automatically. The mechanism used is, when client first connects to Server, (Either through login etc..), then Server keeps the TCP/IP connection open.

It's not always possible or feasible to keep the connection to Server open. So another method used is, to use the standard HTTP protocols ways of refreshing the page, which is normally supported by all browsers.

This will refresh the page in the browser automatically and loads the new data every 5 seconds.


What Servlet engines support sharing of session data across multiple load-balanced web servers, also referred to as Clustering?

The following servers support Clustering,


What is the difference between Multiple Instances of Browser and Multiple Windows. How does this affect Sessions ?

From the current Browser window, if we open a new Window, then it referred to as Multiple Windows. Sessions properties are maintained across all these windows, even though they are operating in multiple windows.

Instead, if we open a new Browser, by either double clicking on the Browser Shortcut icon or shortcut link, then we are creating a new Instance of the Browser. This is referred to as Multiple Instances of Browser. Here each Browser window is considered as different client. So Sessions are not maintained across these windows.



Question: How could Java classes direct program messages to the system console, but error messages, say to a file?

Answer: The class System has a variable out that represents the standard output, and the variable err that represents the standard error device. By default, they both point at the system console. This how the standard output could be re-directed:

Stream st = new Stream(new FileOutputStream("output.txt")); System.setErr(st); System.setOut(st);

Question: What's the difference between an interface and an abstract class?

Answer: An abstract class may contain code in method bodies, which is not allowed in an interface. With abstract classes, you have to inherit your class from it and Java does not allow multiple inheritance. On the other hand, you can implement multiple interfaces in your class.

Question: Why would you use a synchronized block vs. synchronized method?

Answer: Synchronized blocks place locks for shorter periods than synchronized methods.

Question: Explain the usage of the keyword transient?

Answer: This keyword indicates that the value of this member variable does not have to be serialized with the object. When the class will be de-serialized, this variable will be initialized with a default value of its data type (i.e. zero for integers).

Question: How can you force garbage collection?

Answer: You can't force GC, but could request it by calling System.gc(). JVM does not guarantee that GC will be started immediately.


Question: How do you know if an explicit object casting is needed?

Answer: If you assign a superclass object to a variable of a subclass's data type, you need to do explicit casting. For example:

Object a; Customer b; b = (Customer) a;

When you assign a subclass to a variable having a supeclass type, the casting is performed automatically.

Question: What's the difference between the methods sleep() and wait()

Answer: The code sleep(1000); puts thread aside for exactly one second. The code wait(1000), causes a wait of up to one second. A thread could stop waiting earlier if it receives the notify() or notifyAll() call. The method wait() is defined in the class Object and the method sleep() is defined in the class Thread.

Question: Can you write a Java class that could be used both as an applet as well as an application?

Answer: Yes. Add a main() method to the applet.

Question: What's the difference between constructors and other methods?

Answer: Constructors must have the same name as the class and can not return a value. They are only called once while regular methods could be called many times.

Question: Can you call one constructor from another if a class has multiple constructors

Answer: Yes. Use this() syntax.

Question: Explain the usage of Java packages.

Answer: This is a way to organize files when a project consists of multiple modules. It also helps resolve naming conflicts when different packages have classes with the same names. Packages access level also allows you to protect data from being used by the non-authorized classes.

Question: If a class is located in a package, what do you need to change in the OS environment to be able to use it?

Answer: You need to add a directory or a jar file that contains the package directories to the CLASSPATH environment variable. Let's say a class Employee belongs to a package com.xyz.hr; and is located in the file c:\dev\com\xyz\hr\Employee.java. In this case, you'd need to add c:\dev to the variable CLASSPATH. If this class contains the method main(), you could test it from a command prompt window as follows:

c:\>java com.xyz.hr.Employee

Question: What's the difference between J2SDK 1.5 and J2SDK 5.0?

Answer: There's no difference, Sun Microsystems just re-branded this version.

Question: What would you use to compare two String variables - the operator == or the method equals()?

Answer: I'd use the method equals() to compare the values of the Strings and the == to check if two variables point at the same instance of a String object.

No comments: