0

我遇到了我正在处理的项目(不是我的代码)的情况。我是 JSP 的初学者,所以很高兴知道发生了什么。

所以我有一个这样的代码(它被简化了很多):

<jsp:useBean id="accessManager" scope="session" class="AccessManager" />
<%! Object x = accessManager %>
<% Object y = accessManager %>

第二行不行,它不知道accessManager是什么。第三行(y)有效。

我知道声明 scriptlet 转换为 java 类属性或方法,它们在 jsp 初始化时执行一次,而普通 scriptlet (<% %>) 被转换为 _jspService 方法。但这两者的范围是什么?或者为什么我不能从声明脚本访问 bean?

谢谢!

4

2 回答 2

2

!用于指定无上下文。

如果你使用<%! Object x = accessManager; %>它会产生这样的代码。

class Index {
  Object x = accessManager;
}

如果你使用<% Object x = accessManager; %>它会产生这样的代码:

class Index {
  public void foo(){
    Object x = accessManager;
  }
}

查看 C:\Program Files\apache-tomcat-*\work\Catalina\localhost\*\org\apache\jsp\生成的 .java 文件。

(这个例子很简单。)

于 2013-09-10T13:45:46.583 回答
1

根据您希望在 servlet 中添加代码的位置使用任一声明。

<% code %>插入到 servlet 的服务方法中的表单的 Scriptlet 。因此,它成为您的应用程序逻辑的一部分。

<%! code %>在任何现有方法之外插入到 servlet 类的主体中的Scriptlet 声明。因此,它成为 servlet 类的一部分。它的一个很好的用途是将一个方法插入到 servlet 中,并在服务方法中使用该方法(在 tag 下<% code %>)例如:

<%!

public int sum(int a, int b) {

return a + b;
}

%>
于 2013-09-11T03:49:55.127 回答