removed implementation from APPLICATION , RESPONSE and REQUEST classes

This commit is contained in:
Jocelyn Fiat
2011-07-27 15:11:07 +02:00
parent 4075b08b7e
commit 694c0a193c
5 changed files with 85 additions and 66 deletions

View File

@@ -20,7 +20,7 @@ feature -- Process request
if not rescued then
pre_execute (env)
req := new_request (env, a_input)
res := new_response (a_output)
res := new_response (req, a_output)
execute (req, res)
post_execute (req, res)
else
@@ -56,13 +56,6 @@ feature {NONE} -- Execution
rescue_execute (req: detachable GW_REQUEST; res: detachable GW_RESPONSE; a_exception: detachable EXCEPTION)
-- Operation processed on rescue of `execute'
do
if
req /= Void and res /= Void
and a_exception /= Void and then attached a_exception.exception_trace as l_trace
then
res.write_header ({HTTP_STATUS_CODE}.internal_server_error, Void)
res.write_string ("<pre>" + l_trace + "</pre>")
end
post_execute (req, res)
end
@@ -76,8 +69,8 @@ feature -- Factory
deferred
end
new_response (a_output: GW_OUTPUT_STREAM): GW_RESPONSE
-- New Response based on `a_output'
new_response (req: GW_REQUEST; a_output: GW_OUTPUT_STREAM): GW_RESPONSE
-- New Response based on `req' and `a_output'
--| note: you can redefine this function to create your own
--| descendant of GW_RESPONSE , or even to reuse/recycle existing
--| instance of GW_RESPONSE

View File

@@ -11,7 +11,8 @@ deferred class
inherit
GW_APPLICATION
redefine
process
process,
rescue_execute
end
feature -- Access
@@ -28,6 +29,19 @@ feature -- Execution
Precursor (env, a_input, a_output)
end
rescue_execute (req: detachable GW_REQUEST; res: detachable GW_RESPONSE; a_exception: detachable EXCEPTION)
-- Operation processed on rescue of `execute'
do
if
req /= Void and res /= Void
and a_exception /= Void and then attached a_exception.exception_trace as l_trace
then
res.write_header ({HTTP_STATUS_CODE}.internal_server_error, Void)
res.write_string ("<pre>" + l_trace + "</pre>")
end
Precursor (req, res, a_exception)
end
feature -- Factory
new_request (env: GW_ENVIRONMENT; a_input: GW_INPUT_STREAM): GW_REQUEST
@@ -36,7 +50,7 @@ feature -- Factory
Result.execution_variables.set_variable (request_count.out, "REQUEST_COUNT")
end
new_response (a_output: GW_OUTPUT_STREAM): GW_RESPONSE
new_response (req: GW_REQUEST; a_output: GW_OUTPUT_STREAM): GW_RESPONSE
do
create {GW_RESPONSE_IMP} Result.make (a_output)
end

View File

@@ -28,15 +28,7 @@ feature {NONE} -- Initialization
body: STRING_8
feature -- Status setting
set_status_code (c: INTEGER)
-- Set the status code of the response
do
header.put_status (c)
end
feature -- Output operation
feature {NONE} -- Status output
write (s: STRING)
-- Send the content of `s'
@@ -44,6 +36,8 @@ feature -- Output operation
body.append (s)
end
feature -- Output operation
write_file_content (fn: STRING)
-- Send the content of file `fn'
local
@@ -73,6 +67,7 @@ feature {GW_APPLICATION} -- Commit
commit (a_output: GW_OUTPUT_STREAM)
do
a_output.put_status (status_code)
header.send_to (a_output)
write (body)
Precursor (a_output)

View File

@@ -11,9 +11,9 @@ feature {GW_APPLICATION} -- Commit
commit (a_output_stream: GW_OUTPUT_STREAM)
-- Commit the current response
do
--| To be redefined as needed, to flush, or what you need...
a_output_stream.flush
deferred
ensure
status_set: is_status_set
end
feature {NONE} -- Core output operation
@@ -27,8 +27,8 @@ feature {NONE} -- Core output operation
feature -- Status setting
is_status_set: BOOLEAN
do
Result := status_code /= 0
-- Is status set?
deferred
end
set_status_code (a_code: INTEGER)
@@ -36,23 +36,15 @@ feature -- Status setting
-- Should be done before sending any data back to the client
require
status_not_set: not is_status_set
do
status_code := a_code
write_status (a_code)
deferred
ensure
status_code_set: status_code = a_code
status_set: is_status_set
end
status_code: INTEGER
-- Response status
feature {NONE} -- Status output
write_status (a_code: INTEGER)
-- Send status line for `a_code'
deferred
ensure
status_set: is_status_set
end
feature -- Output operation
@@ -61,8 +53,7 @@ feature -- Output operation
-- Send the string `s'
require
status_set: is_status_set
do
write (s)
deferred
end
write_file_content (fn: STRING)
@@ -74,35 +65,11 @@ feature -- Output operation
feature -- Header output operation
write_header_object (h: GW_HEADER)
-- Send `header' to `output'.
require
status_set: is_status_set
deferred
end
write_header (a_status_code: INTEGER; a_headers: detachable ARRAY [TUPLE [key: STRING; value: STRING]])
-- Send headers with status `a_status', and headers from `a_headers'
require
status_not_set: not is_status_set
local
h: GW_HEADER
i,n: INTEGER
do
set_status_code (a_status_code)
create h.make
if a_headers /= Void then
from
i := a_headers.lower
n := a_headers.upper
until
i > n
loop
h.put_header_key_value (a_headers[i].key, a_headers[i].value)
i := i + 1
end
end
write_header_object (h)
deferred
ensure
status_set: is_status_set
end

View File

@@ -20,6 +20,14 @@ feature {NONE} -- Initialization
output := a_output
end
feature {GW_APPLICATION} -- Commit
commit (a_output_stream: GW_OUTPUT_STREAM)
-- Commit the current response
do
a_output_stream.flush
end
feature {NONE} -- Core output operation
write (s: STRING)
@@ -28,28 +36,70 @@ feature {NONE} -- Core output operation
output.put_string (s)
end
feature {NONE} -- Status output
feature -- Status setting
write_status (a_code: INTEGER)
-- Send status line for `a_code'
is_status_set: BOOLEAN
do
Result := status_code /= 0
end
set_status_code (a_code: INTEGER)
-- Set response status code
-- Should be done before sending any data back to the client
do
status_code := a_code
output.put_status_line (a_code)
end
status_code: INTEGER
-- Response status
feature -- Output operation
write_string (s: STRING)
-- Send the string `s'
do
write (s)
end
write_file_content (fn: STRING)
-- Send the content of file `fn'
do
output.put_file_content (fn)
end
feature -- Header output operation
write_header_object (h: GW_HEADER)
-- Send `header' to `output'.
require
status_set: is_status_set
do
h.send_to (Current)
end
write_header (a_status_code: INTEGER; a_headers: detachable ARRAY [TUPLE [key: STRING; value: STRING]])
-- Send headers with status `a_status', and headers from `a_headers'
local
h: GW_HEADER
i,n: INTEGER
do
set_status_code (a_status_code)
create h.make
if a_headers /= Void then
from
i := a_headers.lower
n := a_headers.upper
until
i > n
loop
h.put_header_key_value (a_headers[i].key, a_headers[i].value)
i := i + 1
end
end
write_header_object (h)
end
feature {NONE} -- Implementation: Access
output: GW_OUTPUT_STREAM