J2EE – Recuperando datos enviados via formulario

[notice]Desde que este post fue creado han pasado 8 años así que puede que hayan cambiado cosas.[/notice]

Cuando queremos enviar datos desde un frontend al backend hacemos uso de formularios, sea visible o no, o sea generado mediante un Ajax. Tenemos varios tipos de formularios pero lo que mayormente nos encontraremos son:

Formulario normal

Típico formulario de una web cuando nos registramos, nos pide datos en campos de texto. Supongamos que en el formulario tenemos el campo login y campo password. Para recuperarlo haríamos uso de unos de los métodos de la clase HttpServletRequest, el método getParameter. En el código que se ve a continuación, request es una instancia de HttpServletRequest.

String login = request.getParameter("login");
String passw = request.getParameter("password");

Si este campo ha sido enviado por el formulario, en otras palabras estaba contenido dentro del form HTML que se ha enviado, recuperaremos el valor que había en el campo antes de enviarlo como String.

Pero si intentamos recuperar un campo que no existía en el formulario, el metodo getParameter nos devolverá un null. Así que tendremos que controlar estos nulls para que no salte una Excepción y finalice la ejecución del Servlet.

 

Formulario Multipart

Es el tipo de formulario que usaremos cuando queramos enviar un fichero al servidor (foto, documento … cualquier archivo). Para este tipo de formulario, veremos que si intentamos usar el request.getParameter() ya que nos devolverá null, aunque el campo exista.

Para ello haremos uso de otra clase, la MultipartRequest.

MultipartRequest mpRequest = new MultipartRequest();
mpRequest.setRequest(request);

String campoTexto = (String) mpRequest.getParameter("campoform");
MultipartRequest.File uploadedFile = mpRequest.getFileParameter("form_inputfile");

Cuidado, dependiendo de la versión de Java o de la clase MultipartRequest, podemos encontrarnos con que el método getFileParameter no existe, tal y como podemos ver aquí  (en la versión del link el método se llama getFile() ).

Ahora ya tenemos el fichero en un objeto (realmente el objeto apunta al fichero que se ha subido a la carpeta temporal, pero para nosotros sera como el fichero). Ahora deberemos guardarlo en el disco del servidor y quiza de nuevo en la version de Java que tengamos en el servidor no dispongamos de la clase Files, así que crearemos unas funciones que nos serviran para cuando queramos guardar un fichero en el disco.

 

Funciones genéricas / útiles

Método / Función guardar fichero en disco

public static boolean saveFileToDisk(MultipartRequest.File file, String fileName, String filePath) {
	try {
		InputStream in = file.getInputStream();
		File f = new File(filePath+fileName);
		OutputStream out = new FileOutputStream(f);
		byte[] buffer = new byte[256];
		int n = in.read( buffer );
		while (n>0) {
			out.write(buffer,0,n);
			n = in.read(buffer);
		}		
		in.close();
		out.close();
		return true;
	} catch (Exception e) {
		return false;
	}
}

 

Método / función copiar fichero

public static boolean copyFile(File src, File dst) throws Exception {
	// Debido a que tenemos la version 6 de Java, no tenemos el Files.copy.
	if ( src == null || dst == null) { return false; }
	if ( src.exists() == false || src.isDirectory() == true ) { return false; }
	if ( src.canRead() == false ) { return false; }
	
	InputStream is = null;
	OutputStream os = null;
	try {
		is = new FileInputStream(src);
		os = new FileOutputStream(dst);
		byte[] buffer = new byte[1024];
		int length;
		while ((length = is.read(buffer)) > 0) {
			os.write(buffer, 0, length);
		}
		is.close();
		os.close();
		return true;
	} catch (Exception e) {
		is.close();
		os.close();
		return false;
	} 
}

public static boolean copyFile(String src, String dst) throws Exception {
	if (src == null || dst == null || src.trim().length() == 0 || dst.trim().length() == 0 ) {return false;}
	File srcfile = new File(src);
	File dstfile = new File(dst);
	return copyFile(src,dst);
}

 

Método / función limpiar nulls

public static String cleanNullString(String str) {
	String retorno = str;
	if ( str == null ) return "";
	if ( retorno.equals("(null)") ) return "";
	if ( retorno.equals("null") ) return "";
	return retorno.trim();
}

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada.

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.