[JAVA] Senden und verarbeiten Sie Formulardaten mit FormData-Objekt und Commons File Upload an Servlet

1. Zweck und Spezifikationen

  1. Senden Sie in einer Java-Webanwendung (Servlet, JSP) die im Formular in der JSP eingegebenen Informationen (z. B. Benutzername, Kennwort, Bild) per HTTP-Anforderung an den Server (Servlet).
  2. Überprüfen Sie den Eingabeinhalt, bevor Sie das Formular senden, und senden Sie ihn nicht, wenn Mängel vorliegen. Daher ist eine dynamische Verarbeitung erforderlich
  3. Inhaltstyp: Bei mehrteiligen / Formulardaten Da Anforderungsparameter nicht von Servlet erfasst werden können, ist eine Methode zum gleichzeitigen Erfassen von Feldern und Dateien erforderlich.
スクリーンショット 2018-12-29 17.48.21.png

2. Methode

3. Umwelt und Vorbereitung

4. Implementierung

sample.jsp


<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>

<!DOCTYPE HTML>
<html>
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	<title>Sample</title>
</head>
<body>
	<form id="form">
	Username : <input type="text" id="username" name="username"><br>
	Password : <input type="password" id="password" name="password"><br>
	Image :  <input type="file" id="image" name="image" accept="image/*"><br>
	<input type="submit" value="send">
	</form>
</body>
<script type="text/javascript" src="sample.js"></script>
</html>

sample.js


//Formularobjekt erstellen
var form = document.getElementById("form");
//Was tun, wenn das Übermittlungsereignis auftritt?
form.addEventListener("submit", function(event) {
	//Entfernen Sie die Standardfunktion des Formulars und verwalten Sie es mit JavaScript
	event.preventDefault();
	check();
});

function check() {
	//Holen Sie sich den Wert des Formulars
	var username = document.getElementById("username").value;
	var password = document.getElementById("password").value;
	var image = document.getElementById("image").value;

	//Senden, wenn eingegeben
	if (username != "" && password != "" && image != "") {
		sendData();
	} else {
		alert("Please input all item.");
	}
}

function sendData() {
	//Erstellen eines FormData-Objekts
	var formData = new FormData(form);
	//Senden Sie eine HTTP-Anfrage mit XMLHttpRequest
	var req = new XMLHttpRequest();

	//Verarbeitung nach Abschluss des Sendens / Empfangens
	req.addEventListener("load", function(event) {
		if (req.responseText == "done") {
			//Verarbeitung bei erfolgreicher Verarbeitung
			alert("Succeeded.");
		} else {
			alert("Failed to send.");
		}
	});
	//Verarbeitung bei fehlgeschlagenem Senden / Empfangen
	req.addEventListener("error", function(event) {
		alert("Error");
	});

	//Einstellungen für HTTP-Anforderungen
	req.open("POST", "/sample/SampleServlet"); // /Anwendungsname/Servlet-Name
	//Anfrage senden
	req.send(formData);
}

SampleServlet.java


package controller;

import java.io.File;
import java.io.IOException;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;

@WebServlet("/SampleServlet")
public class SampleServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

    public SampleServlet() {
        super();
    }

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		request.setCharacterEncoding("utf-8");

		//Antworttext
		String responseText = "done";

		//Erstellen Sie ServletFileUpload aus DiskFileItemFactory
		DiskFileItemFactory factory = new DiskFileItemFactory();
		ServletFileUpload sfu = new ServletFileUpload(factory);

		try {
			//Speichern Sie die Daten des Anforderungsformulars in einer Liste
			List list = sfu.parseRequest(request);
			for (Object o : list) {
				//Behandeln Sie alle Formulardaten als FileItem
				FileItem item = (FileItem) o;
				//Verzweigen Sie abhängig davon, ob FileItem ein Feld oder eine Datei ist
				if (item.isFormField()) {
					//Rufen Sie für Felder den Feldnamen und den Wert ab
					// (In der Form<input name="Feldname" value="Eingaben eingegeben")
					String fieldName = item.getFieldName();
					String value = item.getString();
					if (fieldName.equals("username")) {
						//Verarbeitung von Benutzernamen
						System.out.println("username : " + value);
					} else if (fieldName.equals("password")){
						//Passwortverarbeitung
						System.out.println("password : " + value);
					}
				} else {
					File file = new File(item.getName());
					try {
						String dirPath = "Ziel zum Speichern der Bilddatei";
						String filePath = dirPath + File.separator + file.getName();
						//Bilddatei speichern
						item.write(new File(filePath));
					} catch (IOException e) {
						e.printStackTrace();
						responseText = "error";
					} catch (Exception e) {
						e.printStackTrace();
						responseText = "error";
					}
				}
			}
		} catch (FileUploadException e) {
			e.printStackTrace();
			responseText = "error";
		}
		//Antwort senden
		response.getWriter().print(responseText);
	}
}

6. Ergebnis

Wenn nicht eingegeben スクリーンショット 2018-12-29 17.49.27.png

Wenn alle Elemente eingegeben wurden スクリーンショット 2018-12-29 17.49.49.png

5. Referenz

JavaScript

Servlet

Recommended Posts

Senden und verarbeiten Sie Formulardaten mit FormData-Objekt und Commons File Upload an Servlet
So erreichen Sie das Hochladen von Dateien mit Feign
Android Development-WEB Access (POST) Versuchen Sie, mit der Außenwelt zu kommunizieren und Daten zu senden. ~
Ich habe versucht, das Hochladen von Dateien mit Spring MVC zu implementieren
Erstellen Sie eine API zum Senden und Empfangen von Json-Daten mit Spring