I'm right at the beggining of my servlet learning curve, and only got 4 months
java experience anyhow.
I shall be getting the O'Reily book when it's out here.
So forgive this question, and my general ignorance of server side issues.
When a servlet is deployed, what is its life cycle?
when does the program first start running and when does it stop?
Is it reexecuted on every url access?
The counter question of late made me think that it runs always, otherwise the
counter would unpredictably be reset.
mike
----- Original Message -----
From: "Nic Ferrier" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Saturday, April 21, 2001 1:09 AM
Subject: Re: [Re: Servlets constructors]
> >>> Saumont Pierre-Yves <[EMAIL PROTECTED]> 21-Apr-01 12:14:44 AM >>>
> >Hey Mark, why do you need to use init() when you can do :
>
> public class CounterCons
> extends HttpServlet
> {
> int count = 1122;
>
> public void doGet(HttpServletRequest req...
> throws ...
> {
> PrintWriter out=res.getWriter();
> count++;
> out.println(count);
> }
> }
>
> >That's not exactly the same, but it's probably close
> >enough to what he want's !
>
> Mark was wrong in stating:
>
> servlets, like applets, do not take constructors.
>
> Both applets and servlets *must* have constructors because *all*
> objects in Java have constructors (except the primordial cl).
>
> It's just that Servlets and Applets have constructors with no
> arguments and it's not possible to provide a constructor that does
> have arguments.
>
>
> The original questionner asked why he couldn't have a cons like
> this:
>
> > CounterCons(int i)
> > {
> > count=i;
> > }
>
> He would have done well to ask himself:
>
> If I have a cons like this, how is the servlet to know what
> value should be passed to "i" when the servlet is constructed?
> How is the servlet constructed? Do I have control over that
> process?
>
>
> If he'd thought about this he would have worked out that there is no
> mechanism for him to specify an "i" to his servlet because his code
> does not create it.
>
> So how does a servlet get created? It's by the magic of the Java
> machine. The magic is fairly fundamental to Java so it's worth
> knowing.
>
> The servlet engine always knows the class name of the servlet it's
> going to load. When the servlet needs to be loaded the servlet engine
> will do something like this:
>
> Servlet s=(Servlet)Class.forName(servletName).newInstance();
>
> This creates a Class object by the name of the class. That is magic
> provided by the ClassLoader. You could for example do this:
>
> Class stringbufclaz=Class.forName("java.lang.StringBuffer");
>
> to get a Class object which represents the class of all
> StringBuffers. Once you have the Class object calling:
>
> Class.newInstance()
>
> returns an object of that class by calling the no-arg constructor of
> the class. If the class doesn't have a no-arg constructor then
> newInstance() fails and the class can't be loaded.
>
> It could still be loaded because we could use the reflection methods
> of the Class class to find a constructor that we could invoke...
>
> But in a servlet engine that would take time and would be
> semantically confusing (how is the servlet engine to know what the
> arguments are actually for?)
>
> Therefore the API is designed to insisit on a no-arg constructor.
>
>
> That doesn't stop you using the no-arg constructor, for example:
>
> class MyServ
> extends HttpServlet
> {
>
> int counter=-1;
>
> public MyServ
> {
> counter=0;
> }
>
> public void doGet(...
> throws ...
> {
> counter++;
> }
> }
>
> which is exactly equivalent to what Saumont suggested.
>
>
> The original questionner goes on to do this:
>
> > public void doGet(....
> > throws ...
> > {
> > new CounterCons(1122);
> > PrintWriter out=res.getWriter();
> > count++;
> > out.println(count);
> > }
>
> Which shows that he's really lost it in relation to this problem.
>
> Why is this so dense? Because he's creating a new instance of his
> servlet inside an instance of his servlet. He's simply discarding the
> instance because he doesn't assign it so counter he's tried to assign
> won't get used anyway.
>
> Of course, his code won't compile anyway, because he hasn't supplied
> a no-arg constructor. If he gets it to compile (by calling super() in
> his cons) then it won't load in the servlet engine because there is no
> no-arg constructor.
>
> I suspect he's a bit confused about the difference between instance
> methods and static methods and that's getting really off-topic so I
> won't go there.
>
>
> In summation I would like to point out that Mark was absolutely spot
> on when he said that the best way to deal with this is to use the
> init(ServletConfig) method. So this post has been a bit of a waste of
> time really /8->
>
>
> Nic Ferrier
>
> ___________________________________________________________________________
> To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
> of the message "signoff SERVLET-INTEREST".
>
> Archives: http://archives.java.sun.com/archives/servlet-interest.html
> Resources: http://java.sun.com/products/servlet/external-resources.html
> LISTSERV Help: http://www.lsoft.com/manuals/user/user.html
___________________________________________________________________________
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff SERVLET-INTEREST".
Archives: http://archives.java.sun.com/archives/servlet-interest.html
Resources: http://java.sun.com/products/servlet/external-resources.html
LISTSERV Help: http://www.lsoft.com/manuals/user/user.html