|
|||||||||
ПРЕДЫДУЩИЙ КЛАСС СЛЕДУЮЩИЙ КЛАСС | ФРЭЙМЫ БЕЗ ФРЭЙМОВ | ||||||||
РЕЗЮМЕ: ВНУТРЕННИЙ | ПОЛЕ | КОНСТРУКТОР | МЕТОД | ДЕТАЛИ: ПОЛЕ | КОНСТРУКТОР | МЕТОД |
java.lang.Object
|
+--java.io.Writer
|
+--javax.servlet.jsp.JspWriter
Акции и шаблонные данные на JSP-странице записываются с использованием JspWriter-объекта, на который ссылаются через неявную переменную out, инициализируемую автоматически, через использование методов в PageContext-объекте.
Этот абстрактный класс эмулирует некоторую функциональность классов java.io.BufferedWriter и java.io.PrintWriter, однако отличие в том, что он взывает java.io.IOException из методов print, в то время как PrintWriter этого не делает.
Буферизация
Начальный/initial JspWriter-объект ассоциируется с PrintWriter-объектом ServletResponse'а способом, зависящим от того, буферизуется страница или нет. Если страница буферизуется, вывод, записываемый в этот JspWriter-объект, будет записываться непосредственно через PrintWriter, который, если необходимо, будет создаваться путём вызова метода getWriter() в объекте response. Но если страница буферизуется, PrintWriter-объект не будет создаваться, пока буфер не очистится и операции типа setContentType() являются законными. Поскольку такая гибкость значительно упрощает программирование, буферизация в JSP-страницах выполняется по умолчанию.
Буферизация затрагивает вопрос: что делать, если буфер заполнен?
Есть два подхода к решению этой проблемы:
Оба подхода являются верными, и, соответственно, оба поддерживаются JSP-технологией. Поведение страницы контролируется атрибутом autoFlush, который по умолчанию - true. В общем, JSP-страницы, которым необходима гарантия корректности и полноты данных, высылаемых клиенту, могут установить атрибут autoFlush в false, что обычно делается в случае, если клиентом является само приложение. С другой стороны, JSP-страницы, отсылающие данные клиенту, могут даже после частичного конструирования установить атрибут autoFlush в true; что делается тогда, когда данные сразу выводятся через браузер. Каждое приложение действует в соответствии со своими потребностями.
Альтернативным было снятие ограничений на размер буфера; но это имело тот недостаток, что вычисления на этапе прогона могли поглотить неограниченное количество ресурсов ОС.
Неявная переменная "out" класса реализации JSP имеет этот тип. Если директива page избирает autoflush="true", тогда все операции I/O (ввода-вывода) этого класса автоматически очищают содержимое буфера, если условие overflow/переполнение могло бы возникнуть при выполнении текущей операции без очистки. Если autoflush="false", тогда все операции I/O (ввода-вывода) этого класса будут вызывать исключение IOException, если при выполнении текущей операции приводит к условию overflow/переполнения буфера.
Writer
,
java.io.BufferedWriter
,
PrintWriter
Поле. Резюме. | |
protected boolean
|
autoFlush
|
protected int
|
bufferSize
|
static int
|
DEFAULT_BUFFER
константа, указывающая, что Writer буферизуется и использует размер буфера по умолчанию для данной реализации. |
static int
|
NO_BUFFER
константа, указывающая, что Writer не буферизует вывод. |
static int
|
UNBOUNDED_BUFFER
константа, указывающая, что Writer буферизуется и размер буфера не ограничен; это используется в BodyContent. |
Поля, унаследованные от класса java.io.Writer |
lock
|
Конструктор. Резюме. | |
protected
|
JspWriter
(int bufferSize,
boolean autoFlush)
protected-конструктор. |
Метод. Резюме. | |
abstract void
|
clear
()
Очищает содержимое буфера. |
abstract void
|
clearBuffer
()
Очищает текущее содержимое буфера. |
abstract void
|
close
()
Закрывает поток, предварительно очистив его. Этот метод не должен вызываться явно для начального/initial JspWriter'а, так как код, генерируемый JSP-контейнером, будет автоматически включать вызов close(). |
abstract void
|
flush
()
Очищает поток. |
int
|
getBufferSize
()
Этот метод возвращает размер буфера, используемого JspWriter'ом. |
abstract int
|
getRemaining
()
Этот метод возвращает количество неиспользуемых байтов буфера. |
boolean
|
isAutoFlush
()
Этот метод указывает, очищается ли JspWriter автоматически. |
abstract void
|
newLine
()
Записывает символы новой строки. |
abstract void
|
print
(boolean b)
Печатает булево значение. |
abstract void
|
print
(char c)
Печатает символ. |
abstract void
|
print
(char[] s)
Печатает массив символов. |
abstract void
|
print
(double d)
Печатает число с плавающей точкой двойной точности. |
abstract void
|
print
(float f)
Печатает число с плавающей точкой. |
abstract void
|
print
(int i)
Печатает целое число. |
abstract void
|
print
(long l)
Печатает длинное целое число. |
abstract void
|
print
(java.lang.Object obj)
Печатает объект. |
abstract void
|
print
(java.lang.String s)
Печатает строку. |
abstract void
|
println
()
Заканчивает текущую строку печатью символов новой строки. |
abstract void
|
println
(boolean x)
Печатает булево значение и затем оканчивает строку. |
abstract void
|
println
(char x)
Печатает символ и затем оканчивает строку. |
abstract void
|
println
(char[] x)
Печатает массив символов и затем оканчивает строку. |
abstract void
|
println
(double x)
Печатает число с плавающей точкой двойной точности и затем оканчивает строку. |
abstract void
|
println
(float x)
Печатает число с плавающей точкой и затем оканчивает строку. |
abstract void
|
println
(int x)
Печатает целое число и затем оканчивает строку. |
abstract void
|
println
(long x)
Печатает длинное целое число и затем оканчивает строку. |
abstract void
|
println
(java.lang.Object x)
Печатает Object и затем оканчивает строку. |
abstract void
|
println
(java.lang.String x)
Печатает String и затем оканчивает строку. |
Методы, унаследованные от класса java.io.Writer |
write,
write,
write,
write,
write
|
Методы, унаследованные от класса java.lang.Object |
clone,
equals,
finalize,
getClass,
hashCode,
notify,
notifyAll,
toString,
wait,
wait,
wait
|
Поле. Детали. |
public static final int NO_BUFFER
public static final int DEFAULT_BUFFER
public static final int UNBOUNDED_BUFFER
protected int bufferSize
protected boolean autoFlush
Конструктор. Детали. |
protected JspWriter(int bufferSize,
boolean autoFlush)
Метод. Детали. |
public abstract void newLine()
throws java.io.IOException
public abstract void print(boolean b)
throws java.io.IOException
String.valueOf(boolean)
,
транслируется в байты в соответствии с кодировкой символов по умолчанию на
данной платформе, и эти байты записываются точно в манере метода Writer.write(int)
.b
- печатаемое boolean
.public abstract void print(char c)
throws java.io.IOException
Writer.write(int)
.c
- печатаемый char
.public abstract void print(int i)
throws java.io.IOException
String.valueOf(int)
,
транслируется в байты в соответствии с кодировкой символов по умолчанию на
данной платформе, и эти байты записываются точно в манере метода Writer.write(int)
.i
- печатаемое int
.java.lang.Integer#toString(int)
public abstract void print(long l)
throws java.io.IOException
String.valueOf(long)
,
транслируется в байты в соответствии с кодировкой символов по умолчанию на
данной платформе, и эти байты записываются точно в манере метода Writer.write(int)
.l
- печатаемое long
.java.lang.Long#toString(long)
public abstract void print(float f)
throws java.io.IOException
String.valueOf(float)
,
транслируется в байты в соответствии с кодировкой символов по умолчанию на
данной платформе, и эти байты записываются точно в манере метода Writer.write(int)
.f
- печатаемое float
.java.lang.Float#toString(float)
public abstract void print(double d)
throws java.io.IOException
String.valueOf(double)
, транслируется в байты в
соответствии с кодировкой символов по умолчанию на данной платформе, и эти байты
записываются точно в манере метода Writer.write(int)
.d
- печатаемое double
.java.lang.Double#toString(double)
public abstract void print(char[] s)
throws java.io.IOException
Writer.write(int)
.s
- массив печатаемых chars.s
равно null
public abstract void print(java.lang.String s)
throws java.io.IOException
null
, тогда печатается строка
"null"
. Иначе, символы строки конвертируются в байты в
соответствии с кодировкой символов по умолчанию на данной платформе, и эти байты
записываются точно в манере метода Writer.write(int)
.s
- печатаемая String
.public abstract void print(java.lang.Object obj)
throws java.io.IOException
String.valueOf(Object)
,
транслируется в байты в соответствии с кодировкой символов по умолчанию на
данной платформе, и эти байты записываются точно в манере метода Writer.write(int
.obj
- печатаемый Object
.Object.toString()
public abstract void println()
throws java.io.IOException
line.separator
, и это не обязательно один символ новой строки ('\n'
).public abstract void println(boolean x)
throws java.io.IOException
print(boolean)
, а
затем -
println()
.public abstract void println(char x)
throws java.io.IOException
print(char)
, а затем -
println()
.public abstract void println(int x)
throws java.io.IOException
print(int)
, а
затем -
println()
.public abstract void println(long x)
throws java.io.IOException
print(long)
,
а затем -
println()
.public abstract void println(float x)
throws java.io.IOException
print(float)
,
а затем -
println()
.public abstract void println(double x)
throws java.io.IOException
print(double)
,
а затем -
println()
.public abstract void println(char[] x)
throws java.io.IOException
print(
char[])
,
а затем -
println()
.public abstract void println(java.lang.String x)
throws java.io.IOException
print(String)
,
а затем -
println()
.public abstract void println(java.lang.Object x)
throws java.io.IOException
print(Object)
,
а затем -
println()
.public abstract void clear()
throws java.io.IOException
public abstract void clearBuffer()
throws java.io.IOException
public abstract void flush()
throws java.io.IOException
Этот метод может быть вызван неявно, если размер буфера превышен.
После того как поток был закрыт, последующие вызовы методов write() или flush() приводят к вызову исключения IOException.
public abstract void close()
throws java.io.IOException
Этот метод не должен вызываться явно для начального/initial JspWriter'а, так как код, генерируемый JSP-контейнером, будет автоматически включать вызов close().
Закрытие уже закрытого потока, в отличие от flush(), не даст никакого эффекта.
public int getBufferSize()
public abstract int getRemaining()
public boolean isAutoFlush()
|
|||||||||
ПРЕДЫДУЩИЙ КЛАСС СЛЕДУЮЩИЙ КЛАСС | ФРЭЙМЫ БЕЗ ФРЭЙМОВ | ||||||||
РЕЗЮМЕ: ВНУТРЕННИЙ | ПОЛЕ | КОНСТРУКТОР | МЕТОД | ДЕТАЛИ: ПОЛЕ | КОНСТРУКТОР | МЕТОД |