Dennis Huang wrote:
>
> Hi:
>
> I have a piece of code look like this:
>
> <%! String str=""; %>
> <% for (int i=1; i < 10; i++) { str = i +"<br>"+str; } %>
> Before <B>JSP</B> Output <P>
> <%= str %>
> <P> After <B>JSP</B> Output
>
> This works. The strange thing is each time I click on the Refresh,  <%=str
> %> outputs more and more repeated values(from 9 to 1). It seems <%! String
> str=""; %> does not work from the second time I click on the Refresh button.
> Do you know why? I am using Tomcat and IE5.

That's because the str variable you declare with the JSP declaration
element (<%! ... %>) ends up as an instance variable in the generated
servlet. An instance variable keeps its value between requests, so on the
second request you just add to it.

In general I advice not to use the JSP declaration for variables, since
besides the effect you have seen it also causes multi-threading issues.
If you declare the variable in a scriptlet element instead, it will work
as you expected:

  <% String str=""; %>

Note that the only difference is the lack of an exclamation point (!) in
the scriptlet.

Hans
--
Hans Bergsten           [EMAIL PROTECTED]
Gefion Software         http://www.gefionsoftware.com

===========================================================================
To unsubscribe: mailto [EMAIL PROTECTED] with body: "signoff JSP-INTEREST".
Some relevant FAQs on JSP/Servlets can be found at:

 http://java.sun.com/products/jsp/faq.html
 http://www.esperanto.org.nz/jsp/jspfaq.html
 http://www.jguru.com/jguru/faq/faqpage.jsp?name=JSP
 http://www.jguru.com/jguru/faq/faqpage.jsp?name=Servlets

Reply via email to