tutorial servlet prácticos ejemplos ejemplo con java http servlets post

java - servlet - jsp tutorial



Obtener la carga útil de solicitud de la solicitud POST en el servlet de Java (9)

Tengo una biblioteca de JavaScript que está enviando una solicitud POST a mi servlet Java, pero en el método doPost , parece que no puedo obtener el contenido de la carga útil de la solicitud. En Herramientas para desarrolladores de Chrome, todo el contenido está en la sección Solicitar carga útil en la pestaña de encabezados, y el contenido está allí, y sé que el método doPost está recibiendo el POST, pero simplemente aparece en blanco.

Para el objeto HttpServletRequest , ¿de qué manera puedo obtener los datos en la carga útil de la solicitud?

Hacer request.getParameter() o request.getAttributes() ambos terminan sin datos


Con Apache Commons IO puedes hacer esto en una línea.

IOUtils.toString(request.getReader())


Corrientes de Java 8

String body = request.getReader().lines() .reduce("", (accumulator, actual) -> accumulator + actual);


Puede usar Buffer Reader de solicitud para leer

// Read from request StringBuilder buffer = new StringBuilder(); BufferedReader reader = request.getReader(); String line; while ((line = reader.readLine()) != null) { buffer.append(line); } String data = buffer.toString()


Si el contenido del cuerpo es una cadena en Java 8, puede hacer:

String body = request.getReader().lines().collect(Collectors.joining());


Si puede enviar la carga útil en JSON, esta es la forma más conveniente de leer la carga de juego:

Ejemplo de clase de datos:

public class Person { String firstName; String lastName; // Getters and setters ... }

Ejemplo de carga útil (cuerpo de la solicitud):

{ "firstName" : "John", "lastName" : "Doe" }

Código para leer la carga útil en servlet (requiere com.google.gson. *):

Person person = new Gson().fromJson(request.getReader(), Person.class);

Eso es todo. Agradable, fácil y limpio. No olvides configurar el encabezado del tipo de contenido en application / json.


Solo necesitas

request.getParameterMap ()

para obtener POST y GET - Parámetros.

El método devuelve un Map<String,String[]> .

Puede leer los parámetros en el Mapa por

Map<String, String[]> map = request.getParameterMap(); //Reading the Map //Works for GET && POST Method for(String paramName:map.keySet()) { String[] paramValues = map.get(paramName); //Get Values of Param Name for(String valueOfParam:paramValues) { //Output the Values System.out.println("Value of Param with Name "+paramName+": "+valueOfParam); } }


Usando Java 8 prueba con los recursos:

StringBuilder stringBuilder = new StringBuilder(); try(BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(request.getInputStream()))) { char[] charBuffer = new char[1024]; int bytesRead; while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { stringBuilder.append(charBuffer, 0, bytesRead); } }


Use getReader() para leer el cuerpo de la solicitud


String payloadRequest = getBody(request);

Usando este método

public static String getBody(HttpServletRequest request) throws IOException { String body = null; StringBuilder stringBuilder = new StringBuilder(); BufferedReader bufferedReader = null; try { InputStream inputStream = request.getInputStream(); if (inputStream != null) { bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); char[] charBuffer = new char[128]; int bytesRead = -1; while ((bytesRead = bufferedReader.read(charBuffer)) > 0) { stringBuilder.append(charBuffer, 0, bytesRead); } } else { stringBuilder.append(""); } } catch (IOException ex) { throw ex; } finally { if (bufferedReader != null) { try { bufferedReader.close(); } catch (IOException ex) { throw ex; } } } body = stringBuilder.toString(); return body; }