除了声明静态变量之外,JSP 中还有什么方法可以声明<%! int like=0;%>
?自定义标签中是否有任何标签可以在 JSP 页面上声明静态变量?
如果不是,并且如果我以这种方式声明我的静态整数变量'like' <%! int like=0;%>
,有没有什么方法可以使用 EL 来获取这个变量值${like}
?我想在我的JQuery
函数中使用这个值,并且我知道我可以使用 获得这个值<%=like>
,但我需要其他方式。
不是静态的,但您可以使用JSTL 声明应用程序范围的变量<c:set>
。
<c:set var="like" value="0" scope="application" />
您可以通过简单地让 JSP 将其打印为 JS 变量来在您的 JS/jQuery 代码中获取它。
<script>
var like = ${like};
</script>
如果你想在服务器端声明一个可以在客户端(浏览器)上使用的变量,你可以在你的 web.xml 中声明一个 Servlet 上下文参数:
<web-app>
<context-param>
<param-name>yourParamName</param-name>
<param-value>yourParamValue</param-value>
</context-param>
...
</web-app>
表达式语言有一个隐式对象initParam
,您可以在其中访问 JSP 上的 Servlet 上下文参数:
${initParam.yourParamName}
在 JSP 中使用${staticVar.ClassName_staticPropertyName}
在上下文初始化期间执行以下操作:
servletContext.setAttribute("staticVar", new AbstractMap<String,Object>() {
@Override
public Set<Map.Entry<String, Object>> entrySet() {
throw new UnsupportedOperationException();
}
@Override
public String get(Object key) {
return methodToGetStaticVariableUsingReflection(key)
}
}
使用 EL 访问静态变量是不可能的。如果您将静态变量声明为
<%!
public static int a=343;
%>
因此,您必须将变量声明为<c:set var="a" value="${'hello'}" ></c:set>
使用EL,然后只有您才能使用EL<c:out value="${a}"></c:out>
获得 value( ) 。
您需要将其声明为实例变量,因为仅存在一个 jsp 页面(servlet)副本,并且 _jspService 方法为每个请求调用,因此相同的实例变量可用于所有用户(_jspService 方法)。这意味着,不会为每个请求创建新的 servlet 实例。参考jsp 生命周期。