2012-11-20 5 views
2

글쎄, 난 혼란스러워. 원본지도에 대한 포인터를 반환한다고 생각합니까?포인터가 값을 반환하거나 값을 복사합니까?

private HttpServletRequest originalRequest; 
    Map params = originalRequest.getParameterMap(); 
     params.remove("parameter-to-remove"); 
     params.put("parameter-to-add", "<a value>"); 

이제 원본 작업 요청의 매개 변수가이 작업 후에 변경됩니까? 아니면 그냥 params에 값을 복사합니까 그리고 그들과 내가 할 일이 중요하지 않습니다 및 nothings originalRequest에서 변경 될거야?

+0

디자인 문제입니다. 귀하의 기능 요구 사항은 무엇입니까? 잠긴 매개 변수 맵을 수정 하시겠습니까? – Lion

+0

@Lion 저는 생각하기에 일종의 ServletRequests 필터가 어떻게 작동할까요? 다른 곳에 필요하지 않은 매개 변수를 필터링하려면? 나는 그것을 오해 했습니까? –

답변

1

아니요, 요청 매개 변수를 제거하거나 요청 개체에 추가 할 수 없습니다. 요청 개체가 범위를 벗어날 때까지 (요청 처리주기가 끝난 후에) 서버는 서버에 도착한 상태로 유지되어야합니다.

논리적으로 그런 일을 할 수 있다면 요청 개체는 더 이상 원래 요청을 나타내지 않을 것입니다. 전체 요청 처리주기 동안, 우리는 변조 된 클라이언트가 아닌 클라이언트가 보낸 요청을 처리하려고합니다.

대신 사용해야하는 방법은 void setAttribute(java.lang.String name, java.lang.Object o)입니다.

+0

필자는 원래 요청에서 매개 변수를 필터링하기위한 필터라고 생각했습니다. 나는 이것이 그 때 사용 된 여과기가 그 때이지 않는 경우에 그 (것)들을 이용하는 목적 이었다는 것을 생각했다? –

+0

필터에 대한 내용은 http://stackoverflow.com/tags/servlet-filters/info에서 확인할 수 있습니다. 그들은 요청 헤더, 보안 검사, 로케일 등을 수정하는 것과 같은 다른 목적을 가지고 있습니다. 그럼에도 불구하고, 그들은 또한'Filter' 인터페이스를 구현하는 간단한 자바 클래스입니다. –

4

반품 된지도가 변경 불가능한지도이므로 변경 사항이 반영되지 않는 이유가 될 수 있습니다. getParameterMap javadoc

맵 값과 같은 키 파라미터 값으로서 파라미터 명을 포함하는 불변 java.util.Map로서 당

. 매개 변수 맵의 키는 String 유형입니다. 매개 변수 맵의 값은 String 배열 유형입니다.

일부 값을 요청하려면, setAttribute을 사용해야합니다.

관련 문제