Estoy intentando hacer una pequeña aplicación en la que un formulario de tipo Multipart envía la petición a un controlador y este la redirige al servlet que la procesa. Para esto uso un campo oculto con el nombre form en el que indico qué servlet usar. Pues bien, si uso Tomcat 7 no tengo ningún tipo de problema. Lo malo es que tengo que usar Tomcat 6 y aquí no logro hacer que funcione. He probado con 2 librerías. Fileupload de Apache y una que me he descargado de OReilly, con ambas en el controlador puedo obtener el parámetro form y averiguar a qué servlet redirigir, pero en el servlet no puedo volver a procesar el formulario, es como si en el controlador se "eliminaran" los parámetros.
El código para la librería de OReilly es: String tipo = request.getContentType().toLowerCase();
if (tipo.contains("multipart/form-data")) {
com.oreilly.servlet.MultipartRequest multi = new MultipartRequest(request, context.getRealPath("/")+"WEB-INF/classes"); form = multi.getParameter("form");
} else {
form = request.getParameter("form"); }
Para Apache:
if (ServletFileUpload.isMultipartContent(request)) {
try {
DiskFileItemFactory factory = new DiskFileItemFactory();
// Tamaño maximo para alojar en memoria factory.setSizeThreshold(4096); factory.setRepository(new File(context.getRealPath("/")+"WEB-INF/classes"));
ServletFileUpload upload = new ServletFileUpload(factory);
// Procesamos los items subidos para encontrar el fichero Iterator<?> iter = items.iterator();
while (iter.hasNext()) { FileItem item = (FileItem) iter.next(); // Si NO es un campo del formulario es un fichero if (item.isFormField()){ if (item.getFieldName().equals("form")){ form = item.getString(); } } }
} catch (FileUploadException e) { Logger.getLogger(ControladorPrincipalServlet.class.getName()).log(Level.SEVERE, "Fallo al subir el fichero.", e); form = null; } } else { form = request.getParameter("form"); }
Y para redirigir: if (form.equals("guardarFicheroServlet")) { RequestDispatcher dispatcher = context.getNamedDispatcher("GuardarFicheroServlet"); dispatcher.forward(request, response); }
Buenas.
Estoy intentando hacer una pequeña aplicación en la que un formulario de tipo Multipart envía la petición a un controlador y este la redirige al servlet que la procesa. Para esto uso un campo oculto con el nombre form en el que indico qué servlet usar.
Pues bien, si uso Tomcat 7 no tengo ningún tipo de problema. Lo malo es que tengo que usar Tomcat 6 y aquí no logro hacer que funcione.
He probado con 2 librerías. Fileupload de Apache y una que me he descargado de OReilly, con ambas en el controlador puedo obtener el parámetro form y averiguar a qué servlet redirigir, pero en el servlet no puedo volver a procesar el formulario, es como si en el controlador se "eliminaran" los parámetros.
El código para la librería de OReilly es:
String tipo = request.getContentType().toLowerCase();
if (tipo.contains("multipart/form-data")) {
com.oreilly.servlet.MultipartRequest multi = new MultipartRequest(request, context.getRealPath("/")+"WEB-INF/classes");
form = multi.getParameter("form");
} else {
form = request.getParameter("form");
}
Para Apache:
if (ServletFileUpload.isMultipartContent(request)) {
try {
DiskFileItemFactory factory = new DiskFileItemFactory();
// Tamaño maximo para alojar en memoria
factory.setSizeThreshold(4096);
factory.setRepository(new File(context.getRealPath("/")+"WEB-INF/classes"));
ServletFileUpload upload = new ServletFileUpload(factory);
// Tamaño maximo permitido
upload.setSizeMax(10000000);
List<?> items = upload.parseRequest(request);
// Procesamos los items subidos para encontrar el fichero
Iterator<?> iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
// Si NO es un campo del formulario es un fichero
if (item.isFormField()){
if (item.getFieldName().equals("form")){
form = item.getString();
}
}
}
} catch (FileUploadException e) {
Logger.getLogger(ControladorPrincipalServlet.class.getName()).log(Level.SEVERE, "Fallo al subir el fichero.", e);
form = null;
}
} else {
form = request.getParameter("form");
}
Y para redirigir:
if (form.equals("guardarFicheroServlet")) {
RequestDispatcher dispatcher = context.getNamedDispatcher("GuardarFicheroServlet");
dispatcher.forward(request, response);
}
¿Sabe alguien cómo puedo arreglar esto?
Muchas gracias y un saludo.