Java 刷新时重置scriplet变量

Java 刷新时重置scriplet变量,java,jsp,scriptlet,Java,Jsp,Scriptlet,我有一张桌子,我想把这些行编号 在我的jsp中,我有如下内容: <%! int i = 0; %> <c:forEach items="${clients}" var="client"> <tr> <td align="center"><%= ++i %></td> <td><c:out value="${client.nomPrenom}"/>&l

我有一张桌子,我想把这些行编号

在我的jsp中,我有如下内容:

<%! int i = 0; %> 
 <c:forEach items="${clients}" var="client">  
    <tr>  
       <td align="center"><%= ++i %></td>  
       <td><c:out value="${client.nomPrenom}"/></td>  
....

....
我的问题是当我刷新页面时,变量I没有重置为0。它继续++


我做错了什么?

服务器容器将JSP转换为servlet。每次刷新页面时,都会调用jsp服务

将JSP转换为servlet代码:

public class HelloWorld2$jsp extends HttpJspBase {
        //code declare inside <%! %> method goes here
        public void _jspService(HttpServletRequest request,
                HttpServletResponse response)

        {
            // code declare inside <% %> method goes here

        }
    }
公共类HelloWorld2$jsp扩展了HttpJspBase{
//这里是代码声明内部方法
public void\u jspService(HttpServletRequest),
HttpServletResponse(响应)
{
//这里是代码声明内部方法
}
}
而不是

<%! int i = 0; %> 

使用以下代码:

 <% int i = 0; %> 

您可以按如下方式使用jstl,因为几十年来不建议使用scriplets

<c:forEach items="${clients}" var="client" varStatus="loop">  
    <tr>  
       <td align="center"><c:out value="${loop.index}" /></td>  
       <td><c:out value="${client.nomPrenom}"/></td>  
    </tr>
</ c:forEach>  


有关使用jstl和EL的更多信息,请参见,非常感谢您的回答。我现在乱涂乱画很糟糕,但我也确实不知道如何避免它们。我想你的链接会对我很有帮助;-)