我遇到了一个我正在研究的项目(不是我的代码)。我是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?
谢谢!
答案 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;
}
%>