001    // Copyright (c) 2001 Hursh Jain (http://www.mollypages.org) 
002    // The Molly framework is freely distributable under the terms of an
003    // MIT-style license. For details, see the molly pages web site at:
004    // http://www.mollypages.org/. Use, modify, have fun !
005    
006    package fc.web.servlet;
007    
008    import javax.servlet.*;
009    import javax.servlet.http.*;
010    import java.io.*;
011    import java.util.*;
012    import fc.web.servlet.*;
013    import fc.io.*;
014    
015    /**
016    A convenient base class for servlets that use path info (must
017    be path mapped; extension mapped servlets (like *.mp) do not
018    have any path info associated with them.
019    <p>
020    If the request has a non-null non-empty path, then that path
021    is sent to the {@link doPathInfo doPathInfo} method, which 
022    a subclass should implement. A request with an empty or null
023    path info results in sending a 404 error back to the client.
024    
025    @author hursh jain
026    */
027    public abstract class PathServlet extends javax.servlet.http.HttpServlet
028    {
029    private static final boolean dbg = false;
030    
031    public void init(ServletConfig conf) throws ServletException 
032      {
033      super.init();
034      }
035      
036    public void doPost(final HttpServletRequest req, final HttpServletResponse res) 
037    throws ServletException, IOException
038      {
039      doGet(req, res);
040      }
041      
042    public void doGet(final HttpServletRequest req, final HttpServletResponse res) 
043    throws ServletException, IOException
044      {
045      res.setContentType("text/html");
046      final String pathinfo = req.getPathInfo();
047      if (dbg) {
048        final PrintWriter out = res.getWriter();
049        out.println("PathInfo: "+ pathinfo);
050        }
051        
052      if (pathinfo == null || pathinfo.length() == 0) {
053        error(res, "Page not found");
054        return;
055        }
056      
057      doPathInfo(req, res, pathinfo);
058      }
059    
060    /**
061    Sends a 404 (page not found) error to the client. Invoke
062    this method if there is missing/bad path info and return
063    from the servlet.
064    */
065    public void error(final HttpServletResponse res, final String msg)
066    throws IOException
067      {
068      res.sendError(res.SC_NOT_FOUND, msg);
069      }
070    
071    /**
072    The pathinfo parameter is not <tt>intern()</tt>'ed but can be
073    if/as needed in this method.
074    */
075    public abstract void doPathInfo(final HttpServletRequest req, final HttpServletResponse res, String pathinfo)
076    throws ServletException, IOException;
077    }