afvangen exception servlet

  • Onderwerp starter Onderwerp starter vaat
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

vaat

Terugkerende gebruiker
Lid geworden
16 mei 2001
Berichten
3.954
Moet ik alle excepties in de private methods gewoon gooien naar de init en service methods en daar dan afvangen en met system.exit(1) het programma stoppen.

Of is er een betere, nettere manier ?
 
Het netste is natuurlijk dat er helemaal geen excepties optreden, maar anders is het wel zo netjes om ze af te vangen, de gebruiker op de hoogte te stellen en er iets nuttigs mee te doen. Dit zou een System.exit(0) kunnen zijn.
 
Afvangen moet altijd. Een IOExecptie kan buiten jou schuld optreden. Maar waarom een System.exit(0) en geen System.exit(1).

Java.Lang.System.exit(int status) > een status met waarde niet gelijk aab 0 geeft een abnormale terminatie aan van het programma. Dit is toch het geval bij een exceptie ???

Maar waar moet ik ze afvangen bij een servlet. Deze kent namelijk geen main.

voor de volledigheid de code in het bericht hieronder. Kan je kijken wat je er van vind ??
 
PHP:
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.sql.*;

/**
 *
 * <p>Title: Opdracht3 - TeacherLookupServlet</p>
 * <p>Description: Servlet krijgt als parameter eroscode mee van client
 * en toont de bijbehorende docenten uit de database</p>
 * <p>Copyright: Alexander Boerma</p>
 */

public class TeacherLookupServlet extends HttpServlet implements SingleThreadModel{
  static final private String CONTENT_TYPE = "text/html"; //content type response
  static private Connection conn; //bevat reference database connection

  //
  /**
   * @param config: bevat ServletConfig object
   * @throws ServletException
   * Initialize global variables en maakt connectie databse
   */
  public void init(ServletConfig config) throws ServletException
  {
    super.init(config);  //Geef ServletConfig object door aan GenericServlet
    try
    {
      maakDatabaseConn(); //maakt database connectie aan
    }
    //Exceptie voor als de properties file niet gevonden word
    catch (java.io.FileNotFoundException fe)
    {
      System.err.println("Property error: property file niet gevonden!!!");
      fe.printStackTrace();
      System.exit(1);
    }
    //Exceptie voor als de properties file niet gelezen kan worden
    catch (java.io.IOException ie)
    {
      System.err.println("Property error: I/O exceptie op de property file!!!");
      ie.printStackTrace();
      System.exit(1);
    }
    //Exceptie als de ProperyFromFileFactory niet gevonden word
    catch (ClassNotFoundException ce)
    {
      System.err.println("ClassNotFoundException "+ ce);
      ce.printStackTrace();
      System.exit(1);
    }
    //alle overige exceptie's
    catch(Exception e)
    {
      System.err.println("Connectie kon niet worden gemaakt!!! :" + e );
      System.exit(1);
    }
    //debugline voor de serverkant
    System.err.println("TeacherLookupServlet: init()");

  }
  /**
   * Maakt de DatabaseConnectie
   * @throws FileNotFoundException
   * @throws IOException
   * @throws ClassNotFoundException
   * @throws Exception
   */
  private void maakDatabaseConn() throws FileNotFoundException, IOException,
                                              ClassNotFoundException, Exception
  {
    //Properties inlezen dmv PropertyFromFileFactory Class

    java.util.Properties propertie = null;
    PropertyFromFileFactory factory = new PropertyFromFileFactory();
    propertie = factory.getProperties();

     //Variabele uit propertie initialiseren
    String dbDriverName = propertie.getProperty("jdbcdriver");
    String dbDatabaseUri = propertie.getProperty("database-uri");
    String dbUserName = propertie.getProperty("username");
    String dbPassword = propertie.getProperty("password");
    //Database connectie maken
    Class.forName(dbDriverName);
    conn = DriverManager.getConnection(dbDatabaseUri, dbUserName, dbPassword);

  }


  //Process the HTTP Get request (opdracht3 gebruikt in index.html alleen de Post method.
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException
  {
    System.err.println("TeacherLookupServlet: doGet()");
    response.setContentType(CONTENT_TYPE);
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head><title>Opdracht3</title></head>");
    out.println("<body>");
    out.println("<p>Your request method was "+request.getMethod()+"</p>");
    //redirect gebruiker naar het juiste formulier
    String link="<a href=http://localhost:"+request.getServerPort()+"/index.html>formulier</a>";
    out.println("<p>Gebruik het "+link+" in index.html en druk op Submit</p>");
    out.println("</body></html>");
  }

