Servlet problem

Status
Nicht offen für weitere Antworten.
H

harrycoder

Gast
Hi Leute, wahrscheinlich stelle ich mich ziemlich dumm an aber das liegt daran das ich noch nie ein Servlet gebaut habe, bis jetzt.

Und zwar geht es um Folgendes... Mein Servlet baut mit Hilfe auf der Startseite anzugebender Parameter (URL, Benutzername, Password) einen DB Pool auf. Das geht auch alles. Ich möchte allerdings gerne das man erst mit einer Datenbank arbeitet und dann über erneuten Aufruf der Startseite ne neue Verbindung (Pool) mit ner anderen DB (also andere Parameter(URL o. Username o. Password) herstellen kann. Und das krieg ich nich hin, jetzt im Moment ist es so das ich sobald ich mich einmal an einer DB erfolgreich angemeldet habe nicht mehr an einer anderen anmelden kann solange ich Tomcat nicht neustarte...

Liegt das an Cookies oder gespeicherter Session oder woran ? Also ich bin am verzweifeln, is zwar bestimmt irgendwas einfaches aber ich komm nich drauf :)

Zur Verdeutlichung, nach einem erfolgreichen DB Login ist es momentan egal was ich dann bei weiteren Aufrufen der Startseite für Parameter (sogar falsche Logindaten werden ignoriert) angebe, er benutzt einfach weiter die bereits hergestellte verbindung, und das is genau mein Problem...

Bitte helft mir... ein Hinweis auf ne Servlet Funktion die das Problem löst hilft mir vielleicht auch schon.

Vielen Dank

MfG

Harald
 
S

SlaterB

Gast
hmm, benutzt du denn da allgemeine Tomcat-Funktionen oder doch eher selbsterstelle Logik?
hast du bisschen Code dazu?
 
H

harrycoder

Gast
Code:
package hall;

import db.DBConnect;
import db.DBConnectPool;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

import output.Index;
import output.Webdata;
import output.HTMLTable;
import output.Initerror;

public class ConnectionDetails extends HttpServlet {
    public PrintWriter out;
    Vector vec;
    private DBConnectPool dbcp;
    Webdata web;
    private static boolean DEBUG = true;
    public static Properties properties;


    public void init(ServletConfig config) throws ServletException {
    super.init(config);
    //dbcp = new DBConnectPool(Index.DBDriver,Index.DBUrl,Index.DBUser,Index.DBPasswd, this);
        }


    public void doGet(HttpServletRequest request,
                    HttpServletResponse response)
      throws ServletException, IOException {
    doPost(request, response);
    }

  public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
      throws ServletException, IOException {
// extract the extra path info

      String anExtraPath,
             aRemoteAddr,
             aRemoteHost;
      anExtraPath = request.getPathInfo();
      aRemoteAddr = request.getRemoteAddr();
      aRemoteHost = request.getRemoteHost();
      System.out.println(this.getServletContext().getServletContextName());
      if (DEBUG) {
        log("doPost: extra path     = " + anExtraPath);
        log("doPost: remote address = " + aRemoteAddr);
        log("doPost: remote host    = " + aRemoteHost);
      }
    response.setHeader("Expires","Thu, 01 Dec 1994 16:00:00 GMT");
    response.setContentType("text/html");
    out = response.getWriter();
          try {
      dbcp = new DBConnectPool(Index.DBDriver,Index.DBUrl,Index.DBUser,Index.DBPasswd, this);
      }
      catch (NullPointerException ex) {
          new Initerror(this);
      }
    if (anExtraPath == null) {showSelect(request, response);}
    else if (anExtraPath.equals("/show")) {
        showTable(request, response); }
    else {
        if (DEBUG) log("doPost: unknown extra path");
        sendErrorPage(response, "Unknown Extra Path", "Unknown Extra Path");
     }
  }

