# File lib_wpm/wpm.rb, line 4284
    def run(driver)
      # setup driver
      driver = MessageManipulator.new(driver)
      driver.set_input_filter(&@input_filter)
      driver.set_output_filter(&@output_filter)

      # setup response
      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

      # run page
      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 for error display
                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