static method and variables in servlets and APIs' classes

G

Garg

Hi All,

In my current project i found that a large number of methods are
public static. I am not getting why we need static methods and
variables in servlets and apis' as we all know that on each request a
new instance of servlet is been created.

I tried to find the answer but i confused some people take about
different instances of one object of servlet and some talk about
different treads of that same instance. Now i am trying to relate the
servlet and api's object, instance, treads with static variables and
method defined.

Please help in that.

Thanks
Tarun Garg
 
S

Stanimir Stamenkov

Mon, 18 Feb 2008 10:00:44 -0800 (PST), /Garg/:
In my current project i found that a large number of methods are
public static. I am not getting why we need static methods and
variables in servlets and apis' as we all know that on each request a
new instance of servlet is been created.

Speak for yourself, I know just the opposite: while not requirement
(AFAIK) a single servlet instance handles all the requests. Tagging
a servlet class with the SingleThreadModel [1] interface may make
the servlet container create different servlet instances to handle
the different requests but may synchronize the access to a single
servlet instance, also.

[1]
http://java.sun.com/products/servlet/2.5/docs/servlet-2_5-mr2/javax/servlet/SingleThreadModel.html
 
M

Mark Space

Garg said:
Hi All,

In my current project i found that a large number of methods are
public static. I am not getting why we need static methods and

Java, and servlets, is just programming. You make static methods and
variables in a servlet for the same reason you'd make them in a regular
Java program.
variables in servlets and apis' as we all know that on each request a
new instance of servlet is been created.

Er, no, we don't know that. It's not true. One instance is created of
each servlet, then it gets re-used for all requests until it's
destroyed. Or that's the most common implementation anyway. But
certainly nothing requires or implies that one instance is created per
request. Not even SingleThreadedModel does that.
I tried to find the answer but i confused some people take about
different instances of one object of servlet and some talk about
different treads of that same instance. Now i am trying to relate the

Your English is so bad here I can barely guess what you are saying. Do
you mean "some people take" or "some people talk?"

Any, please review your posts better before you send them, you'll better
answers.

A public static variable is a global variable, and it would be the same
in a regular Java program. A private static variable could be used as a
singleton.

Static methods are useful for decomposition when there's no reason to
attach a method to a specific object. They're just generic operations.
Often they get used for factory methods, but there are many other uses.

If you have some questions about a specific API or method or variable,
please say what it is, since that might also bear on the question.
 
L

Lew

Stanimir said:
Mon, 18 Feb 2008 10:00:44 -0800 (PST), /Garg/:
In my current project i found that a large number of methods are
public static. I am not getting why we need static methods and
variables in servlets and apis' as we all know that on each request a
new instance of servlet is been created.

Speak for yourself, I know just the opposite: while not requirement
(AFAIK) a single servlet instance handles all the requests. Tagging a
servlet class with the SingleThreadModel [1] interface may make the
servlet container create different servlet instances to handle the
different requests but may synchronize the access to a single servlet
instance, also.

[1]
http://java.sun.com/products/servlet/2.5/docs/servlet-2_5-mr2/javax/servlet/SingleThreadModel.html

It is also possible that the servlet container creates multiple instances of a
servlet, but not nearly as many as there are requests. This is true for
clustered servers, for example, and certainly useful for multi-processor
systems. You very well could see one servlet instance per processor hardware
thread or core. You could theoretically see more than one instance per core,
if a server were smart enough to figure out that I/O or other blocking
operations would make that more efficient.

The bottom line is that you cannot count on there being more than one instance
of a servlet active at a time, nor can you count on there being only one.
 
A

Arne Vajhøj

Lew said:
It is also possible that the servlet container creates multiple
instances of a servlet, but not nearly as many as there are requests.
This is true for clustered servers, for example, and certainly useful
for multi-processor systems. You very well could see one servlet
instance per processor hardware thread or core. You could theoretically
see more than one instance per core, if a server were smart enough to
figure out that I/O or other blocking operations would make that more
efficient.

????

I can really not see the link between cores and instances and
between blocking operations and instances.

Arne
 
L

Lew

Arne said:
????

I can really not see the link between cores and instances and
between blocking operations and instances.

I see my mistake - this would normally be handled by spawning a new thread on
the current instance, not by creating new instances.

Never mind.
 
G

Garg

This is what i understood.
* Multi threading means that same instance of a program is running. It
doesn't mean that two separate instances of the program is running.
* Servlet container is responsible for the creation, execution and
destruction of the servlet.
* Instance variables are defined in the class and they are tied with
the instance of the class.
* To make the servlet threads safe declare all the variable in the
method. It makes them local variables otherwise they will remain as
instance variables.
* By putting the synchronize code block, thread safe can be achieve.
* And by using interface SinglethreadModel.
* A public static variable is a global variable.
* A private static variable can be use as singleton.
* Static methods put the method to the class level so creation of the
class object is not required to call that method.

I do have more questions but i will put them once my understanding
gets approved.

Thanks for time
Tarun Garg
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,767
Messages
2,569,572
Members
45,046
Latest member
Gavizuho

Latest Threads

Top