    public void showTable(HttpServletRequest request, HttpServletResponse response) {
      String tabelle = null;
      tabelle = request.getParameter("tabellen");
      if (tabelle == null) { showSelect(request, response); }
      else {
      DBConnect aDBConnect = DBConnectPool.getInstance();
      aDBConnect.executeQuery("Select * from "+tabelle);
      HTMLTable tableout = new HTMLTable(this,aDBConnect);
      // release the database connection:
      DBConnectPool.putInstance(aDBConnect);
      }
    }
    public void showSelect(HttpServletRequest request, HttpServletResponse response) {
        DBConnect aDBConnect = DBConnectPool.getInstance();
        web = new Webdata(this,aDBConnect);
        DBConnectPool.putInstance(aDBConnect);
    }

    public void sendErrorPage(HttpServletResponse response, String title, String message) {
      sendPage(response, "Fehler: "+title, "Fehler: "+message);
    }

    public void sendPage(HttpServletResponse response, String title, String message) {
      if (DEBUG) log("sendPage: " + title + " " + message);

      try {
        PrintWriter _anOut = response.getWriter();

        _anOut.println("<html>");
        _anOut.println("<head><title>" + title + "</title></head>");
        _anOut.println("<body bgcolor=\"#FFFFFF\">");
        _anOut.println("<center>");
        _anOut.println("<font face=\"Verdana, Arial, Helvetica, sans-serif\" size=\"4\">");
        _anOut.println("

" + message + "

");
        _anOut.println("</font>");
        _anOut.println("</center>");
        _anOut.println("<hr noshade>");
        _anOut.println("<font face=\"Verdana, Arial,Helvetica, sans-serif\" size=\"-1\">");
        _anOut.println("<a href=\"mailto:xxx\">xxx</a></font>");
        _anOut.println("</body>");
        _anOut.println("</html>");
        _anOut.close();

      } catch (IOException e) {
        log("sendPage: Error writing reponse " + e.getMessage());
      }
    }
}

Das is die Klasse in der das DBConnectPool Objekt erzeugt wird... habe natürlich noch weitaus mehr aber alle hier zu zeigen sprengt glaub ich den Rahmen :D... Sind fast alle eh nur zur HTML ausgabe. Und halt die 2 Klassen für die DB Verbindung, aber das Problem is ja das Servlet. Wenn du noch mehr brauchst sag Bescheid dann zeig ich dir auch noch den Rest, aber das hier is halt die "Haupt" Servlet Klasse.
 

padde479

Bekanntes Mitglied
Kleiner Tipp: niemals, wirklich niemals eine HTML-Ausgabe in ein Servlet schreiben! Dafür gibt es die JavaServer Pages! Sowas machen nur Autoren in ihren Büchern. Die Servlets dienen nur der Verarbeitung. Für das Anzeigen von Daten etc. sind die Servlets zuständig.
 
S

SlaterB

Gast
ich brauch nicht mehr, ich kann das ganze eh nicht selber ausprobieren,
sondern dich nur darauf hinweisen, dass du da anscheinend sowas wie
dbcp = new DBConnectPool(Index.DBDriver,Index.DBUrl,Index.DBUser,Index.DBPasswd, this);

machst,
wird das auch beim Wechsel auf die andere DB gemacht, oder wie oder was oder warum?
was passiert da, was nicht usw., das muss man doch alles irgendwie prüfen können,

---

in showTable() verwendest du
DBConnect aDBConnect = DBConnectPool.getInstance();

das sieht ja nach einer statischen Operation aus,
musst du nicht irgendwas mit dem Pool
private DBConnectPool dbcp;
machen?
 

HLX

Top Contributor
Sehr verwirrend! Du erzeugst bei jedem Request einen neuen ConnectionPool? Täte es nicht auch eine Connection, die du dann in deinen Pool schiebst?

Die Variable dbcp wird nie verwendet. Überprüf das nochmal. Falls es nicht weiterhilft, dann stell hier auch mal den Code deines Pools rein. Für mich vermischen sich hier die Begriffe Pool und Connection zu sehr.
 
H

harrycoder

Gast
HLX hat gesagt.:
Sehr verwirrend! Du erzeugst bei jedem Request einen neuen ConnectionPool? Täte es nicht auch eine Connection, die du dann in deinen Pool schiebst?

Die Variable dbcp wird nie verwendet. Überprüf das nochmal. Falls es nicht weiterhilft, dann stell hier auch mal den Code deines Pools rein. Für mich vermischen sich hier die Begriffe Pool und Connection zu sehr.

Na ja ich meine nicht, denn das ist ja genau das Problem, man soll ja bei Aufruf der Startseite eine neue Verbindung (neuen Pool) herstellen können, sonst benutze ich doch jedes mal das instanzierte dbcp objekt und der pool hält ja nur die bereits hergestellte Verbindung, und erstellt gegebenenfalls mehr davon. Allerdings nicht unter berücksichtigung der neuen Parameter, und genau das ist das Problem... also muss dieses Objekt zumindest unter der Bedingung das man die Startseite erneut aufruft abermals (mit anderen Parametern) erzeugt werden...

Der Pool macht eigentlich nichts anderes als die Anzahl der Verbindungen zu regulieren um Engpässe zu vermeiden.

Also ich bin mir nich sicher aber ich glaube eher das das ein Lifecycle Problem des Servlets ist.
Ich weiss nich wie aber rein von der Logik her würde ich sagen das der vorhandene ConnectionPool bei Aufruf der Startseite "zerstört" werden muss und dann auch wieder ein neuer erzeugt werden kann, tja nur die Umsetzung macht mir Kopfschmerzen...




Danke für den Hinweis mit HTML, das is ja kein Problem den code schmeiss ich dann woanders rein :D
 
H

harrycoder

Gast
SlaterB hat gesagt.:
ich brauch nicht mehr, ich kann das ganze eh nicht selber ausprobieren,
sondern dich nur darauf hinweisen, dass du da anscheinend sowas wie
dbcp = new DBConnectPool(Index.DBDriver,Index.DBUrl,Index.DBUser,Index.DBPasswd, this);

machst,
wird das auch beim Wechsel auf die andere DB gemacht, oder wie oder was oder warum?
was passiert da, was nicht usw., das muss man doch alles irgendwie prüfen können,

---

in showTable() verwendest du
DBConnect aDBConnect = DBConnectPool.getInstance();

das sieht ja nach einer statischen Operation aus,
musst du nicht irgendwas mit dem Pool
private DBConnectPool dbcp;
machen?

Ehm, na ja also du hast ein Formular auf dem du Benutzername, Password, URL angeben kannst. Sobald du die "abschickst" (submit) wird das Servlet aufgerufen und die im Formular angegebenen Parameter (siehe Code) an die Variablen übergeben mit denen dann der ConnectionPool instanziert wird.

Beim ersten Mal funktioniert das ganze wunderbar. Bei Wiederholung allerdings nicht mehr, da werden dann halt die Formulare durchlaufen, das Servlet aufgerufen usw. allerdings passiert mit dem ConnectionPool rein gar nichts, der bleibt halt einfach so wie er is...
 
S

SlaterB

Gast
das hast du alles schon erzählt, es fällt aber (bisher) noch niemanden die Lösung aus dem nichts ein,

ich meinte dass du bisschen untersuchen sollst was da so los ist,
z.B. Ausgaben wie
System.out.println("setze Connection-Pool nun auf xy");

System.out.println("rufe nun Connection aus Connection-Pool xy auf, ansgeschlosse DB ist: yz");


usw, schau nach was dein Programm tut!

------

den von zwei Leuten erwähnten Hinweis
'private DBConnectPool dbcp; wird anscheinend nirgendwo verwendet'
willst du nicht kommentieren?
 
G

Guest

Gast
SlaterB hat gesagt.:
das hast du alles schon erzählt, es fällt aber (bisher) noch niemanden die Lösung aus dem nichts ein,

ich meinte dass du bisschen untersuchen sollst was da so los ist,
z.B. Ausgaben wie
System.out.println("setze Connection-Pool nun auf xy");

System.out.println("rufe nun Connection aus Connection-Pool xy auf, ansgeschlosse DB ist: yz");


usw, schau nach was dein Programm tut!

------

den von zwei Leuten erwähnten Hinweis
'private DBConnectPool dbcp; wird anscheinend nirgendwo verwendet'
willst du nicht kommentieren?

Eh klar, da habt ihr natürlich Recht.

Es muss natürlich dbcp.getInstance() und putInstance() heissen, sorry.

Allerdings behebt das das Problem nicht :D
 
S

SlaterB

Gast
wenn getInstance() eine statische Operation ist,
dann ändern ein Aufruf am Objekt gar nix, dann wird immer noch die statische Operation gerufen ;)

