Servlet läuft in Eclipse, aber nicht im Browser

Bitte aktiviere JavaScript!
Wie oben versprochen hab mein code ein wenig modifiziert.D.h Kritik wird erwünscht)
Java:
<p align=center><b><span style="font-size:11pt; font-weight:bold;">W&auml;hlen Sie eine Datei mit Programmen aus</span></b><br></p>
<FORM ENCTYPE="multipart/form-data" ACTION="Programmehinzufuegen.jsp"
    METHOD=POST>
    <table border="0" align="center" rules="groups" cellspacing="11">
        <tbody>
            <tr>
                <td align="right">Source-Datei: </td>
                <td align="left"><INPUT NAME="file" TYPE="file" class="file"></td>
            </tr>
            <tr><td></td></tr>
            <tr><td></td></tr>
            <tr>
                <td align="right">Projekt ID: </td>
                <td align="left"><select name="SelectDropDown" size=1 class="standard">
                        <option value=''></option>
                        <%
                            String[][] Projekte2 = AuswahlAusMYSQL.ErmittlungDerProjekte();
                            String[] Projekt_IDs = new String[Projekte2.length];
                            for (int i = 0; i < Projekte2.length;) {
                                ++i;
                                out.print("<option value=\"" + i + "\">" + Projekte2[i - 1][1] + " " + Projekte2[i - 1][0]
                                        + "</option>");
                                Projekt_IDs[i - 1] = Projekte2[i - 1][1];
                            }
                        %>
                </select></td>
            </tr>
            <tr><td></td></tr>
            <tr><td></td></tr>
            <tr>
                <td></td>
                <td align="left"><b><INPUT TYPE="submit" VALUE="hinzuf&uuml;gen"></b></td>
                <td></td>
                <td></td>
            </tr>           
            <tr>
                <td></td>
                <td align="right"><a href="Projektorganisation.jsp"><b><input type="button" name="zurueck" value="Zur&uuml;ck"></input></b></a>
                <td></td>
            </tr>
        </tbody>
    </table>
</FORM>

