当我可以将 -6ren">
gpt4 book ai didi

java - (jsp) scriptlet 何时运行它们的 (Java) 代码?

转载 作者:行者123 更新时间:2023-11-30 08:09:24 24 4
gpt4 key购买 nike

我正在处理如下代码的空指针异常:

<%
SessionData session = getSessionData(request);
Webpage webPage = null;
if (session!= null) {
webPage = session.getWebPage();
}
%>

<script type="text/javascript">

//NullPointer happens here, webPage is null when the session is lost
<tags:ComboBox
comboBox="<%=webPage.getComboBox()%>" />

</script>

当我可以将 if (session!=null 的结尾移动到 javascript 之后时,我感到很惊讶,当 session 为 null 时,它似乎忽略了该代码。

<%
SessionData session = getSessionData(request);
Webpage webPage = null;
if (session!= null) {
webPage = session.getWebPage();
//} move this to below
%>

<script type="text/javascript">

//NullPointer happens here, webPage is null when the session is lost
<tags:ComboBox
comboBox="<%=webPage.getComboBox()%>" />

</script>
<% } %> //moved to here

括号内的 ComboBox 标记的 scriptlet 是否不再运行?我认为它仍会尝试将组合框从网页上移开,但最终仍会得到一个空指针。我是否认为 scriptlet 都在代码实际运行之前就获得了它们的值,这是错误的吗?

(只是想我会提到,有一个包含的脚本可以在没有 session 的情况下重定向页面。我在代码的第一部分得到一个 NullPointer,并在第二部分正确地重定向)

最佳答案

JSP 由 servlet 容器即时编译成 servlet。

这个编译实际上是一种简单的反转:

TEXT1
<% java code %>
TEXT2
<%= java expression %>
TEXT3

编译为:

out.print("TEXT1");
java code
out.print("TEXT2");
out.print(java expression);
out.print("TEXT3");

所以当你说:

TEXT1
<% if (true) { %>
TEXT2
<% } %>
TEXT3

你得到:

out.print("TEXT1");
if (true) {
out.print("TEXT2");
}
out.print("TEXT3");

为清楚起见,上述示例已缩小,例如忽略换行符,不包括样板 servlet 设置,并且不包括标签库执行的复杂性。

关于java - (jsp) scriptlet 何时运行它们的 (Java) 代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32487951/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com