|
|||||||||
ПРЕДЫДУЩИЙ КЛАСС СЛЕДУЮЩИЙ КЛАСС | ФРЭЙМЫ БЕЗ ФРЭЙМОВ | ||||||||
РЕЗЮМЕ: ВНУТРЕННИЙ | ПОЛЕ | КОНСТРУКТОР | МЕТОД | ДЕТАЛИ: ПОЛЕ | КОНСТРУКТОР | МЕТОД |
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[])
,
а за