首页 > 解决方案 > 如何防止执行jsp scriptlet?

问题描述

当我运行程序时,条件内的两个语句都被执行了

<script>
    if (true) {
       <%System.out.println("true");%>
    } else {
       <%System.out.println("false");%>
    }
</script>

标签: javajspscriptlet

解决方案


Java 和 JavaScript 完全不同——尽管它们的名称相似。它们与“疼痛”和“绘画”这两个词有很多共同点。

  • JSP 代码在用户收到页面之前在服务器中执行。
  • 在服务器执行完所有代码、组装页面并将其传送到用户的浏览器之后,JavaScript 在最终用户的计算机上执行。

服务器不处理除 JSP 标记或已知标记库(如 JSTL)之外的任何 JSP 内容。该<script>元素及其内容只是按原样添加到最终页面,而不会被解释或执行。

换句话说,if (true)对服务器没有任何意义。它忽略 JavaScript,只执行<%...<code>%> 部分。

当页面最终交付给浏览器时,源代码将包含以下内容:

<script>
    if (true) {

    } else {

    }
</script>

…因为 JavaScript 没有在服务器端以任何方式处理。HTML 页面中的 JavaScript 在浏览器中运行,而不是在服务器上。

你可能想要这样的东西:

<%
    if (true) {
       System.out.println("true");
    } else {
       System.out.println("false");
    }
%>

并不是说上面不需要在一个<script>元素中,实际上把它放在一个元素中是没有意义的——因为它<script>包含 JavaScript,这是服务器端的 Java 代码,而不是 JavaScript。


推荐阅读