File Einlesen mit jsp/servlets

Rokko_11

Mitglied
Hi!

Seit ein paar wochen habe ich folgendes Problem:
Ich hab auf einer jsp-Seite folgendes Formular:

Code:
<form id="file" name="file" method="post" action="/JavaWebApplication/fileUpload" enctype="multipart/form-data">
       <input type="file" name="casetrain" id="case" accept="text/xml" />
       <input type="submit" name="erstellen2" value="Erstellen" />
</form>

Laut meiner bisherigen Webrecherche sollte das stimmen... Glaub ich...

Problem: wenn ich das jetzt in meinem fileUpload-Servlet versuche aufzurufen, bekomme ich leider als
request.getParamter("case") null heraus :(

Hab es inzwischen auch mit der Oreilly-Bibliothek versucht, aber ich komme nicht drauf, wie ich in meinem Servlet aus dem Multipart ein ganz normales File erstelle.

Hatte jemand von euch schon das Problem?
 
Zuletzt bearbeitet:

HLX

Top Contributor
Frage nach dem Namen, nicht nach der id:
Code:
request.getParameter("casetrain");
 

Rokko_11

Mitglied
Ne... klappt nicht.
Hatte anfangs id auch in "casetrain", hab dann aber zum Eintragen ins Forum nur die id geändert ;):oops:

Mein Problem ist eher dieses "enctype/multi-part". Hab im Internet nur Code zum direkten Hochladen der Datei gefunden, allerdings nicht, wie man diese Datei im Servlet abfragt... :(
 

HLX

Top Contributor
Stimmt, da war was. Du brauchst die Bibliothek commons-fileUpload von Apache:
FileUpload - Home

Damit kommst du dann an die Datei:
Code:
ServletFileUpload upload = new ServletFileUpload(new DiskFileItemFactory());
List<FileItem> items = upload.parseRequest(request);
 
R

Rokko_11.2

Gast
Hm... Hab jetzt nen Tag lang gegoogelt, aber nix gefunden... auch die Api gibt nix her...

Wie mach ich denn dann aus dem File-Item ein java.io.File?
 

HLX

Top Contributor
Wofür brauchst du die Datei als java.io.File?

Du kannst die hochgeladene Datei einfach auf dem Server speichern:
Code:
List<FileItem> items = upload.parseRequest(request);
java.io.File file = new java.io.File("DateinameUndPfadAufDemServer");
items.get(0).write(file);
 

Rokko_11

Mitglied
Ich muss das File in eine (bereits vorgefertigte) Methode eingeben:
Die Datei (normalerweise ein XML) wird durchgegangen und gemäß eines bestimmten Xml-Schemas wird ein Objekt erstellt mit genau diesen Eigenschaften. Und dort ist der Eingabeparameter ein java.io.File.

Und das ganze soll am Ende so ausehen:
Der User sieht einen File-Input auf der Webseite. Wählt dort die xml-Datei, die er hochgeladen haben will aus und erstellt damit nichtwissend ein neues Java-Objekt, welches dann verrückte Sachen macht ;)

Und ich bin auf dieses Problem gestoßen, nachdem beim Firefox der Pfad bei einem File-Input nicht mit übergeben wird. Mit dem InternetExplorer habe ich allgemein gar keine Probleme.
 

HLX

Top Contributor
Wenn der Übergabeparameter der bereits vorgefertigten Methode ein java.io.File-Objekt ist, wird in der entsprechenden Methode vermutlich über einen InputStream von der Festplatte des Servers gelesen. Das File-Objekt selbst hält nämlich nicht den Inhalt der Datei, sondern liefert nur Meta-Daten.

Dann müsstest du nur wie oben beschrieben die Datei auf dem Server speichern und anschließend das java.io.File-Objekt an die vorgefertigte Methode übergeben.
 

Rokko_11

Mitglied
Dankeschön! Das klappt jetzt soweit...

Nur: In meinem echten Quelltext gehört zu dem Button "erstellen2" noch ein textfeld und dann gibts noch einen button mit select-Feld (User hat Entscheidung zwischen 2 Buttons).
Jetzt muss ich ja feststellen, welcher Button geklickt wurde und danach, welche Option von Select-Feld ausgewählt wurde oder welcher Text ins Textfeld eingegeben wurde.
Bei google findet sich irgendwie nur php-relevantes Zeugs... Oder Sachen, die oreillys MultipartRequest-Bibliothek betreffen. Und mit beiden Parsern gleichzeitig klappts dann auch net ;)
 

HLX

Top Contributor
Du kannst Fallunterscheidungen über ein hidden field und JavaScript machen. Deine Buttons erhalten dann ein Attribut "onclick" in dem eine JS-Methode aufgerufen wird:
HTML:
...
function setHiddenValue(wert) {
  document.forms[0].hiddenField.value = wert;
}
...
<input type="hidden" name="hiddenField">
<input type="submit" name="erstellen2" value="Erstellen" onclick="setHiddenValue('erstellen2Clicked')"/>

