JSP中的迭代

时间:2014-05-12 22:57:46

标签: java jsp iteration

这是我的代码

<%@page import="java.util.logging.Logger"%>
<%@page import="java.util.logging.Level"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page isThreadSafe="false"%>
<%! int k = 0;%>
<!DOCTYPE html>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Concurrency</title>
    </head>
    <body>
        <%
            for (int i = 0; i < 10; i++) {

                out.print(k + "->" + i + "</br>");
                k++;
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException ex) {

                }
            }
        %>
</body>
</html>

我无法理解为什么当我在Tomcat上看到结果时,我从10开始。

我的结果

10->0
11->1
12->2
13->3
14->4
15->5
16->6
17->7
18->8
19->9

JSP是否遵循一些规则而不是核心Java规则? 我不明白,为什么k等到我达到10,然后开始打印?

2 个答案:

答案 0 :(得分:0)

这是因为<%! int k = 0;%>使k在执行后留下来。每次运行此页面时,k的最后一个值都会保留在内存中。你可以在&lt; %%&gt;中重置k。阻止,或删除&lt;%! %GT;从代码中完全阻止。

int k=0;
for (int i = 0; i < 10; i++)

答案 1 :(得分:0)

<%! int k = 0;%>将k定义为JSP对应的Servlet

中的字段

for (int i = 0; i < 10; i++)在块级定义i。

对于k来说,随着每个页面请求继续增长是很自然的,因为它会映射到同一个Servlet类,重用k但是获得一个新初始化的i。< / p>

----回应更详细解释的请求----

JSP页面实际上并没有按原样运行。它被传递到编译器并变成.class文件。在将其传递到该编译器之前,需要将其转换为正确的.java文件,并且这种情况的发生方式“大致”如下。

  1. 用引号括住所有“文字”,使其成为String s。
  2. 打开所有“java块”以使它们成为“代码”。
  3. 将所有内容打包在继承自Servlet
  4. 的内容中

    了解“标记”在“Servlet”中的位置可以加深您对JSP的理解。我强烈建议你偷看。

    根据您的Servlet容器,编译器可能不同,但许多可以从命令行以一种形式或方式调用。在许多情况下,这样做是为了“预编译”您的JSP,因此请查找为您的环境预编译的JSP以获得提示。

    通常您会找到命令行选项。如果运气好的话,有时候这些命令行选项包括仅仅生成.java文件的“停止”(或者从.java生成.jsp文件后不删除{{1}}文件的选项文件。