JSP声明scriptlet访问bean

时间:2013-09-10 13:37:06

标签: java jsp

我遇到了一个我正在研究的项目(不是我的代码)。我是JSP的初学者,所以找出发生的事情会很棒。

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

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

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

我知道声明scriptlet会转换为java类属性或方法,这些属性或方法在初始化的jsp和正常的scriptlet(&lt; %%&gt;)被转换为_jspService方法时执行一次。但两者的范围是什么?或者为什么我不能从声明scriptlet访问bean?

谢谢!

2 个答案:

答案 0 :(得分: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文件。

(这个例子很简单。)

答案 1 :(得分:1)

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

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

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

<%!

public int sum(int a, int b) {

return a + b;
}

%>