从HttpServletRequest获取原始请求字符串

时间:2009-08-27 16:25:12

标签: java jsf servlets

是否可以从HttpServletRequest对象获取原始HTTP请求?我希望尽可能将原始请求视为字符串。

我需要获取请求的全文,在这种情况下,它是一个POST请求,因此URL无效。它也是多部分表单的一部分,所以我不能只调用“getParameterNames()”或“getParameterValues()”。

谢谢,

5 个答案:

答案 0 :(得分:9)

您可以通过执行以下操作来读取原始HTTP请求:

ServletInputStream in = request.getInputStream();

然后使用InputStream的常规read方法。

希望有所帮助。

答案 1 :(得分:4)

嗯,听起来你正在进行某种故障排除。为什么不在查看原始表单数据时删除多部分表单组件。您可以使用以下JSP代码段来构造表单数据。

<%
Enumeration en = request.getParameterNames();
String str = "";
while(en.hasMoreElements()){
   String paramName = (String)en.nextElement();
   String paramValue = request.getParameter(paramName);
   str = str + "&" + paramName + "=" + URLEncoder.encode(paramValue);
}
if (str.length()>0)
   str = str.substring(1);
%>

答案 2 :(得分:1)

或者如果你可以编写一些拦截器来将参数名称和值转换为字符串格式对象并在请求上下文中设置它,或者过滤器也是一个好主意。

答案 3 :(得分:1)

如果要将整个请求发送到String,可以使用apache IOUtils库通过一行代码完成。

String myString = org.apache.commons.io.IOUtils.toString(request.getInputStream());

答案 4 :(得分:0)

听起来你需要servlet filter。没有标准的方法来处理multipart/form-data,所以在wrapping the HttpServletRequest时你必须​​小心地适当地缓存这些数据。