annotate Lib/IMPL/Web/Application/Response.pm @ 59:0f3e369553bd

Rewritten property implementation (probably become slower but more flexible) Configuration infrastructure in progress (in the aspect of the lazy activation) Initial concept for the code generator
author wizard
date Tue, 09 Mar 2010 02:50:45 +0300
parents Lib/IMPL/Web/Response.pm@a35b60b16a99
children 76b878ad6596
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
59
0f3e369553bd Rewritten property implementation (probably become slower but more flexible)
wizard
parents: 58
diff changeset
1 package IMPL::Web::Application::Response;
57
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
2 use strict;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
3
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
4 use base qw(IMPL::Object IMPL::Object::Autofill);
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
5
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
6 require IMPL::Exception;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
7 require CGI;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
8 require CGI::Cookie;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
9
58
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
10 use Carp;
57
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
11 use IMPL::Class::Property;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
12
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
13 BEGIN {
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
14 public property query => prop_get | owner_set; # cgi query
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
15 public property status => prop_all, { validator => \&_checkHeaderPrinted };
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
16 public property contentType => prop_all, { validator => \&_checkHeaderPrinted }; # String
58
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
17 public property charset => { get => \&_charset, set => \&_charset }, { validator => \&_checkHeaderPrinted };
57
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
18 public property expires => prop_all, { validator => \&_checkHeaderPrinted };
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
19 public property cookies => prop_all, { validator => \&_checkHeaderPrinted }; # Hash
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
20
58
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
21 public property buffered => prop_all, { validator => \&_canChangeBuffer }; # Boolean
57
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
22 public property streamOut => prop_get | owner_set; # stream
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
23 public property streamBody => {get => \&getStreamBody }; # stream
58
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
24 public property isHeaderPrinted => prop_get | owner_set; # Boolean
57
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
25
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
26 private property _bufferBody => prop_all;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
27 private property _streamBody => prop_all;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
28 }
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
29
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
30 __PACKAGE__->PassThroughArgs;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
31
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
32 sub CTOR {
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
33 my ($this,%args) = @_;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
34
58
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
35 $this->query(CGI->new($this->query() | {})) unless $this->query;
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
36 $this->charset($this->query->charset) unless $this->charset;
57
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
37
58
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
38 $this->streamOut(*STDOUT) unless $this->streamOut;
57
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
39 }
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
40
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
41 sub _checkHeaderPrinted {
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
42 my ($this,$value) = @_;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
43
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
44 die new IMPL::InvalidOperationException() if $this->isHeaderPrinted;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
45 }
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
46
58
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
47 sub _canChangeBuffer {
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
48 my ($this,$value) = @_;
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
49
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
50 die new IMPL::InvalidOperationException() if $this->isHeaderPrinted or $this->_streamBody;
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
51 }
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
52
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
53 sub _charset {
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
54 my $this = shift;
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
55
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
56 return $this->query->charset(@_);
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
57 }
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
58
57
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
59 sub _PrintHeader {
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
60 my ($this) = @_;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
61
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
62 unless ($this->isHeaderPrinted) {
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
63 $this->isHeaderPrinted(1);
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
64
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
65 my %opt;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
66
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
67 $opt{-type} = $this->contentType if $this->contentType;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
68 $opt{-status} = $this->status if $this->status;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
69 $opt{-expires} = $this->expires if $this->expires;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
70
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
71 my $refCookies = $this->cookies;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
72 $opt{-cookie} = [map CGI::Cookie->new(-name => $_, $refCookies->{$_} ), keys %$refCookies] if $refCookies;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
73
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
74 my $hOut = $this->streamOut;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
75
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
76 print $hOut $this->query->header(
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
77 %opt
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
78 );
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
79 }
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
80 }
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
81
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
82 sub getStreamBody {
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
83 my ($this) = @_;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
84
58
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
85 return undef unless $this->streamOut;
57
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
86
58
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
87 unless ($this->_streamBody) {
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
88 if ($this->buffered) {
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
89 my $buffer = "";
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
90 $this->_bufferBody(\$buffer);
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
91
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
92 open my $hBody, ">", \$buffer or die new IMPL::Exception("Failed to create buffer",$!);
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
93
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
94 $this->_streamBody($hBody);
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
95 } else {
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
96 $this->_PrintHeader();
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
97 $this->_streamBody($this->streamOut);
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
98 }
57
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
99 }
58
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
100
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
101 return $this->_streamBody;
57
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
102 }
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
103
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
104 sub Complete {
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
105 my ($this) = @_;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
106
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
107 return 0 unless $this->streamOut;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
108
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
109 my $hOut = $this->streamOut;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
110
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
111 $this->_PrintHeader();
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
112
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
113 if ($this->buffered) {
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
114 print $hOut ${$this->_bufferBody};
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
115 }
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
116
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
117 $this->_streamBody(undef);
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
118 $this->_bufferBody(undef);
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
119 $this->streamOut(undef);
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
120
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
121 return 1;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
122 }
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
123
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
124 sub Discard {
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
125 my ($this) = @_;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
126
58
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
127 carp "Discarding sent response" if $this->isHeaderPrinted;
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
128
57
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
129 $this->_streamBody(undef);
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
130 $this->_bufferBody(undef);
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
131 $this->streamOut(undef);
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
132 }
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
133
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
134 1;
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
135
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
136 __END__
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
137
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
138 =pod
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
139
58
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
140 =head1 DESCRIPTION
57
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
141
58
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
142 Ответ сервера на CGI запрос, позволяет сформировать основные свойства заголовка и тело запроса.
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
143
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
144 Объект позволяет буфферизировать вывод в тело ответа, что позволяет отменить или изменить
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
145 ответ в последний момент.
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
146
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
147 Свойство C< isHeaderPrinted > можно использовать для определения были ли отправлены какие-нибудь
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
148 данные клиенту.
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
149
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
150 =head1 PROPERTIES
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
151
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
152 =head2 HTTP Header
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
153
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
154 Свойства отвечающие за заголовок HTTP ответа. Эти своства могут быть изменены до тех пор пока
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
155 не будет отправлен заголовок. В противном случае выдается исключение C< IMPL::InvalidOperationException >.
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
156
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
157 =over
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
158
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
159 =item C< query >
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
160
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
161 CGI запрос, который используется для вывода данных, заголовка и пр. Существует всегда.
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
162
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
163 =item C< status >
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
164
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
165 Код ошибки HTTP. Например, '200 OK'. По умолчанию не установлен, при отправке клиенту бедт отправлен '200 ОК'.
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
166
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
167 =item C< contentType >
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
168
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
169 Тип MIME. По умолчанию не установлен, подразумивается 'text/html'.
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
170
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
171 =item C< charset >
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
172
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
173 Кодировка, синоним свойства query->charset.
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
174
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
175 =item C< expires >
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
176
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
177 Определяет время жизни контента, например '+10m'. По умолчанию не задано и не передается.
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
178
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
179 =item C< cookies >
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
180
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
181 Хеш массив с cookies, например C< { cart => ['foo','bar'], display => 'list' } >.
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
182
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
183 =back
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
184
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
185 =head2 Response behaviour
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
186
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
187 Свойства отвечающие за поведение ответа.
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
188
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
189 =over
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
190
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
191 =item C< buffered >
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
192
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
193 C< True > - то тело ответа пишется в буффер и будет отправлено при вызове метода C< Complete >,
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
194 заголовок также будет отправлен после вызова метода C< Complete >.
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
195
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
196 C< False > - тело ответа пишется непосредственно в поток к клиенту, при этом заголовок
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
197 будет отправлен при первом обращении к свойству C< streamBody >
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
198
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
199 Это свойство можно менять до первого обращения к потоку для записи в тело ответа.
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
200
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
201 =item C< streamOut >
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
202
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
203 Стандартный вывод CGI приложения.
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
204
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
205 =item C< streamBody >
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
206
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
207 Поток для записи в тело ответа.
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
208
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
209 =item C< isHeadPrinted >
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
210
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
211 Признак того, что заголовок уже был отправлен клиенту.
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
212
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
213 =back
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
214
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
215 =head1 METHODS
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
216
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
217 =over
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
218
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
219 =item C< Complete >
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
220
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
221 Завершает отправку ответа.
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
222
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
223 =item C< Discard >
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
224
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
225 Отменяет отправку ответа, при этом если часть данных (например, заголовок)
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
226 уже была отправлена, выдает предупреждение в STDERR.
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
227
a35b60b16a99 Configuration, late activation
wizard
parents: 57
diff changeset
228 =back
57
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
229
bf59ee1cd506 Web application main class functionality
wizard
parents:
diff changeset
230 =cut