# File lib_wpm/wpm.rb, line 3826
    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.call_reset
            page.setup
            page.call_reset
            page.run
            page.call_reset
            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