def run(driver)
driver = MessageManipulator.new(driver)
driver.set_input_filter(&@input_filter)
driver.set_output_filter(&@output_filter)
driver.set_status(@status)
if (@charset && @content_type =~ %r"text/\S+"i) then
driver.set_header('Content-Type', "#{@content_type}; charset=#{@charset}")
else
driver.set_header('Content-Type', @content_type)
end
begin
@running_context.transaction(driver) {
http_method = driver.env['REQUEST_METHOD']
begin
case (http_method)
when 'GET', 'HEAD', 'POST'
if (page_name = driver.curr_page) then
page = @running_context.new_page(page_name, @xml_assist, @page_option)
eval_page(driver, page, http_method)
else
driver.set_location(driver.page_path(@main_page))
driver.set_header('Content-Type', 'text/plain')
driver.write("Jump to #{driver.page_path(@main_page)}.") if (http_method != 'HEAD')
end
else
driver.set_status(405)
driver.set_header('Allow', 'GET, HEAD, POST')
driver.set_header('Content-Type', 'text/plain')
driver.write("Method Not Alllowed.\n") if (http_method != 'HEAD')
end
rescue StandardError, ScriptError
exception = $!
driver.set_status(500)
if (@load_path.look_up(@error_display)) then
begin
@running_context.last_error_page = page_name
@running_context.last_error_widget = @running_context.curr_widget
@running_context.last_error_info = exception
error_page = @running_context.new_page(@error_display, @xml_assist, @page_option)
eval_page(driver, error_page, http_method)
rescue StandardError, ScriptError
debug_print(driver, $!, http_method)
end
else
driver.set_header('Content-Type', 'text/plain')
driver.write($!.to_s) if (http_method != 'HEAD')
end
ensure
@logger.write_access(driver.header('Status'), driver.env, driver.params)
end
}
ensure
driver.close
end
nil
end