Мой опыт состоит в том, что 90% запросов и/или хранимых процедур не должны быть записаны вообще (по крайней мере, вручную).
Доступ к данным должен быть сгенерирован так или иначе автоматически. Можно решить, требуется ли статично генерировать процедуры во время компиляции или динамично во время выполнения, но когда Вы хотите, добавляет столбец к таблице (свойство к объекту), необходимо изменить только один файл.
Хорошо, вы должны использовать сервлет , а не JSP, но если вам действительно нужно ... добавьте эту директиву вверху страницы:
<%@ page trimDirectiveWhitespaces="true" %>
Или в разделе jsp-config ваш web.xml
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<trim-directive-whitespaces>true</trim-directive-whitespaces>
</jsp-property-group>
</jsp-config>
Также flush
/ close
the OutputStream
и вернитесь, когда закончите.
dataOutput.flush();
dataOutput.close();
return;
JSP - это среда представления, и обычно не предполагается, что она содержит в себе какую-либо программную логику. Как предложил скаффман, используйте чистые сервлеты или любую веб-платформу MVC для достижения желаемого.
Проблема в том, что ваш JSP обращается напрямую к ответу OutputStream
. Технически это не запрещено, но это не очень хорошая идея.
В частности, вы вызываете response.getOutputStream ()
и записываете в него данные. Позже, когда механизм JSP пытается сбросить ответ, он терпит неудачу, потому что ваш код уже «потребовал» ответ. Приложение может вызвать getOutputStream
или getWriter
для любого заданного ответа, ему не разрешено делать оба. Механизмы JSP используют getWriter
, поэтому вы не можете вызывать getOutputStream
.
Вы должны писать этот код как сервлет, а не JSP. JSP действительно подходят только для текстового вывода, содержащегося в JSP. Вы можете видеть это там ' в вашем JSP нет фактического вывода текста, он содержит только java.