def run
abort_on_writing = false
begin
req_method = @driver.env['REQUEST_METHOD']
case (req_method)
when 'GET', 'HEAD', 'POST'
if (page_name = @driver.curr_page) then
page = Page.new(page_name, @driver, @xml_assist, @base_dir, @page_option)
page.compile
page.setup
page.run
page.follow
page.make_page do |page_text|
abort_on_writing = true
@driver.write(page_text) if (req_method != 'HEAD')
end
@logger.write_access(@driver.header('Status'), @driver.env, @driver.params)
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)}.")
end
else
@driver.set_status(405)
@driver.set_header('Allow', 'GET, HEAD')
@driver.set_header('Content-Type', 'text/plain')
@driver.write("Method Not Alllowed.\n")
end
rescue StandardError, ScriptError
if (abort_on_writing) then
if (@debug) then
@driver.write("<h1 style=\"color: red\">Error on writing a HTTP message</h1>\n")
@driver.write("<dl>\n")
@driver.write("<dt style=\"font-style: italic\">message</dt><dd>#{escapeHTML($!.message)}</dd>\n")
@driver.write("<dt style=\"font-style: italic\">type</dt><dd>#{escapeHTML($!.class.to_s)}</dd>\n")
@driver.write("<dt style=\"font-style: italic\">backtrace</dt>\n")
@driver.write("<dd>\n")
@driver.write("<ol>\n")
for frame in $!.backtrace
@driver.write("<li>#{escapeHTML(frame)}</li>\n")
end
@driver.write("</ol>\n")
@driver.write("</dd>\n")
@driver.write("</dl>\n")
end
else
@driver.set_status(500)
@driver.set_header('Content-Type', 'text/html')
@driver.write("<html>\n")
@driver.write("<head><title>500 Internal Server Error</title></head>\n")
@driver.write("<body>\n")
@driver.write("<h1>500 Internal Server Error</h1>\n")
@driver.write("<h2>Error message</h2>\n")
@driver.write("<p>#{escapeHTML($!.message)}</p>\n")
if (@debug) then
@driver.write("<h2>Error type</h2>\n")
@driver.write("<p>#{escapeHTML($!.class.to_s)}</p>\n")
@driver.write("<h2>Backtrace</h2>\n")
@driver.write("<ol>\n")
for frame in $!.backtrace
@driver.write("<li>#{escapeHTML(frame)}</li>\n")
end
@driver.write("</ol>\n")
end
@driver.write("</body>\n")
@driver.write("</html>\n")
@logger.write_access(@driver.header('Status'), @driver.env, @driver.params)
end
ensure
@driver.close
end
nil
end