Почему я получаю вывод на стороне клиента и сервера для того же метода JSP?

1

Я видел метод out.write() принимает int, а также строку. Проблема заключается в том, когда я передаю int, который не отображается на стороне клиента или сервера. (Я не знаю точного сервер в чистых компонентах). И когда я передаю строку, она отображается на стороне клиента. Моя проблема заключается в том, почему создатели класса write, разрабатывают этот метод, int для отображения на стороне сервера и строки для отображения на стороне клиента.... ИЛИ я ошибаюсь.., пожалуйста, помогите.., я приложу код ниже.

</head>
<body>

    <% 
    int abc=10;

    out.write(abc);//server side
    out.write(""+abc);//client side
    out.write("<br>");
    out.write(abc);//server side
    out.write("<br>");
    out.write(abc*2);//server side
    out.write("<br>");
    out.write(abc*3);//server side
    out.println("<h1>"+(abc*abc)+"<br>");//client side

    %>

</body>
</html>
  • 1
    Вы пишете сырые байты, когда передаете int. Ваш клиент получает их, но они не для печати.
  • 2
    Что вы подразумеваете под серверной и клиентской сторонами в вашем текущем коде? Все будет выполняться на стороне сервера, потому что это скриптлет (использование которого вы должны избегать).
Показать ещё 3 комментария
Теги:
jsp
servlets

1 ответ

0

Во-первых, весь ваш вывод отправляется клиенту. При использовании out в скриптлете вы получаете JspWriter, который далее, а java.io.Writer при вызове out.write(int) согласно Javadoc -

Записывает один символ. Символ, который должен быть записан, содержится в 16 младших битах заданного целочисленного значения; 16 старших бит игнорируются.

Таким образом, вы пишете символы с целыми значениями 10, 20 и 30. Таблица ASCII определяет 10 как перевод строки, 20 как (управление устройством 4) и 30 как (разделитель записи). Ни один из них не будет корректно отображаться при встраивании в ваш HTML-код и отображен в браузере. Нижний регистр "a" - 97, а "a" - для печати, поэтому, если бы вы

int abc='a';      // 97 - because ASCII 
out.write(abc++); // 'a', then increment to 'b'
out.write(abc++); // 'b', then increment to 'c'
out.write(abc++); // 'c', then increment to 'd'
System.out.println((char) abc); // <-- 'd' on the server.

Если вы хотите выводить на сервер, вы, вероятно, должны использовать (и настраивать) регистратор

Logger logger = Logger.getLogger(this.getClass());
logger.info((char) abc); // <-- 'd' in the server log (assuming info or up)

Наконец, я призываю вас избегать сценариев.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню