home *** CD-ROM | disk | FTP | other *** search
/ Programming Languages Suite / ProgLangD.iso / VCAFE.3.0A / Sample.bin / ESDServlet.java < prev    next >
Text File  |  1998-10-17  |  6KB  |  234 lines

  1. package symantec.sourcebook.servlet;
  2.  
  3. import java.io.*;
  4. import javax.servlet.*;
  5. import javax.servlet.http.*;
  6.  
  7. public class ESDServlet extends HttpServlet
  8. {
  9.     
  10.    // constants for pages and their numbers
  11.     
  12.     protected static int NOFORM_PAGE_NUM = 0;
  13.     protected static int ENTERINFO_PAGE_NUM = 1;
  14.     protected static int VERIFYINFO_PAGE_NUM = 2;
  15.     protected static int OWNER_PAGE_NUM = 3;
  16.     protected static int DOWNLOAD_PAGE_NUM = 4;
  17.     protected static int SUCCESS_PAGE_NUM = 5;
  18.     protected static int ERROR_PAGE_NUM = 6;
  19.     
  20.     /**
  21.      *  Class names of the classes that handle each page.
  22.      *
  23.      */
  24.     public  String[] pageHandlerNames =  {
  25.                             "symantec.sourcebook.servlet.PHNoForm",
  26.                             "symantec.sourcebook.servlet.PHEnterInfo",
  27.                             "symantec.sourcebook.servlet.PHVerifyInfo",
  28.                             "symantec.sourcebook.servlet.PHOwner",
  29.                             "symantec.sourcebook.servlet.PHDownload",
  30.                             "symantec.sourcebook.servlet.PHSuccess",
  31.                             "symantec.sourcebook.servlet.PHError"}; 
  32.  
  33.  
  34.    
  35.  
  36.  
  37.     /**
  38.      * Returns a brief description of this servlet.
  39.      * Typically used by servlet administrative functions.
  40.      *
  41.      */
  42.      
  43.     public String getServletInfo()
  44.     {
  45.         return "Sample ESD servlet";
  46.     }
  47.  
  48.     public void doGet(HttpServletRequest req, HttpServletResponse resp)
  49.     throws ServletException, IOException
  50.     {
  51.         // handle the GET the same way we handle POSTS
  52.  
  53.         doPost(req,resp);
  54.  
  55.     }
  56.  
  57.     /**
  58.      * Handle client POST request.
  59.      * This is the main function of this servlet.
  60.      * It determines the page being POSTed, 
  61.      * obtains the PageHandler for the page.  Calls
  62.      * the PageHandler to validate the page.  Calls
  63.      * the PageHandler to obtain the next page to be served
  64.      * and serves it.
  65.      *
  66.      *
  67.      */
  68.  
  69.     public void doPost(HttpServletRequest req, HttpServletResponse resp)
  70.     throws ServletException, IOException
  71.     {
  72.         
  73.          // don't accept giant posts, they're either errors or bogus
  74.  
  75.         if(req.getContentLength() > 4096)
  76.         {
  77.             resp.sendError(HttpServletResponse.SC_BAD_REQUEST);
  78.             return;
  79.         }
  80.  
  81.         // determine which form has been submitted
  82.  
  83.         int pageNumber = getPageNumber(req);
  84.  
  85.         // get handler for that page
  86.  
  87.         PageHandler pageHandler = getPageHandler(pageNumber);
  88.  
  89.         // validate the contents of the form
  90.  
  91.         Object pageData = pageHandler.validate(getServletConfig(),req,resp);
  92.  
  93.         // Ask the page handler what page should be served
  94.         // next (often determined in validate)
  95.  
  96.         pageNumber = pageHandler.nextPage();
  97.  
  98.         // get the page handler for the next page to be served...
  99.  
  100.         pageHandler = getPageHandler(pageNumber);
  101.  
  102.         // ...and serve it up
  103.  
  104.         pageHandler.serve(pageData,resp);
  105.         
  106.         
  107.  
  108.     }
  109.  
  110.     /**
  111.      * This method obtains the page handler for the specified page number.
  112.      *
  113.      */
  114.  
  115.     protected PageHandler getPageHandler(int pageNumber) throws ServletException
  116.     {
  117.  
  118.  
  119.         // get the name of the class that handles this page number
  120.         // this will be a subclass of PageHandler
  121.  
  122.         String pageHandlerName = pageHandlerNames[pageNumber];
  123.  
  124.  
  125.         try
  126.         {
  127.             // instantiate the handler for this page
  128.  
  129.             PageHandler pageHandler = (PageHandler)(Class.forName(pageHandlerName)).newInstance();
  130.  
  131.             return pageHandler;
  132.          }
  133.         catch(Exception e)
  134.         {
  135.             
  136.         }
  137.  
  138.  
  139.         // some sort of exception occured trying to instantiate
  140.         throw new ServletException("(Order) Internal servlet error (1)");
  141.  
  142.     }
  143.  
  144.  
  145.    
  146.     // perform one-time servlet initialization
  147.     
  148.     public  void  init(ServletConfig config) throws ServletException
  149.     {
  150.         // perform standard init
  151.         super.init(config);
  152.  
  153.         // try to initialize the recent transaction info
  154.  
  155.         try
  156.         {
  157.             Transaction.InitializeTransactions();
  158.         }
  159.           catch(Exception e)
  160.         {
  161.             // Some exception occured. Let server know that this servlet is unavailable.
  162.  
  163.             UnavailableException u = new UnavailableException(this,e + " " + e.getMessage());
  164.             throw u;
  165.         }
  166.     }
  167.  
  168.     // perform one-time servlet shutdonw
  169.     
  170.     public void destroy()
  171.     {
  172.         try
  173.         {
  174.             Transaction.WriteTransactions();
  175.         }
  176.         catch(IOException e)
  177.         {
  178.         }
  179.  
  180.         super.destroy();
  181.     }
  182.  
  183.     
  184.     /**
  185.      * Return the current page number. This number is embeded in a hidden
  186.      * field on each of the pages served.
  187.      */
  188.  
  189.     public int getPageNumber(HttpServletRequest request)
  190.     {
  191.  
  192.             int pageNumber = NOFORM_PAGE_NUM;
  193.  
  194.             // obtain the value of the "page" field on the current form
  195.  
  196.             String pageString = request.getParameter("page");
  197.  
  198.             // if no page parameter is found, this is either
  199.             // the initial request (so we should retrun page zero)
  200.             // or it's a re-download request (so we should return
  201.             // the re-download page.)
  202.  
  203.             if(pageString == null)
  204.             {
  205.                 // we've set up the HTML so that the download page
  206.                 // has a specific URI... this allows the user to bookmark
  207.                 // the page and return there if the initial download attempt fails
  208.  
  209.                 if(request.getRequestURI().startsWith("/servlet/purchase/down")) pageNumber = SUCCESS_PAGE_NUM;
  210.                 return pageNumber;
  211.             }
  212.  
  213.             // ok, we have a page number, make sure its good and within
  214.             // range. (It always should be unless we made an error on one
  215.             // of our HTML forms, or a user has modified the form)
  216.  
  217.             try
  218.             {
  219.                 pageNumber = Integer.parseInt(pageString);
  220.                 if(pageNumber >= pageHandlerNames.length) pageNumber = NOFORM_PAGE_NUM;
  221.             }
  222.             catch(NumberFormatException e)
  223.             {
  224.                 pageNumber = NOFORM_PAGE_NUM;
  225.             }
  226.  
  227.  
  228.             return pageNumber;
  229.  
  230.     }
  231.  
  232.  
  233.  
  234. }