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