Hacer URL de solicitud de Servlet y retener la información de cabecera
-
09-09-2019 - |
Pregunta
Necesito hacer una solicitud de un servlet, pero también tengo que retener toda la información de la cabecera. Es decir en el objeto solicitud.
Por ejemplo, si hago algo como lo siguiente a partir del método doGet, hay una manera fácil de simplemente pasar esa información al objeto URL de conexión?
URL url = new URL();
URLConnection uc = url.openConnection();
uc.setDoOutput(true);
uc.setDoInput(true);
uc.setUseCaches(false);
uc.setRequestProperty("Content-type",
"application/x-www-form-urlencoded");
DataOutputStream dos = new DataOutputStream(uc.getOutputStream());
dos.writeBytes(strInEnc);
dos.flush();
dos.close();
InputStreamReader in = new InputStreamReader(uc.getInputStream());
int chr = in.read();
while (chr != -1) {
taResults.append(String.valueOf((char) chr));
chr = in.read();
Solución
Utilice la método addRequestProperty
de URLConnection
.
Enumeration<?> names = req.getHeaderNames();
while (names.hasMoreElements()) {
String key = (String) names.nextElement();
Enumeration<?> values = req.getHeaders(key);
while (values.hasMoreElements()) {
uc.addRequestProperty(key, (String) values.nextElement());
}
}
Vas a tener un conjunto similar de bucles si se utiliza HttpClient, a menos que se ha incorporado en el apoyo a paso a través de un ServletRequest
. (Y si no es así, ¿por qué molestarse con un enorme conjunto de dependencias adicionales, y la API no estándar?)
Otros consejos
Puede enumerar todas las cabeceras con el método () request.getHeaderNames. Sin embargo, se recomienda utilizar el HttpClient en lugar de URLConnection para realizar la solicitud.