  /**
   * Process the HTTP Post request
   * @param request : bevat de gegevens die vanuit de client naar de servlet gestuurd worden
   * @param response : bevat de gegevens die vanuit de server naar de client teruggestuurd worden
   * @throws ServletException
   * @throws IOException
   */
  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException
  {
    System.err.println("TeacherLookupServlet: doPost()");  //debugline serverkant
    response.setContentType(CONTENT_TYPE);   //set content type voor response
    PrintWriter out = response.getWriter();  //reference naar PrintWriter object
    out.println("<html>");
    out.println("<head><title>Opdracht3 - Toon Docenten</title></head>");
    out.println("<body bgcolor=#CCFF99>");

    String erosCode = request.getParameter("erosCode");  //haal de erosCode op
    try
    {
      showTeachers(erosCode, out);  //toon de docenten
      //Maak een back link aan om terug te keren naar index.html
      int port = request.getServerPort();  //vraag server port op (kan variabel zijn)
      String link = "<a href=http://localhost:"+port+"/index.html>hier</a>";
      out.println("<p>Als U nog een ander vak wilt proberen, kunt U "+ link +" klikken</p>");
      out.println("</body></html>");

    }
    //Exceptie als er gegevensfouten/databasefouten zijn
    catch(SQLException s)
    {
      System.err.print("Fout bij het opzoeken van een module op erosCode");
      System.exit(1);
    }

  }
  /**
   * toont de docenten in een tabel
   * @param erosCode: de code van het vak waarvan de docenten getoond moeten worden
   * @param out:  bevat de reference naar PrintWriter object
   * @throws SQLException
   */
  private void showTeachers(String erosCode, PrintWriter out) throws SQLException
  {
    //SQL Query die docenten van vak toont in alfabetische volgorde
    String Query = "select * from MODUULDOCENT,PERSONEEL where MODUULDOCENT.EROSCODE = '" + erosCode +
          "' and MODUULDOCENT.PEINSYID = PERSONEEL.PEINSYID ORDER BY PERSONEEL.ACHTERNAAM";
    //Maakt Statement aan en voert de Query uit. Resultaten komen in Resultset
    Statement statement = conn.createStatement();
    ResultSet res = statement.executeQuery(Query);
    out.println("<h1>Docenten van vak "+erosCode+"</h1>");
    out.println("<table border=1 cellpadding=10>"); //maakt tabel aan
    int teller = 0;  //teller voor het aantal docenten
    while(res.next())
    {
      teller++; //update de teller
      String temp = "<p>"+(String)res.getObject("TITELS")+" "+
          (String)res.getObject("VOORLETTERS")+" "+
          (String)res.getObject("VOORNAAM")+" "+
          (String)res.getObject("VOORVOEGSELS")+" "+
          (String)res.getObject("ACHTERNAAM")+"</p>";
      writeCell(out,"Docent "+teller,temp);
    }
    out.println("</table>"); //sluit tabel tag
    out.println("<p>Het vak heeft "+teller+" docenten aan zich verbonden</p>");
    res.close(); //sluit de resultset
    statement.close(); //sluit het statement
    }
    /**
     * Maakt een rij aan in tabel voor een docent
     * @param out : reference PrintWriter
     * @param name : Docent en nummer (vb: Docent1)
     * @param value: volledige naam Docent
     */
    private void writeCell(PrintWriter out, String name, String value)
    {
      out.print("<tr><td>");
      out.print(name);
      out.print("</td><td>");
      out.print(value);
      out.print("</td></tr>");
    }



  /**
   * Clean up resources (sluit database Connectie
   */
  public void destroy()
  {
    System.err.println("TeacherLookupServlet: destroy()"); //debugline serverkant
    try
    {
      conn.close(); //sluit connectie
    }
    //Exceptie als sluiten database niet goed verloopt
    catch(SQLException se)
    {
      System.err.println("Error sluiten database");
    }
  }
}
 
PropertyFromFileFactory class

PHP:
import java.io.FileInputStream;
import java.io.FileNotFoundException;

public class PropertyFromFileFactory {
  private String configFilename;

  public PropertyFromFileFactory() {
    configFilename = System.getProperty("CONFIGFILE");
  }

  public PropertyFromFileFactory(String filename) {
    if (filename != null) {
      configFilename = filename;
    }
  }

  public java.util.Properties getProperties()
      throws java.io.FileNotFoundException,
             java.io.IOException {

    if (configFilename == null) {
      throw new java.io.IOException("no config file specified");
    }

    FileInputStream f = new FileInputStream(configFilename);
    java.util.Properties prop = null;
    try {
      prop = new java.util.Properties();
      prop.load(f);
    } finally {
      if (f != null)
        f.close();
    }

    return prop;
  }
}

opdracht3.properties:

jdbcdriver=com.borland.datastore.jdbc.DataStoreDriver
database-uri=jdbc:borland:dslocal:c:/opdracht3/database
username=alex
password=alex
 
De init() methode is vergelijkbaar met de 'main' die je in een programma zou gebruiken. In mijn ogen ziet het er dan ook goed uit zo.
 
ok, bedankt voor je tijd. Ben er ook wel tevreden over. Misschien alleen nog een nulpointerexceptie afvangen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan