Servlet Servlet Kommunikation

Dimax

Top Contributor
Guten Tag, ich habe ein Problem das ich nicht gelöst kriege.

Ich habe ein Servlet der ließt eine Textdatei mit mehreren Programmen drin,
und ich habe ein Servlet der ließt eine Textdatei mit einzelnen Programmen drin.
Jetzt brauche ich ein Servlet der Verzeichnispfad analysiert und ließt alle Dateien ein,die in diesem Verzeichnis liegen,in
ein FileArray im weiterem Verlauf soll er die Dateien analysieren und weiterleiten zu dem passendem Servlet.
Wie kann man dieses weiterleiten realisieren,mir fällt nichts ein.

Die drei Servlets die ich habe :

FileReader.java -ließt Dateien mit einzelnen Programmen drin:

Java:
package daten.einlesen;

@WebServlet("/daten.einlesen/FileReader")
@MultipartConfig
public class FileReader extends HttpServlet {
	private static final long serialVersionUID = 1L;

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		final Part partFile=request.getPart("file");
		final Part partProg=request.getPart("progra_name");
		final Part partProj=request.getPart("SelectDropDown");
		long sizeFile=partFile.getSize();
		long sizeProg=partProg.getSize();
		long sizeProj=partProj.getSize();
		final PrintWriter out=response.getWriter(); ...usw

FilesReader.java-ließt Dateien mit mehreren Programmen drin:

Java:
package daten.einlesen;

@WebServlet("/daten.einlesen/FilesReader")
@MultipartConfig(fileSizeThreshold=1024*1024*2, // 2MB
				 maxFileSize=1024*1024*10,      // 10MB
				 maxRequestSize=1024*1024*50)   // 50MB
public class FilesReader extends HttpServlet{

	private static final long serialVersionUID = 1L;
	
	@Override
	 protected void doPost(HttpServletRequest anfrage, HttpServletResponse antwort) throws ServletException, IOException {
		
		final Part partFile=anfrage.getPart("file");
		final Part partProj=anfrage.getPart("SelectDropDown");
		long sizeFile=partFile.getSize();
		long sizeProj=partProj.getSize();
		final PrintWriter out=antwort.getWriter(); ...usw

FilesDirReader.java -ließt Dateien die in einem Verzeichnis liegen und soll entscheiden welche Dateien zu welchem Servlet weitergeleitet werden sollen.

Java:
package daten.einlesen;

@WebServlet("/daten.einlesen/FilesDirReader")
@MultipartConfig
public class FilesDirReader extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		Connection cn=ComboPoole.getInstance().getConnection();
		final Part partProj=request.getPart("SelectDropDown");
		long sizeProj=partProj.getSize();
		final PrintWriter out=response.getWriter();
		final String partFile=request.getParameter("pfad");
		File f = new File(partFile);
		File fileArray[]=f.listFiles();//
 String fileName="";
		String fileType="";
		String fileNam="";
		String file="";
		String zeile = "";
		String pfad="";
		boolean GesamtErgebniss=false;
		boolean Ergebniss;
		
		if (f.exists() && sizeProj>0 && fileArray != null) {
		  if (f.isDirectory() && f.canRead()) {
			
			String[][] Projekte2 = AuswahlAusMYSQL.ErmittlungDerProjekte();
			String Projekt_ID=Projekte2[Integer.parseInt(request.getParameter("SelectDropDown"))-1][1];
			int projekt_id_int = 0;
			projekt_id_int = Integer.parseInt(Projekt_ID);
			int programm_id_int = 0; 
		    for(int i=0;i<fileArray.length;i++){
		    	if(fileArray[i].length()>0){
		    		fileName=fileArray[i].getName();
		    		pfad=fileArray[i].getAbsolutePath();	    		    		
		    	if(fileName.indexOf(".")>0){
		    		fileNam=fileName.substring(0,fileName.lastIndexOf("."));
		    		fileType=fileName.substring(fileName.lastIndexOf(".")+1,fileName.length());
		    	
		    	if(fileType.equals("txt")){
		    		FileReader fr = new FileReader(pfad);
		    		BufferedReader bf=new BufferedReader(fr);
		    		while( (zeile = bf.readLine()) != null )
		    	    {
		    		file=file.concat(zeile);
		    		//System.out.println(zeile);
		    		file=file.concat(System.getProperty("line.separator"));
		    	    }
					if(file.indexOf("ADD")>0){ // wenn dass stimmt soll das Programm die im fileArray[i] liegt an FilesReader weitergeleitet werden
                                                                                 //wenn nicht  dann an FileReader weiterleiten.
ich habe versucht irgendwie ein Formular zu basteln aber bin mir nicht sicher ob es überhaupt geht und wie ich den sende :


Java:
if(file.indexOf("ADD")>0){
					  out.print("<FORM ENCTYPE='multipart/form-data' ACTION='/daten.einlesen/FilesReader'"+
							  	"METHOD=POST><input type='hidden' value="+fileArray[i]+" name='file'>"+
							  	"<input type='hidden' name='SelectDropDown' value="+request.getParameter("SelectDropDown")+"> ");
					  }
Danke für jede Hilfe.
 

mihe7

Top Contributor
Jetzt brauche ich ein Servlet der Verzeichnispfad analysiert und ließt alle Dateien ein,die in diesem Verzeichnis liegen
Nein, so ein Servlet brauchst Du nicht. Du musst anfangen, Dein Programm vernünftig zu strukturieren. Servlets sind die HTTP-Schnittstelle zwischen dem Web und deinem Programm. Stell Dir einfach mal vor, Du würdest Deine Software nicht über den Browser sondern über die Konsole bedienen. Dann gäbe es keine Servlets. Wie würdest Du das Problem dann lösen?
 

httpdigest

Top Contributor
nur dieses Programm wurde als Dynamisches web Projekt gedacht also eine war Datei .
Ja und? Das heißt ja nicht, dass jede Klasse, die du schreibst, automatisch immer ein Servlet sein muss. Wie @mihe7 schon sagte, ist ein Servlet die bloße Web-Schnittstelle und die eigentliche Logik deines Programmes sollte woanders, unabhängig von der Schnittstelle, implementiert sein.
 

mihe7

Top Contributor
Dann würde ich einfach die Funktion aufrufen und gebe die Datei als Parameter mit
Ja, mal etwas konkreter: Du hättest irgendwo eine Klasse mit einer Methode, die Dein Problem löst, also etwas wie
Java:
public class FileProblemSolver {
    public void solveMyProblem(File file) { 
        // löst das Problem
    }
}
Das wird dann an anderer Stelle verwendet, z. B. in main:
Java:
public class MyProgram {
    public static void main(String[] args) {
        File file = new File(args[0]);
        FileProblemSolver solver = new FileProblemSolver(file);
        solver.solveMyProblem(file);
    }
}

Und das, was hier in main passiert, kannst Du auch aus dem Servlet heraus machen.
 

Dimax

Top Contributor
die eigentliche Logik deines Programmes sollte woanders
Die eigentliche Logik liegt auch nicht im Servlet, er bedint nur request und response .Die Logik sieht so aus:
der Client lädt ein txt File zum Server hoch,also von jsp Seite wird Formular mit Daten an den Servlet gesendet.
Der Servlet bearbeitet die Anfrage(das heist ruft mehere Funktionen auf zum Speichen in die DatenBank ,zum Statistik erstellen und so weiter,) und erzählt dem Client wie es gelaufen ist.
 

Dimax

Top Contributor

mihe7

Top Contributor
Du sollst den Code ja auch nicht duplizieren, sondern den Code umstrukturieren (neudeutsch nennt man das Refactoring).

Das Servlet kümmert sich nur und ausschließlich um die Entgegennahme von Anfragen und das Zurückgeben von Antworten. Der Rest wird auf andere Klassen verteilt, gerade damit der Code wiederverwendbar und wartbar wird/bleibt. Wenn Du keine Struktur im Programm hast, wirst Du irgendwann nicht mehr durchblicken.

Fang wenigstens damit an, den Code in eine eigene Methode zu packen. Dann kannst Du zumindest per new eine Instanz Deiner File(s)Reader-Klasse erzeugen und die Methode aufrufen. Das ist zwar aus Entwurfssicht auch noch Müll, aber immer noch besser als Requests rumzureichen.
 

Dimax

Top Contributor
Ich versuche deutlicher zu erklären was ich brauche:

Dass ist die Auswahl 11619

unter jedem button gib es die Formen.
1.Form die an FileReader geschickt wird

11620

2.Form die an FilesReader geschickt wird
11621

3.Form die an FilesDirReader geschikt wird 11622

und um keine neue Klasse für FilesDirReader zu erstellen ,weil im Verzeichnis können nur die Programme liegen die 1 oder 2
Servlet bearbeitet wolte ich nur die Dateien die eingelesen wurden an den entsprechenden Servlet weiter zu leiten..
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Ich versuche deutlicher zu erklären was ich brauche:
Dazu braucht man aber keine Screenshots der Oberfläche. Das UI interessiert überhaupt nicht.

Der Punkt ist doch folgendes (wenn ich mich recht entsinne, ging es darum, Programme in eine DB einzulesen):
1. es gibt Dateien, die ein Programm enthalten. Diese Dateien kannst Du "unmittelbar" in die DB einlesen.
2. es gibt Dateien, die mehrere Programme enthalten. Aus diesen willst Du die einzelnen Programme auslesen, um diese dann in die DB einlesen zu können.
3. es gibt ein Verzeichnis mit Dateien. Jede dieser Dateien kann ein einzelnes oder mehrere Programme enthalten.

Soweit richtig?
 

mihe7

Top Contributor
Na also, dann brauchst Du nur eine Klasse, die Methoden für diese Möglichkeiten anbietet. Wenn ich Dein UI richtig deute, dann fehlt in den Dateien, die nur ein Programm enthalten ein Name/eine Beschreibung. In den Dateien, die mehrere Programme enthalten, ist diese dagegen vorhanden?
 

Dimax

Top Contributor
Die einzelne Programme kann man selbst benennen.Die Programme die in einer Datei drin sind ist das nicht möglich ,weil sonst würde ich jedes mal fragen wie das Programm heißen soll.Und falls in einer Datei 600 Programme drin sind wird es schon ein Bisschen übertrieben.Deswegen in diesem Fall werden Programme automatisch genannt und nicht nur das.Die Dateien die nur ein Programm enthalten werden auch anders behandelt.Die werden nicht gespaltet und da wird nicht nach bestimmten Signalwörtern gesucht ,die ein Anfang des neuen Programm signalisieren und dessen Ende.
 

mihe7

Top Contributor
Gut, wie Du das splittest etc. kannst Du Dir ja selbst überlegen. Am schönsten wäre es natürlich, wenn Du einfach durch die Zeilen gehen und während der Iteration feststellen könntest, ob ein neues Programm beginnt. Aber das soll mich nicht weiter interessieren.

Jetzt brauchst Du doch nur ein, zwei, ... Klassen zu schreiben, die genau das machen, was Du eben beschrieben hast: einzelnes Programm aus einer Datei einlesen, mehrere Programme aus einer Datei einlesen und unterschiedlich viele Programme aus vielen Dateien einlesen.

Diese Klasse(n) verwendest Du dann einfach in Deinen drei Servlets, d. h. die Servlets sehen dann grob nur noch so aus:
Code:
1. Parameter aus dem Request auslesen
2. Objekt der jeweiligen "Verarbeitungsklasse" erzeugen
3. Methode des Objekts mit Parametern aus Request aufrufen
4. Antwort als Response ausgeben
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Kommunikation zwischen Java Servlet und Bean Allgemeines EE 1
G Jakarta Servlet API 5.0 Allgemeines EE 1
pkm Frage wegen AJAX-Zugriff auf ein Servlet Allgemeines EE 1
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
G Problem: Servlet in JSP einbinden mit <jsp:include> Allgemeines EE 3
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
0 Problem mit librarys javax.servlet.http.HttpServletRequest cannot be resolved Allgemeines EE 1
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
M servlet --> jsp - problem beim umstrukturieren Allgemeines EE 5
D Servlet Problem über Server Allgemeines EE 26
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
N JSP kann Servlet nicht aufrufen! :-( Allgemeines EE 2
J Servlet Parameter aus web.xml übergeben, wie zugreifen? Allgemeines EE 2
L servlet.jar ? Allgemeines EE 2
K Servlet: Respone.redirect mit POST-Parametern Allgemeines EE 5

Ähnliche Java Themen

Neue Themen


Oben