2009-08-27 4 views
14

HttpServletRequest 객체에서 원시 HTTP 요청을 가져올 수 있습니까? 가능하다면 원시 요청을 문자열로보고 싶습니다.HttpServletRequest에서 원시 요청 문자열 가져 오기

요청의 전체 텍스트를 가져와야합니다.이 경우 POST 요청이므로 URL이 도움이되지 않습니다. 또한 멀티 파트 폼의 일부이기 때문에 "getParameterNames()"또는 "getParameterValues ​​()"를 호출 할 수 없습니다.

당신이 servlet filter이 필요한 것처럼

+0

당신은 내가 정의 JSF 구성 요소가 URL을 –

+0

이외의 요청에 대해 알고 싶은 일이 무엇입니까. 내부에 "decode()"메소드가 있는데 어떤 요소가 선택되었는지 알아야합니다. 다중 파트가 아닌 다른 폼에서는 "getParameterValues ​​('myparam')"을 호출 할 수 있으며 값 (항목 선택 목록)을 가져올 수 있지만이 메서드는 아무 것도 반환하지 않는 다중 파트 폼을 사용할 수 있습니다 . 따라서 수동으로 원시 데이터를 구문 분석하여 선택한 항목을 가져와야합니다. 서블릿 필터는 내 자체 구성 요소에만 영향을주기 때문에 사용할 수 없습니다. –

+1

내가 필요한 매개 변수를 얻는 다른 방법을 찾았습니다. FacesContext.getExternalContext.getParameterValuesMap()을 사용하면 폼 유형에 관계없이 필요한 정보를 얻을 수 있습니다. 모두에게 감사합니다 –

답변

0

는 소리, 감사합니다. multipart/form-data을 처리 할 표준 방법이 없으므로 wrapping the HttpServletRequest 일 때이 데이터를 적절히 캐시해야합니다.

+3

참고 :이 대답은 더 이상 정확하지 않습니다. Servlet 3.0 (JEE6)은'multipart/form-data'에 대한 지원을 소개했습니다. http://download.oracle.com/javaee/6/api/javax/servlet/annotation/MultipartConfig.html – McDowell

1

또는 매개 변수 이름과 값을 문자열 형식 개체로 변환하고 요청 컨텍스트로 설정하는 인터셉터를 작성하거나 필터를 사용하는 것이 좋습니다.

4

글쎄, 어떤 문제 해결을하고있는 것 같습니다. 원시 양식 데이터를 보는 동안 여러 부분으로 된 양식 구성 요소를 드롭하지 않는 것이 좋습니다. 다음 JSP 스 니펫을 사용하여 양식 데이터를 구성 할 수 있습니다.

ServletInputStream in = request.getInputStream(); 

를 다음의 InputStream의 정규 read 방법을 사용하십시오

<% 
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); 
%> 
8

당신은 수행하여 원시 HTTP 요청을 읽을 수 있습니다.

희망이 있습니다.

1

문자열에 대한 전체 요청을 얻으려면 apache IOUtils 라이브러리를 사용하여 한 줄의 코드로 처리 할 수 ​​있습니다.

String myString = org.apache.commons.io.IOUtils.toString(request.getInputStream()); 
관련 문제