<%
    String contentType = request.getContentType();

    if ((contentType != null)
            && (contentType.indexOf("multipart/form-data") >= 0)) {

        DataInputStream in = new DataInputStream(
                request.getInputStream());     
        int formDataLength = request.getContentLength();
        byte dataBytes[] = new byte[formDataLength];
        int byteRead = 0;
        int totalBytesRead = 0;

        while (totalBytesRead < formDataLength) {
            byteRead = in.read(dataBytes, totalBytesRead,
                    formDataLength);
            totalBytesRead += byteRead;
        }in.close();
        boolean GesamtErgebniss = true;
        int projekt_id_int = 0;
        int programm_id_int = 0;
        String Projekt_ID = null;
        String file = new String(dataBytes);
        String ProgrammBeschreibung = "";
        String ProjektBeschreibung = "";
        String textfile = "";
        String Datenbank = "sasco";   
       
        Statement st = null;
        Statement st1 =null;
        ResultSet rs = null;
        ResultSet rs1 =null;
       
        if (file.indexOf("name=\"SelectDropDown\"") != -1) {
            String Ausgewaehlt = file.substring(
                    file.indexOf("name=\"SelectDropDown\"") + 22,
                    file.indexOf("name=\"SelectDropDown\"") + 26);

            Projekt_ID = Projekte2[Integer.parseInt(Ausgewaehlt.trim()) - 1][1];
            ProjektBeschreibung = Projekte2[Integer.parseInt(Ausgewaehlt.trim()) - 1][0];
            projekt_id_int = Integer.parseInt(Projekt_ID.trim());
            int PROGname = file.indexOf("name=\"file\"");
            String progName=file.substring(PROGname+23,file.indexOf("\"",PROGname+23));
            System.out.println(progName);                                   
            String FlagImProgramm="ADD ";
            String Datei="";
            String FileName="";
            String sSql = "SELECT max(programm_id) + 1 FROM sasco.programm";
                        try (Connection cn=MYSQLparameter.eureVerbindungMeinHerr();){
                           
                            String data =new String (dataBytes)    ;
                            String tempData=new String("");
                            System.out.println("Datei enthält "+data.length()+" Zeichen");
   
                                        for(int b=0;b<(data.length()-7);b++){
                                           
                                            String     tempFlag=data.substring(b,b+4);
               
                                                if(tempFlag.equals(FlagImProgramm)){                                                                                                   
                                                    if(data.indexOf("ADD ",b+4)!=-1){
                                                        tempData=data.substring(data.indexOf("ADD ",b),data.indexOf("ADD ",b+4));
                                                       
                                                        b=data.indexOf("ADD ",b+4)-6;
                                                       
                                                    }
                                                    else if(data.lastIndexOf("%MEND")!=-1){
                                                       
                                                        tempData=data.substring(data.indexOf("ADD ",b),data.lastIndexOf("%MEND")+7);
                                                       
                                                      }
                                                        else{
                                                           
                                                            tempData=data.substring(data.indexOf("ADD "),data.lastIndexOf("RUN;")+6);
                                                           
                                                        }
                                                    try {       
                                                                                                                                           
                                                        FileName=tempData.substring(11,19)+".txt";
                                                        ProgrammBeschreibung=tempData.substring(11,19);
                                                        File fileT=new File(FileName);
                                                        FileWriter fw=new FileWriter(fileT);
                                                        fw.write(tempData);
                                                        fw.close();                                                                                                                                                                                                                                                              
                                                        try {                                                               
                                                                st = cn.createStatement();
                                                                rs = st.executeQuery(sSql);
                                                                programm_id_int = 1;
                                                            while (rs.next()) {
                                                                programm_id_int = Integer.parseInt(rs.getString(1).trim());
                                                            }
                                                        } catch (Exception ex) {ex.getStackTrace();}                           
                                                                           
                                        if (projekt_id_int != 0 && programm_id_int != 0 ) {
                                                                                                               
                                            boolean Ergebniss = false;                                                                                   
                                                   
                                            Ergebniss = SpeicherungInMYSQL.SpeicherungDesProgramms(Datenbank,
                                                    projekt_id_int, programm_id_int, ProgrammBeschreibung);
                                            if (Ergebniss == false){
                                                out.println("ACHTUNG: Fehler beim Speichern des Programms: "+ ProgrammBeschreibung);
                                                GesamtErgebniss = false;
                                                }
                                           
                                            String[][] Werte = Analyse.ZeilenBestimmen(tempData);
                                            String OHNEKom1 = Analyse.EntferneKommentarTyp1(tempData);
                                            Ergebniss=SpeicherungInMYSQL.SpeicherungDerZeilen(Datenbank,
                                                    projekt_id_int, programm_id_int, Werte);
                                            if (Ergebniss == false){
                                                out.println("ACHTUNG: Fehler beim Speichern der Zeilen: " + ProgrammBeschreibung);
                                                GesamtErgebniss = false;
                                                }
                                            else {
                                                String[][] OHNEKom2 = Analyse
                                                        .EntfernungVonKommentarVomTyp2(OHNEKom1, Werte);
                                   
                                                int AnzahlDerStatements = Werte.length;
                                   
                                                Ergebniss=SpeicherungInMYSQL.SpeicherungVonStatements(Datenbank,
                                                        projekt_id_int, programm_id_int, OHNEKom2);
                                                if (Ergebniss == false){
                                                    out.println("ACHTUNG: Fehler beim Speichern der Statements: "+ProgrammBeschreibung );
                                                    GesamtErgebniss = false;
                                                    }
                                                else {
                                   
                                                    String[][] KommentarVonTyp1 = Analyse.EntferneCodeUndTyp2(
                                                            tempData, Werte);                                           
                                                    Ergebniss=SpeicherungInMYSQL.SpeicherungKommentarVonTyp1(Datenbank,
                                                            projekt_id_int, programm_id_int, KommentarVonTyp1);
                                                   
                                                    if (Ergebniss == false){
                                                        out.println("ACHTUNG: Fehler beim Speichern der Kommentare vom Typ 1: "+ProgrammBeschreibung );
                                                        GesamtErgebniss = false;
                                                        }
                                       
                                                    String[][] KommentarVonTyp2 = Analyse
                                                            .ErmittlungderKommentareVomTyp2(OHNEKom1, Werte);                                       
                                                    Ergebniss=SpeicherungInMYSQL.SpeicherungKommentarVonTyp2(Datenbank,
                                                            projekt_id_int, programm_id_int, KommentarVonTyp2);
                                                   
                                                    if (Ergebniss == false){
                                                        out.println("ACHTUNG: Fehler beim Speichern der Kommentare vom Typ 2: " +ProgrammBeschreibung);
                                                        GesamtErgebniss = false;
                                                    }                               
                                                    try{
                                                    String[][] tokenstabelle = Analyse.BildungderTokens(
                                                            OHNEKom1, Werte);
                                                    Ergebniss=SpeicherungInMYSQL.SpeicherungDerTokens(Datenbank,
                                                            projekt_id_int, programm_id_int, tokenstabelle);
                                                    }catch(ArrayIndexOutOfBoundsException e){e.getStackTrace();}
                                                   
                                                    if (Ergebniss == false){
                                                        out.println("ACHTUNG: Fehler beim Speichern der Token: " +ProgrammBeschreibung);
                                                        GesamtErgebniss = false;
                                                        }
                                                    else {
                                                        Ergebniss=SpeicherungInMYSQL.AufrufenderProzeduren(Datenbank,
                                                                projekt_id_int, programm_id_int);
                                                        if (Ergebniss == false){
                                                            out.println("ACHTUNG: Fehler beim Ausführen der Prozeduren:" +ProgrammBeschreibung);
                                                            GesamtErgebniss = false;                                                       
                                                        }
                                                    }
                                                }
                                            }
                                            Ergebniss=SpeicherungInMYSQL.SpeichernSteps(tempData,programm_id_int,projekt_id_int);
                                            if(Ergebniss==false){
                                                System.out.println("Fehler beim SpeichernSteps "+programm_id_int);
                                            }
                                            else{
                                                //System.out.println("SpeichernSteps ist ok "+programm_id_int);
                                            }
                                            Ergebniss=SpeicherungInMYSQL.SpeichernMacroDaten(projekt_id_int, programm_id_int, tempData);
                                           
                                            if(Ergebniss==false){System.out.println("Fehler beim SpeichernMacroDaten");}
                                            else{//System.out.println("Speichern MacroDaten ist ok");
                                            }                       
                                                        System.out.println("Erstellt-----"+FileName);                                                       
                                                        tempData="";                                                                                                   
                                                        }
                                                    } catch(Exception e){e.printStackTrace();System.out.println(ProgrammBeschreibung);}                           
                                                }
                                            }       
                            cn.close();
                        }catch(Exception e) {System.out.println(e.getMessage()+"hinzufüg");}
        }
}       
%>
</body>
<div class="footer"></div>
</html>
 
