[tbnl-devel] Handling HTTP errors

Stefan Scholl stesch at no-spoon.de
Tue Aug 3 19:06:51 UTC 2004


On 2004-08-03 07:34:48, Edi Weitz wrote:
> On Sat, 31 Jul 2004 02:10:11 +0200, Stefan Scholl <stesch at no-spoon.de> wrote:
> > There could be different approaches:
> >
> > * Simple hash
> >   A hash with error code as key and handler as value.
> >
> >   + Easy to implement
> >   + Can handle all errors (thrown by handlers _and_ when no
> >     dispatcher is found)
> >   - Not very flexible. Just checks for the code and not for
> >     any request data.
> >
> > * Error dispatcher
> >   Like the normal dispatcher, but checking for the right error
> >   output handler.
> >
> >   + Can handle all errors (thrown by handlers _and_ when no
> >     dispatcher is found)
> >   + Flexible. Can check the code _and_ request data.
> >   - A bit big. The same effort like handling normal requests.
> >
> > * Handler outputs itself and signals that
> >   A handler wants to return a 404. It constructs the output
> >   string and signals the fact that there's no need for TBNL to
> >   build the HTML for the output.
> >
> >   + Easy to implement(? clean?)
> >   + Flexible
> >   - Can't handle all errors. (No handler found? Then the code
> >     won't be executed.)

* Generic function
  Make a specialized method if you want to catch a certain
  error. 
  E. g. (defmethod error-handler ((code (eql #.+http-not-found+)) ...

  + Easy to implement
  + Can handle all errors (thrown by handlers _and_ when no
    dispatcher is found)
  + Let CLOS to the "lookup" work
  + CLOS: You can add :before, :around, :after, ... methods
  - Not very flexible. Just checks for the code and not for any
    request data.


> I agree that this would generally be a good idea. I'm not sure yet
> which of the above-mentioned alternatives I like most or if there's
> another one that would even be better.

Do we need all the features (and more) of Apache's ErrorDocument?
<http://httpd.apache.org/docs/mod/core.html#errordocument>

A function can call the redirect itself.

If you don't need someting similar to the contexts (server
config, virtual host, directory, .htaccess) of ErrorDocument then
a hash table or generic function is enough.

The contexts can be simulated with error dispatcher which checks
the request, too.

But how often would someone need this together with mod_lisp? If
someone wants to emit different error messages for the same error
code but different request data (host, uri, ...) then he could
handle this himself.



Regards,
Stefan






More information about the Tbnl-devel mailing list