![[17.0.0.2 and later]](../ng_v17002plus.gif)
Configuración de aplicaciones web Liberty para volver a leer datos POST.
La aplicación web puede volver a leer los datos POST de la solicitud en el ámbito utilizando la corriente de entrada, un lector o parámetros analizados. Establezca la propiedad de contenedor web para utilizar este comportamiento de relectura.
Antes de empezar
La especificación del servlet Java™ permite a una aplicación web leer datos POST de una solicitud utilizando una corriente de entrada, utilizando un lector o utilizando parámetros analizados. Sin embargo, la aplicación web solo puede utilizar uno de estos métodos en el ámbito de una solicitud para leer los datos POST.
Al establecer la propiedad de contenedor web, la aplicación web puede releer los datos POST varias veces. Sin embargo, un lector o una corriente de entrada debe estar cerrado para completar la operación de lectura antes de que se pueda iniciar una nueva operación de lectura. No es necesario leer los datos por completo antes de que se cierre un lector o una corriente de entrada. Se puede completar una lectura parcial de los datos. Para los parámetros analizados, el contenedor web lee todos los datos POST y, después, cierra la operación de lectura después de que se analicen todos los parámetros.
La aplicación puede realizar una relectura sin bloques de datos POST. Por ejemplo, la aplicación puede realizar una lectura sin bloques utilizando un escucha de lectura asíncrona (AsyncReadListener), realizando un cierre y, después, realizando una lectura en bloques. La aplicación también puede realizar, por ejemplo, una lectura sin bloques utilizando el escucha de lectura asíncrona, realizando un cierre y, después, realizando una segunda lectura sin bloques utilizando un nuevo escucha de lectura asíncrona.
Cuando la aplicación realiza una lectura posterior de los datos POST utilizando una lectura sin bloques, primero el servidor proporciona los datos que se han leído previamente. Si la lectura anterior que se ha completado no ha leído todos los datos POST que se han enviado en la solicitud, la nueva lectura realiza un bloque cuando la aplicación lee los datos POST restantes.
Acerca de esta tarea
Establezca la propiedad de contenedor web en true. A continuación, ejecute una aplicación web que pueda leer datos POST. Se proporcionan ejemplos.
Procedimiento
Ejemplos
Ejemplo de lectura en bloques
- Obtenga la corriente de entrada utilizando el método getInputStream ().
- Lea los datos.
- Cierre la corriente de entrada.
- Obtenga la nueva corriente de entrada utilizando el método getInputStream ().
- Lea los datos.
- Cierre la corriente de entrada.
- Obtenga un parámetro utilizando el método getParameter ().
- Obtenga el lector utilizando el método getReader ().
- Lea los datos.
- Cierre el lector.
- Vuelva a obtener el parámetro utilizando el método getParameter ().
java.io.InputStream in = request.getInputStream();
byte[] inBytes = new byte[5];
int readLen = in.read(inBytes);
if (readLen > 0){
}
if (close)
in.close();
java.io.InputStream in2 = request.getInputStream();
byte[] inBytes = new byte[2048];
for (int n; (n = in2.read(inBytes, 0, 2048)) != -1;) {
readLen += n;
}
if (close)
in2.close();
String param = request.getParameter("Test");
java.io.BufferedReader rdr = request.getReader();
StringBuffer inBuffer = new StringBuffer();
char[] inChars = new char[1024];
for (int n; (n = rdr.read(inChars,0,1024)) != -1;) {
inBuffer.append(new String(inChars, 0, n));
}
rdr.close();
String param2 = request.getParameter("Test");
Ejemplo de lectura sin bloques
- Obtenga la corriente de entrada utilizando el método getInputStream ().
- Obtenga el escucha de la entrada del servlet utilizando el método setReadListener ().
- Lea los datos en el método onDataAvailable ().
- Cierre la corriente de entrada.
Después de que se cierre la corriente de entrada, el método onAllDataRead () y el método onError () no se llaman para este escucha.
- Obtenga un parámetro utilizando el método getParameter ().
- Obtenga la nueva corriente de entrada utilizando el método getInputStream ().
- Obtenga un nuevo escucha de la corriente de entrada de servlet utilizando el método setReadListener ().
- Lea los datos en el método onDataAvailable ().
- Si se leen todos los datos, se llama al método onAllDataRead () para este escucha.
java.io.InputStream input = request.getInputStream();
RL1 = ((ServletInputStream) input).setReadListener(readListener);
RL1
onDataAvailable(){
if (input.isReady()) {
Len = input.read(inBytes);
}
input.close();
String param = request.getParameter("Test");
java.io.InputStream input = request.getInputStream();
RL2 = ((ServletInputStream) input).setReadListener(readListener);
}
RL1 // onAllDataRead() u onError() no se llamará para RL1, ya que la corriente se ha cerrado para RL1
RL2
onDataAvailable(){
if (input.isReady()) {
Len = input.read(inBytes);
}
}
RL2 // Si se han leído todos los datos
onAllDataRead(){
AsncContext.complete();
}