Den Wert des hidden field kannst du im Servlet per reqest.getParameter("hiddenField") auswerten.
 

Rokko_11

Mitglied
Nein... auch diese request.getParameter-Abfrage liefert null :( gehört ja auch zum multipart-formular.

Ich glaub, ich mach einfach 2 Formulare, welche auf 2 verschiedene Servlets verweisen...
Allerdings hab ich ja das Problem damit nur verschoben, weil ich ja den Inhalt des Select-Menus oder den Inhalt des Textfeldes nicht bekommen kann...
Ein Session-Attribut kann ich ja nicht irgendwie mit JavaScript setzen, oder?
 

HLX

Top Contributor
Nein, das geht nicht.

Falls du zwei Formulare nimmst, müsstest du Werte aus dem ersten Formular per JavaScript in das zweite Formular übernehmen können:
Code:
function setHiddenValue(wert) {
  document.forms[1].hiddenField.value =  document.forms[0].feldname.value;
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
H File Output Servlet Web Tier 6
H Applet wirft AccessControlException bei File von Servlet Web Tier 3
M JSP File Browser Web Tier 9
A Servlet File Upload funktioniert nur lokal auf Entwicklungsrechner, nicht in Tomcat Web Tier 5
N File empfangen Web Tier 3
M File aus Projektverzeichnis laden Web Tier 16
R Download JSP-File/Script Web Tier 3
L File Upload - Dateiformat einschränken Web Tier 4
N is out of sync with file system Web Tier 2
S Servlet File Upload (API oder JSPSmart download) Web Tier 4
reibi Konfiguration ausserhalb vom WAR-File Web Tier 7
W Java code aus JSP-File durch JSTL code ersetzen Web Tier 8
hdi File Upload erst nach Prüfung Web Tier 4
E Jsp file upload Web Tier 3
D welcome-file in web.xml Web Tier 3
O eine .do-File als welcome-file im web.xml Web Tier 4
E File upload mit jsp (frage zum speicherort) Web Tier 12
X Properties-File und relative Pfadangaben Web Tier 5
S JSP File Download (SVNKit) Web Tier 11
N GWT - Textdatei uploaden, einlesen und verarbeiten Web Tier 5
J JSP - Datei einlesen Web Tier 15
X Textdatei einlesen JSP Web Tier 2
J Servlet soll XML ausgeben und Javascript soll dieses einlesen Web Tier 3
S sprachunabhängige Properties einlesen Web Tier 4
R Array oder Listen einlesen mit JSF über javaserverpage Web Tier 2
T Model2-Architektur Servlets Web Tier 0
D Servlet EJBs in Servlets verwenden? Web Tier 4
S JSF, JSP, Servlets - ich verstehe nur noch Bahnhof Web Tier 4
M Best practice JSP und Servlets Web Tier 1
A Aufruf eines Servlets auf einer JSP Seite funktioniert nicht Web Tier 10
A Wartezeit nach Tomcat start wegen Servlets zu hoch Web Tier 2
T Einsteigerfragen zu Servlets/Webprogrammierung mit Java Web Tier 11
C Kommunkation Servlets/Browseraufruf Servlet Web Tier 4
U Servlet Allgemeine Frage zu Servlets Web Tier 2
T Tomcat mit Servlets Problem Web Tier 7
A Parameterübergabe an Servlet und Aufruf von Servlets per Java Code Web Tier 7
R Daten Streamen mit Servlets. Web Tier 4
J web.xml / Erreichbarkeit von Servlets Web Tier 6
F Richtiges Session Management mit Servlets Web Tier 4
S Architektur-Problem? 2 Servlets, ein Objekt Web Tier 4
S Ein ControllerServlet für andere Servlets - Sinnvoll oder nicht? Web Tier 34
D Servlets vor direktem Zugriff schützen Web Tier 2
O setDefaultUncaughtExceptionHandler in Servlets Web Tier 2
M Design-Frage: JSP, Servlets und CSS Web Tier 11
Java.getSkill() Webseiten JSP Servlets Struktur Web Tier 3
S Daten zwischen 2 Servlets aus 2 Webapplikationen teilen? Web Tier 17
D client-seitige Sessions mit Servlets Web Tier 5
M Bilder in Servlets Web Tier 8
U Grundaufbau der Webapp mit JSP/Servlets Web Tier 7
J Welcher WebServer(-anbieter) für Servlets? Web Tier 5
S Ablauffrage von Servlets Web Tier 2
G Kurze Frage zu Servlets&Struts Web Tier 4
L Massenaufruf ( 5000/s ) eines Servlets testen. Web Tier 4
G synchronized bei Servlets Web Tier 24
rambozola session attribut in servlets und jsps Web Tier 11
D Kann Servlets nicht kompilieren Web Tier 7
M Grundlegende Frage zu Servlets und JSPs Web Tier 12

Ähnliche Java Themen

Neue Themen


Oben