comparison Lib/IMPL/Web/Application/Response.pm @ 67:9f5795a10939

Documentation, minor fixes
author wizard
date Fri, 19 Mar 2010 20:06:12 +0300
parents 2840c4c85db8
children 67eb8eaec3d4
comparison
equal deleted inserted replaced
66:f47f93534005 67:9f5795a10939
12 use IMPL::Class::Property; 12 use IMPL::Class::Property;
13 13
14 #todo: add binary method to set a binary encoding, set it automatic when type isn't a text 14 #todo: add binary method to set a binary encoding, set it automatic when type isn't a text
15 15
16 BEGIN { 16 BEGIN {
17 # автозаполнение буде происходить в порядке объявления
17 public property query => prop_get | owner_set; # cgi query 18 public property query => prop_get | owner_set; # cgi query
18 public property status => prop_all, { validator => \&_checkHeaderPrinted }; 19 public property status => prop_all, { validator => \&_checkHeaderPrinted };
19 public property contentType => prop_all, { validator => \&_checkHeaderPrinted }; # String 20 public property contentType => prop_all, { validator => \&_checkHeaderPrinted }; # String
20 public property charset => { get => \&_charset, set => \&_charset }, { validator => \&_checkHeaderPrinted }; 21 public property charset => { get => \&_charset, set => \&_charset }, { validator => \&_checkHeaderPrinted };
21 public property expires => prop_all, { validator => \&_checkHeaderPrinted }; 22 public property expires => prop_all, { validator => \&_checkHeaderPrinted };
30 private property _streamBody => prop_all; 31 private property _streamBody => prop_all;
31 } 32 }
32 33
33 __PACKAGE__->PassThroughArgs; 34 __PACKAGE__->PassThroughArgs;
34 35
36 our %CTOR = (
37 'IMPL::Object::Autofill' => sub {
38 my %args = @_;
39
40 $args{query} = CGI->new($args{query} || {});
41
42 %args;
43 }
44 );
45
35 sub CTOR { 46 sub CTOR {
36 my ($this,%args) = @_; 47 my ($this,%args) = @_;
37
38 $this->query(CGI->new($this->query() | {})) unless $this->query;
39 48
40 if (lc $this->streamOut eq 'memory') { 49 if (lc $this->streamOut eq 'memory') {
41 my $dummy = ''; 50 my $dummy = '';
42 open my $hout, '>:encoding(utf8)', \$dummy or die new IMPL::Exception("Failed to create memory stream",$!); 51 open my $hout, '>:encoding(utf8)', \$dummy or die new IMPL::Exception("Failed to create memory stream",$!);
43 $this->streamOut($hout); 52 $this->streamOut($hout);
163 172
164 __END__ 173 __END__
165 174
166 =pod 175 =pod
167 176
177 =head1 NAME
178
179 C<IMPL::Web::Application::Response> - Ответ веб сервера непосредственно клиенту.
180
168 =head1 DESCRIPTION 181 =head1 DESCRIPTION
169 182
170 Ответ сервера на CGI запрос, позволяет сформировать основные свойства заголовка и тело запроса. 183 C<[Infrastructure]>
184
185 Позволяет сформировать основные свойства заголовка и тело ответа.
186
187 Создается объектом C<IMPL::Web::Application::Action> в процессе обработки запроса.
188
189 Может использоваться обработчиками C<IMPL::Web::QueryHandler> в процессе выполнения запроса.
171 190
172 Объект позволяет буфферизировать вывод в тело ответа, что позволяет отменить или изменить 191 Объект позволяет буфферизировать вывод в тело ответа, что позволяет отменить или изменить
173 ответ в последний момент. 192 ответ в последний момент. Свойство C< isHeaderPrinted > используется для определения факта
174 193 отправлки данных клиенту.
175 Свойство C< isHeaderPrinted > можно использовать для определения были ли отправлены какие-нибудь
176 данные клиенту.
177 194
178 =head1 PROPERTIES 195 =head1 PROPERTIES
179 196
180 =head2 HTTP Header 197 =head2 HTTP Header
181 198
182 Свойства отвечающие за заголовок HTTP ответа. Эти своства могут быть изменены до тех пор пока 199 Свойства отвечающие за заголовок HTTP ответа. Эти своства могут быть изменены до тех пор пока
183 не будет отправлен заголовок. В противном случае выдается исключение C< IMPL::InvalidOperationException >. 200 не будет отправлен заголовок. В противном случае выдается исключение C< IMPL::InvalidOperationException >.
184 201
185 =over 202 =over
186 203
187 =item C< query > 204 =item C< [get] query >
188 205
189 CGI запрос, который используется для вывода данных, заголовка и пр. Существует всегда. 206 CGI запрос, который используется для вывода данных, заголовка и пр. Существует всегда.
190 207
191 =item C< status > 208 =item C< [get,set] status >
192 209
193 Код ошибки HTTP. Например, '200 OK'. По умолчанию не установлен, при отправке клиенту бедт отправлен '200 ОК'. 210 Код ошибки HTTP. Например, '200 OK'. По умолчанию не установлен, при отправке клиенту бедт отправлен '200 ОК'.
194 211
195 =item C< contentType > 212 =item C< [get,set] contentType >
196 213
197 Тип MIME. По умолчанию не установлен, подразумивается 'text/html'. 214 Тип MIME. По умолчанию не установлен, подразумивается 'text/html'.
198 215
199 =item C< charset > 216 =item C< [get,set] charset >
200 217
201 Кодировка, синоним свойства query->charset. 218 Кодировка, синоним свойства query->charset.
202 219
203 =item C< expires > 220 =item C< [get,set] expires >
204 221
205 Определяет время жизни контента, например '+10m'. По умолчанию не задано и не передается. 222 Определяет время жизни контента, например '+10m'. По умолчанию не задано и не передается.
206 223
207 =item C< cookies > 224 =item C< [get,set] cookies >
208 225
209 Хеш массив с cookies, например C< { cart => ['foo','bar'], display => 'list' } >. 226 Хеш массив с cookies, например C< { cart => ['foo','bar'], display => 'list' } >.
210 227
211 =back 228 =back
212 229
214 231
215 Свойства отвечающие за поведение ответа. 232 Свойства отвечающие за поведение ответа.
216 233
217 =over 234 =over
218 235
219 =item C< buffered > 236 =item C< [get,set] buffered >
220 237
221 C< True > - то тело ответа пишется в буффер и будет отправлено при вызове метода C< Complete >, 238 C< True > - то тело ответа пишется в буффер и будет отправлено при вызове метода C< Complete >,
222 заголовок также будет отправлен после вызова метода C< Complete >. 239 заголовок также будет отправлен после вызова метода C< Complete >.
223 240
224 C< False > - тело ответа пишется непосредственно в поток к клиенту, при этом заголовок 241 C< False > - тело ответа пишется непосредственно в поток к клиенту, при этом заголовок
225 будет отправлен при первом обращении к свойству C< streamBody > 242 будет отправлен при первом обращении к свойству C< streamBody >
226 243
227 Это свойство можно менять до первого обращения к потоку для записи в тело ответа. 244 Это свойство можно менять до первого обращения к потоку для записи в тело ответа.
228 245
229 =item C< streamOut > 246 =item C< [get] streamOut >
230 247
231 Стандартный вывод CGI приложения. 248 Стандартный вывод CGI приложения.
232 249
233 =item C< streamBody > 250 =item C< [get] streamBody >
234 251
235 Поток для записи в тело ответа. 252 Поток для записи в тело ответа.
236 253
237 =item C< isHeadPrinted > 254 =item C< [get] isHeadPrinted >
238 255
239 Признак того, что заголовок уже был отправлен клиенту. 256 Признак того, что заголовок уже был отправлен клиенту.
240 257
241 =back 258 =back
242 259
253 Отменяет отправку ответа, при этом если часть данных (например, заголовок) 270 Отменяет отправку ответа, при этом если часть данных (например, заголовок)
254 уже была отправлена, выдает предупреждение в STDERR. 271 уже была отправлена, выдает предупреждение в STDERR.
255 272
256 =back 273 =back
257 274
275 =head1 REMARKS
276
277 Данный объект является автозаполняемым, т.е. все его свойства можно задать через
278 именованные параметры конструктора.
279
258 =cut 280 =cut