看源码,httpresponse.rb好像有个“钩子”叫create_error_page:
if respond_to?(:create_error_page)
create_error_page()
return
end
因此,如果您在 WEBrick::HTTPResponse 中添加自己的名为 create_error_page 的 Ruby 方法,则可以设置自己的标记:
module WEBrick
class HTTPResponse
def create_error_page
@body = ''
@body << <<-_end_of_html_
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD><TITLE>#{HTMLUtils::escape(@reason_phrase)}</TITLE></HEAD>
<BODY>
<H1>#{HTMLUtils::escape(@reason_phrase)}</H1>
<HR>
<P>Custom error page!</P>
</BODY>
</HTML>
_end_of_html_
end
end
end
请注意,您可以访问 @reason_phrase 和 ex.code 等变量。根据您的情况,您可以根据需要使用ex.code(例如:401)设置不同的内容。
这是一个完整示例,您可以在显示自定义错误页面的irb 控制台中运行(请注意,它假定您的文件系统中有一个名为Public 的目录):
require 'webrick'
module WEBrick
class HTTPResponse
def create_error_page
@body = ''
@body << <<-_end_of_html_
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN">
<HTML>
<HEAD><TITLE>#{HTMLUtils::escape(@reason_phrase)}</TITLE></HEAD>
<BODY>
<H1>#{HTMLUtils::escape(@reason_phrase)}</H1>
<HR>
<P>Custom error page!</P>
</BODY>
</HTML>
_end_of_html_
end
end
end
root = File.expand_path '~/Public'
server = WEBrick::HTTPServer.new :Port => 8000, :DocumentRoot => root
trap 'INT' do server.shutdown end
server.start
当您转到http://localhost:8000/bogus(一个不存在的页面)时,您应该会看到自定义错误页面,如下所示:
希望对您有所帮助! :-]