You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

The 404 Handler

What should the user see when they ask for page that doesn't exist ?
If using Tomcat you can use the web.xml file to specify an error page.

For this example let's assume that your magnolia site is under /index/
and that you have created your own 404.html error page under that..ie

/index/404.html

Edit the magnoliaPublic web.xml (inside webapps\magnoliaPublic\WEB-INF\web.xml)
and add the following section:

  <error-page>
     <error-code>404</error-code>
     <location>/admintemplates/404.jsp</location>
  </error-page> 

Now, create a 404.jsp file inside your \webapps\magnoliaPublic\admintemplates directory
that contains the following jsp code

<%
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
String contextName = request.getContextPath();
String newLocn = contextName + "/index/404.html";
response.setHeader("Location",newLocn);
%>

What will happen is that if a user requests a page that doesn't exist inside
your magnoliaPublic context then Tomcat will redirect the user to the /admintemplates/404.jsp page which then redirects to your /index/404.html page.

Why must you do it this way?? Well, your web.xml has to point to a file that actually exists somewhere in your webapps directory, not to a 'virtual' file in your Magnolia repository. If you doubt this, try replacing /admintemplates/404.jsp with /magnoliaPublic/index/404.html and see what happens. We point the web.xml to a 'real' file and then have that real file perform a redirect to your magnolia generated 404.html file.

This method tested with 2.1-RC4 and 2.1.3

When using magnolia 3.5.x

Now to make this work with magnolia v3.5.x you need to define a bypass for a custom jsp page created above.

Warning

When configuring bypass all the values are applied immediately. In other words, your filter will be applied before it is configured, resulting in a completely broken configuration. Hence you must configure this node elsewhere in the tree and only when fully configured move it to (server/filters/bypasses)

Read what you can do if your bypass configuration is broken.

Go to the configuration menu and create new contentNode anywhere but not at
server/filters/bypasses and call it 404 for this node create dataNode class and set it to info.magnolia.voting.voters.URIStartsWithVoter and dataNode pattern with value pointing to your 404.jsp (i.e. /admintemplates/404.jsp in the case of example above). Once configured, move your node to server/filters/bypasses.

In its previous incarnation on JspWiki, this page was last edited on Mar 31, 2007 10:07:56 PM by Magnolia
Other known authors include :

  • RamonBuckland
  • Jgibbens
  • BorisKraft
  • No labels