ich kann DBConnectPool bei google nicht finden,
ist das eine eigene Klasse von dir?
dann interessiert der Quellcode von getInstance() aber sowas von brennend ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Problem: Servlet in JSP einbinden mit <jsp:include> Allgemeines EE 3
0 Problem mit librarys javax.servlet.http.HttpServletRequest cannot be resolved Allgemeines EE 1
M servlet --> jsp - problem beim umstrukturieren Allgemeines EE 5
D Servlet Problem über Server Allgemeines EE 26
S Problem mit Servlet Allgemeines EE 11
E Tomcat/Servlet Problem - Servlet wird nicht gefunden Allgemeines EE 8
M Problem mit Servlet Allgemeines EE 2
E Servlet/JSP/JavaBean- Problem Allgemeines EE 1
G Jakarta Servlet API 5.0 Allgemeines EE 1
pkm Frage wegen AJAX-Zugriff auf ein Servlet Allgemeines EE 1
Dimax Servlet Servlet Kommunikation Allgemeines EE 18
K Unterschied zwischen JSP & Servlet gegenüber REST mittels JAX-RS Allgemeines EE 1
Dimax Servlet läuft in Eclipse, aber nicht im Browser Allgemeines EE 74
M URL Servlet Request getParameter Allgemeines EE 2
M Servlet Methoden Aufruf im Servlet Allgemeines EE 10
J 404 Not found (Servlet) Allgemeines EE 1
J Asynchrones Servlet löst NullPointerException aus Allgemeines EE 5
E Servlet Servlet das richtige? Allgemeines EE 11
B HTTP-Header-Inspektor-Servlet Allgemeines EE 1
N JSP Servlet mit JSP ansprechen Allgemeines EE 2
F Mehrere Bilder aus MySQL DB via Servlet darstellen. Allgemeines EE 1
J FTP und Servlet Allgemeines EE 11
H Post an Servlet Allgemeines EE 2
A Binärdatei vom Servlet erzeugen lassen Allgemeines EE 3
S Servlet Authentication Filter Allgemeines EE 0
S LDAP JAAS oder Servlet Allgemeines EE 0
F eigene Anwendung per Servlet Container starten Allgemeines EE 9
F Servlet Daten im Speicher ablegen Allgemeines EE 3
L Servlet ClassNotFoundException Servlet Allgemeines EE 3
G Allgemeine Frage zu Authentifizierung mittels Servlet API Allgemeines EE 2
J Servlet "package does not exist" Allgemeines EE 5
K Servlet-Mapping Allgemeines EE 9
0 Servlet mit ArrayList Allgemeines EE 3
E Servlet unter mehreren Adressen Allgemeines EE 16
S Pfad-Zugriff über Servlet-init() Allgemeines EE 2
E Servlet Wie kann ich ohne Hilfe von Eclipse in JBoss mein servlet aufrufen Allgemeines EE 2
S Servlet.service() threw exception Allgemeines EE 4
A Servlet erkennt request Objekt nicht Allgemeines EE 8
G Direkter Zugriff auf Servlet- doPost Allgemeines EE 15
G Servlet doGet, doPost Allgemeines EE 3
A Kodierungsproblem bei Parameterübergabe von Browser an Servlet (GET) Allgemeines EE 2
Antoras servlet-mapping auf dynamische URLs Allgemeines EE 17
MQue Ajax - Servlet Allgemeines EE 2
MQue Servlet Allgemeines EE 9
S [Design] Dynamischer EJB Aufruf von Servlet Allgemeines EE 3
S Servlet auf JBoss 5? Allgemeines EE 11
B HttpSession bekommen wenn nicht in Servlet Allgemeines EE 8
MQue Servlet / Button Allgemeines EE 5
S In Eclipse werden die "Servlet-Klassen" nicht gefu Allgemeines EE 2
U javax.faces und javax.servlet cannot be resolved Allgemeines EE 2
W Potentielles Memory Leak bei Servlet Allgemeines EE 6
B unterschied servlet und bean Allgemeines EE 2
Escorter Servlet .sar und jede Menge .jar Archive Allgemeines EE 2
N Servlet und JSF (URL-Rewriting)? Allgemeines EE 3
A jsf: Servlet aufrufen, wie geht das? web.xml Fehler? Allgemeines EE 13
N Servlet zyklisch aktualisieren Allgemeines EE 2
zilti Verbindung Applet <-> Servlet Allgemeines EE 5
ARadauer Servlet Bild Rückgabe Allgemeines EE 2
I Über Formular Daten zu Servlet Allgemeines EE 36
H Servlet - Zwischenmeldung anzeigen bei längerer Berechnung Allgemeines EE 2
G Ordner mit Umlauten einlesen - Servlet Allgemeines EE 3
A web.xml für Servlet in Tomcat 5.5 erstellen Allgemeines EE 2
M Zwei Buttons in einem Servlet Allgemeines EE 2
M Servlet lässt sich nicht aufrufen Allgemeines EE 6
A web.xml für Servlet in Tomcat erstellen Allgemeines EE 6
B Servlet Allgemeines EE 3
G EJB - EJB wird nicht ins Servlet geladen Allgemeines EE 3
K load-on-startup -> in der Servlet Klasse Allgemeines EE 6
G Objekt an Servlet übergeben - oder Objekt global definieren? Allgemeines EE 4
W Was bei Servlet-Entwicklung alles beachten? Allgemeines EE 8
R Zugriff auf Filter Servlet Allgemeines EE 10
I JBOSS Jsp Files Pfad im Servlet? Allgemeines EE 4
N Servlet-Request abbrechen? Allgemeines EE 3
D Java Servlet mit Radio Buttons Allgemeines EE 2
G Servlet debugging Allgemeines EE 8
N Thread von Servlet aus starten Allgemeines EE 16
N JSP: Collection im Servlet überwachen (mit AJAX)? Allgemeines EE 5
J Socket daten darstellen per jsp,servlet Allgemeines EE 2
W servlet über https Allgemeines EE 2
L Servlet kann Funktion nicht aufrufen Allgemeines EE 3
B Parameterübergane von Servlet an JSP funktioniert nicht ? Allgemeines EE 2
M Aus einem Servlet auf ein anderes zugreifen ? Allgemeines EE 2
G Servlet Serializable Allgemeines EE 2
B Servlet-Api.jar auf JBoss? (Migration von Tomcat zu JBoss) Allgemeines EE 4
H Servlet - Importieren von Code Allgemeines EE 2
P Java Servlet - Umgang mit Verlinkungen Allgemeines EE 7
M Wert aus Servlet an normale Klasse übergeben Allgemeines EE 2
E Servlet soll JFRame öffnen. Jframe.setvisible schlägtfehl Allgemeines EE 2
K Servlet per Formular aufrufen Allgemeines EE 8
L sessions mit servlet oder jsp ? Allgemeines EE 9
B JSF - Servlet mit Parametern über einen Link öffnen Allgemeines EE 3
D Binärdaten im Servlet entgegen nehmen, aber wie? Allgemeines EE 5
T Servlet-Instanzen und ServletContext Allgemeines EE 2
L speichern von daten mittels servlet in xml Allgemeines EE 8
N Collection überwachen (Servlet + AJAX) Allgemeines EE 3
N Liste mit Checkboxen an Servlet übergeben? Allgemeines EE 3
T Wie Datenbank und Servlet koppeln? Allgemeines EE 3
G Ladeseite anzeigen lassen während das Servlet noch arbeitet? Allgemeines EE 6
P Tomcat Servlet POST Daten als Array Allgemeines EE 2
P PDF per Servlet übertragen, danach keinen Inhalt mehr Allgemeines EE 12

Ähnliche Java Themen

Neue Themen


Oben