JSP中<% %>和<%! %>的区别详解

在JSP(JavaServer Pages)中,<% %><%! %>都是用来插入Java代码的标记,但它们的用途和作用范围有所不同。

  1. <% %>(Scriptlet):

    • 用途:用于插入将直接嵌入到生成的servlet的_jspService方法中的Java代码,相当于在一个方法内部编写的Java代码,因此在其中定义的变量是局部变量。每次客户端发送请求时,容器都会调用该 Servlet 的 _jspService方法来处理请求,所以<% %>里面的代码每次请求时都会执行。
    • 作用范围:仅在请求处理中有效,也就是说它们在每次HTTP请求时都会被执行。
    • 典型用法
      <% 
          int count = 0;
          count++;
          out.println("Count: " + count);
      %>
      
  2. <%! %>(Declaration):

    • 用途:用于声明变量和方法,这些声明会被翻译成servlet类的成员变量或方法。这些代码在整个JSP页面中都有效,可以在多个请求中共享。
    • 作用范围:声明的变量和方法在整个JSP页面中都有效,并且在不同请求中共享同一个实例。
    • 典型用法
      <%! 
          int count = 0;
      
          public void incrementCount() {
              count++;
          }
      %>
      

实例对比

假设有一个JSP页面如下:

<%! 
    int counter = 0;

    public void incrementCounter() {
        counter++;
    }
%>

<%
    incrementCounter();
    out.println("Counter: " + counter);
%>

在这个例子中:

  • counter变量和incrementCounter方法是在<%! %>标记中声明的,因此它们在整个JSP页面中都是类级别的成员变量和方法。
  • <% %>标记中调用了incrementCounter()方法并输出counter的值。

每次请求这个JSP页面时,counter的值都会增加,因为它是一个类级别的成员变量。而如果将counter变量放在<% %>中,每次请求都会重新初始化为0。

总结

  • 使用<% %>插入的代码是在每次请求时执行的,适用于动态内容的生成。
  • 使用<%! %>声明的变量和方法是类级别的,在整个JSP页面中共享和持久存在,适用于需要在多个请求之间共享状态或定义辅助方法。
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值