[java servlets]

Pagina: 1
Acties:

  • Liqued
  • Registratie: Februari 2001
  • Laatst online: 09-01 18:51
Ik heb de volgende 3 classes:

FormServlet (Servlet: geeft een output van een normaal formulie met inhoud een werknemersnaam)
DBServlet (Servlet: heeft als doel informatie uit een query netjes in een table te zetten)
DataModule1 (Datamodule: zorgt voor de DB connectie en geeft uitkomst van de query aan DBServlet)

Nou lijkt me de broncode van FromServlet niet echt van belang, dus zal ik die alleen van DBServlet en DataModule1 geven.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
package servlet;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import com.borland.dx.dataset.*;
import com.borland.dx.sql.dataset.*;
import com.borland.datastore.*;


public class DBServlet extends HttpServlet {
  static final private String CONTENT_TYPE = "text/html";
  String WerknemersNaam;
  //Initialize global variables
  public void init() throws ServletException {
  }
  //Process the HTTP Get request
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType(CONTENT_TYPE);
    DataModule1 dm = servlet.DataModule1.getDataModule(WerknemersNaam);
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<body>");
    Column[] columns = dm.queryDataSet1.getColumns();
    out.println ("<table><tr>");
    for (int i=1; i < columns.length; i++) {
      out.print("<th>" + columns[i].getCaption() + "</th>");
    }
    out.println("</tr>");
    dm.queryDataSet1.first();
    while (dm.queryDataSet1.inBounds()) {
      out.print("<tr>");
      for (int i = 1; i < columns.length; i++) {
        out.print ("<td>" + dm.queryDataSet1.format(i) + "</td>");
      }
      out.println("</tr>");
      dm.queryDataSet1.next();
    }
    out.println("</table>");
    out.println("</body>");
    out.println("</html>");
  }

  //Process the HTTP Post request
  public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    response.setContentType(CONTENT_TYPE);
    PrintWriter out = response.getWriter();
    out.println("<html>");
    out.println("<head><title>DBServlet</title></head>");
    out.println("<body>");
    WerknemersNaam = request.getParameter("UserName");
    doGet(request, response);
    out.println("</body></html>");
  }
  //Clean up resources
  public void destroy() {
  }
}

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package servlet;

import com.borland.dx.dataset.*;
import com.borland.dx.sql.dataset.*;

public class DataModule1 implements DataModule {
  static private DataModule1 myDM;
  static public String WerknemersNaam;
  Database database1 = new Database();
  QueryDataSet queryDataSet1 = new QueryDataSet();

  public DataModule1() {
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  private void jbInit() throws Exception {
    queryDataSet1.setQuery(new com.borland.dx.sql.dataset.QueryDescriptor(database1, "SELECT werknemer.\"Nummer werknemer\",werknemer.\"Naam werknemer\",werknemer.\"Telefoon " +
      "werknemer\",werknemer.\"AfdelingsId werknemer\",werknemer.\"Naam afdeling\",werknemer.\"Naam " +
      "chef van afdeling\" FROM\"C:\\Java\\testprakticum\\Werknemer\".werknemer " +
      "WHERE werknemer.\"Naam werknemer\"=\'" + WerknemersNaam +"\'", null, true, Load.ALL));
    database1.setConnection(new com.borland.dx.sql.dataset.ConnectionDescriptor("jdbc:odbc:Werknemer", "", "", false, "sun.jdbc.odbc.JdbcOdbcDriver"));
    queryDataSet1.open();
  }

  public void insertNewRow(String userName, String userComment) {
    try {
      DataRow dataRow1 = new DataRow(queryDataSet1, new String[] { "Name", "Comment"});
      dataRow1.setString("Name", userName);
      dataRow1.setString("Comment", userComment);
      queryDataSet1.addRow(dataRow1);
    }
    catch (DataSetException ex) {
      ex.printStackTrace();
    }
  }

  public void saveNewRow() {
    try {
      database1.saveChanges(queryDataSet1);
    }
    catch (DataSetException ex) {
      ex.printStackTrace();
    }
  }


  public static DataModule1 getDataModule(String wn) {
    WerknemersNaam = wn;
    if (myDM == null) {
      myDM = new DataModule1();
    }
    return myDM;
  }
  public com.borland.dx.sql.dataset.Database getDatabase1() {
    return database1;
  }
  public com.borland.dx.sql.dataset.QueryDataSet getQueryDataSet1() {
    return queryDataSet1;
  }
}



Nu is mijn probleem het volgende:
De eerste keer dat ik naar een werknemer zoek gaat prima, maar op het moment dat ik voor de 2de keer een werknemer zoek dan geeft ie alleen de informatie van de eerste keer. Pas op het moment dat ik de server opnieuw start dan geeft ie andere waarde er in. Wat kan ik hier dus aan doen?

  • whoami
  • Registratie: December 2000
  • Laatst online: 19:34
Heb je uw applicatie al eens gedebugged?
Misschien moet je dat maar eens doen ipv hier de hele rits code te plakken.

https://fgheysels.github.io/


  • Onno
  • Registratie: Juni 1999
  • Niet online
code:
1
2
3
4
5
6
7
public static DataModule1 getDataModule(String wn) {
    WerknemersNaam = wn;
    if (myDM == null) {
      myDM = new DataModule1();
    }
    return myDM;
  }

Je maakt alleen een nieuwe DataModule als je er niet al eentje had. En je voert de query met WerknemersNaam in de constructor van die DataModule uit, alleen de eerste keer dus.

Beetje ehh.. aparte opzet. :)