A

Anzeige




Vielleicht hilft dir unser Java-Tutorial hier weiter —> (hier klicken)
Ja dass stimmt,da kann man ein paar Zeilen auslagern aber nicht viel,weil eigentlich ist diese Seite dafür gedacht um
mögliche Fehler bei Datenverarbeitung aufzulisten und deswegen 20 Zeilen auslagern in eine separate Klasse um die dann wieder einholen lohnt sich nicht.Gebe zu ist auch keine Profi Lösung..mit der Zeit wird es aber).
 
Das klingt jetzt echt hart, aber der Code ist wirklich schlecht.

Das Auslagern in eine Klasse wäre ein zwingend nötiger Schritt, damit man da irgendwas dran verbessern kann.
 
Ja dass stimmt,da kann man ein paar Zeilen auslagern aber nicht viel,weil eigentlich ist diese Seite dafür gedacht um
mögliche Fehler bei Datenverarbeitung aufzulisten und deswegen 20 Zeilen auslagern in eine separate Klasse um die dann wieder einholen lohnt sich nicht
  1. 20 Zeilen?!? Du hast etwa 200 Zeilen Java-Code in der JSP, die alles mögliche machen, vom Request einlesen bis zur DB-Abfrage.
  2. Das lohnt sich schon deswegen, weil es die Lesbarkeit drastisch erhöht.
FROM sasco.programm
Da ist ein Tippfehler, das muss fiasco.programm heißen :p
 
