Как предотвратить выполнение скрипта jsp? - PullRequest
0 голосов
/ 18 февраля 2020

когда я запускаю программу, оба оператора внутри условия выполняются

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

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Java и JavaScript совершенно разные - несмотря на их сходные названия. Они имеют столько же общего, сколько и слова «боль» и «рисование».

  • JSP код выполняется на сервере еще до того, как пользователь получает страницу.
  • JavaScript выполняется на компьютере конечного пользователя, после того как сервер выполнил весь свой код, собрал страницу и доставил ее в браузер пользователя.

Сервер не обрабатывает никакой JSP содержимое, отличное от JSP тегов, или известные библиотеки тегов, такие как JSTL. Этот элемент <script> и его содержимое просто добавляются на конечную страницу как есть, без какой-либо интерпретации или исполнения.

Другими словами, if (true) ничего не значит для сервера. Он игнорирует JavaScript и выполняет только <%%> части.

Когда страница будет окончательно доставлена ​​в браузер, источник будет содержать следующее:

<script>
    if (true) {

    } else {

    }
</script>

… Потому что JavaScript не был обработан каким-либо образом на стороне сервера. JavaScript в HTML страницы запускаются в браузерах, а не на сервере.

Вы, вероятно, хотите что-то вроде этого:

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

Не то, что вышеупомянутое не должно быть в Элемент <script>, и фактически не имеет смысла помещать его в один элемент, поскольку <script> содержит JavaScript, а это код Java на стороне сервера, а не JavaScript.

0 голосов
/ 18 февраля 2020

Вставьте следующий блок XML в web.xml и повторно разверните приложение:

<jsp-config>
  <jsp-property-group>
    <url-pattern>*.jsp</url-pattern>
     <scripting-invalid>true</scripting-invalid>
  </jsp-property-group>
</jsp-config>

Обратите внимание, что <script> используется для кодового блока JavaScript и это не относится к JSP. Следовательно, независимо от того, используете ли вы <script> или нет, скриптлет будет выполняться, если вы не помешаете ему через правильную настройку, как указано выше. Проверьте это для получения дополнительной информации.

...