Nein, die sonst passen würden klingen alle nicht so gut (https://synonyme.woxikon.de/synonyme/fiasko.php)

Um nochmal zum Thema zurück zu kommen: ich würde z. B. den unteren Teil in ein Servlet verschieben, dann kannst Du per @MultipartConfig annotieren und einfach auf die Parts bzw. Parameter zugreifen: https://docs.oracle.com/javaee/6/tutorial/doc/glraq.html

Nach getaner Arbeit kannst Du das Ergebnis in Form von Attributen in den Request legen und diesen an das JSP weiterleiten.

Der Rest wäre natürlich weiter zu strukturieren, da stellt es einem wirklich die Zehennägel auf.
 
ist noch in der Entwicklung im Moment sieht so aus
Java:
%>   
<br><br><div >
<iframe width=49% height="500" align="left" frameborder="1" src="<!--kommt noch etwas rein-->"></iframe> 
       
<iframe width=49% height="500" align="right" frameborder="1" src="DatenbankStatistik.jsp"></iframe>
        </div>
       
<%
bin immer noch bei dem Bilder senden und empfangen(
 
Weiteres Versuch diesen Dreck zu verbessern.
Habe ein Servlet geschrieben und da läuft jetzt alles
Vom Code in jsp ist nur das geblieben:
Code:
</table></div>
<br /><br /><br /><br />
<p align=center><b><span style="font-size:11pt; font-weight:bold;">W&auml;hlen Sie eine Datei mit Programmen aus</span></b><br></p>
<FORM ENCTYPE="multipart/form-data" ACTION="/sasco/daten.einlesen/FilesReader"
    METHOD=POST>
    <table border="0" align="center" rules="groups" cellspacing="11">
        <tbody>
            <tr>
                <td align="right">Source-Datei: </td>
                <td align="left"><INPUT NAME="file" TYPE="file" class="file"></td>
            </tr>
            <tr><td></td></tr>
            <tr><td></td></tr>
            <tr>
                <td align="right">Projekt ID: </td>
                <td align="left"><select name="SelectDropDown" size=1 class="standard">
                        <option value=''></option>
                        <%
                            String[][] Projekte2 = AuswahlAusMYSQL.ErmittlungDerProjekte();
                            String[] Projekt_IDs = new String[Projekte2.length];
                            for (int i = 0; i < Projekte2.length;) {
                                ++i;
                                out.print("<option value=\"" + i + "\">" + Projekte2[i - 1][1] + " " + Projekte2[i - 1][0]
                                        + "</option>");
                                Projekt_IDs[i - 1] = Projekte2[i - 1][1];
                            }
                        %>
                </select></td>
            </tr>
            <tr><td></td></tr>
            <tr><td></td></tr>
            <tr>
                <td></td>
                <td align="left"><b><INPUT TYPE="submit" VALUE="hinzuf&uuml;gen"></b></td>
                <td></td>
                <td></td>
            </tr>           
            <tr>
                <td></td>
                <td align="right"><a href="Projektorganisation.jsp"><b><input type="button" name="zurueck" value="Zur&uuml;ck"></input></b></a>
                <td></td>
            </tr>
        </tbody>
    </table>
</FORM>

</body>
<div class="footer"></div>
</html>
im servlet ist der Rest:
Java:
@WebServlet("/daten.einlesen/FilesReader")

public class FilesReader extends HttpServlet{

    private static final long serialVersionUID = 1L;
    @Override
    protected void doGet(HttpServletRequest anfrage, HttpServletResponse antwort) throws ServletException, IOException {
        doPost(anfrage,antwort);
    }
    protected void doPost(HttpServletRequest anfrage, HttpServletResponse antwort) throws ServletException, IOException {
       
        String contentType = anfrage.getContentType();
        System.out.println(contentType);
            if ((contentType != null)
                    && (contentType.indexOf("multipart/form-data") >= 0)) {
               
                DataInputStream in = new DataInputStream(
                        anfrage.getInputStream());.....usw
Alles leuft aber ein wenig langsammer als direkt von JSP aus. Früher 5 min jetzt 10 min mit gleicher Datei.
Und am Ende kommt blanko Seite wie kann man nach dem Einlesen zurück auf die jsp umleiten die den Servlet aufgerufen hat?
Danke für jede Hilfe.
 
Die 150_000 Zeilen sind die verarbeitete Datei?

Ja, dann ist es völlig egal ob JSP oder Servlet.
Irgendwas anderes machst du falsch, vermutlich zwei mal Hochladen und/oder Auslesen.
 
Auch bei 150 000 Zeilen?
Ja, wobei ich mich vorhin vertan habe: ich hatte eine Bean im Kopf, die im JSP instantiiert und verwendet wird. Du richtest aber den Request direkt an Dein Servlet, somit gibt es überhaupt keinen Overhead.

Wenn Du eine Bean verwendet hättest, dann würdest Du - egal wie viele Zeilen Du einliest - nur ein einziges Mal ein Objekt erzeugen und eben die Methode aufrufen. Die Objekterzeugung und der Methodenaufruf sind so schnell, dass man einiges an Anstrengungen unternehmen muss, um das wirklich messen zu können (wenn Dich das interessiert: https://openjdk.java.net/projects/code-tools/jmh)

Ansonsten kannst Du mal überlegen, dass ein Methodenaufruf selbst für jede Zeile überhaupt nicht ins Gewicht fallen würde, weil die DB eine Ewigkeit länger braucht.
 
Der Opfer meldet sich zurück)..Ich habe mit dem RequestDispatcher herumgespielt.
Java:
RequestDispatcher r=anfrage.getRequestDispatcher("../Projektorganisation/Projektorganisation.jsp");
                        r.forward(anfrage, antwort);
und nach dem Einlesen öffnet er zwar die Projektorganisation.jsp aber weitere Navigation macht er von der Servlett Adresse und nicht von Projektorganisation.jsp ,also er macht
/daten.einlesen/Projektorganisation.jsp
statt
/fantastico/Projektorganisation/Projektorganisation.jsp
was mache ich falsch?
 
Für den Anfang würde ich das neue Ziel einfach mal fest einbauen.
 
A

Anzeige




Hier lernst du alle wichtigen Java-Grundlagen.
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben