2010-12-10 3 views
3

사용자가 특정 지역의 레스토랑을 검색 할 때 '레스토랑'링크를 클릭하는 시나리오가 있습니다. 위치가 설정되어 있는지 확인해야합니다. 설정되지 않은 경우 위치를 설정할 수있는 페이지로 리디렉션 한 다음 설정된 위치로 필터링 된 검색 결과로 돌아갑니다. response.sendRedirect(url)을 사용하여 사용자를 설정 위치 페이지로 리디렉션했습니다. 하지만 리디렉션 뒤로 URL (위치를 설정 한 후 사용자에게 보낼 URL)을 보내려면 어떻게해야합니까? HTTP 응답을 사용하여 사용자를 리디렉션하는 방법

나는이 시도 :

response.sendRedirect("/location/set.html?action=asklocation&redirectUrl="+ 
      request.getRequestUri()+request.getQueryString()); 

을하지만이 작동하지 않으며 404 오류가 표시됩니다; 또한 브라우저에 형성된 URL이 좋지 않습니다.

사람이 문제를 해결할 수 있다면 당신은 적어도 누락있는 것처럼, ...

+0

오류 404 FileNotFound, http : // /location /set.html이 있는지 확인해야합니다. 언급 된 URL을 실행하면 어떻게됩니까? – Koekiebox

+0

처음 시도하지 말 것/ – mauretto

답변

7

이 보이는하십시오 "?" request.getRequestUri()request.getQueryString() 사이 java.net.URLEncoder을 사용할 수있는 매개 변수도 url-encode해야합니다.

또한 리디렉션을 수행 할 때는 컨텍스트 경로 앞에 request.getContextPath()을 추가해야합니다. 개인적

String secondRedirectUrl = request.getRequestUri()+"?"+request.getQueryString(); 
String encodedSecondRedirectUrl = URLEncoder.encode(secondRedirectUrl, serverUrlEncodingPreferablyUTF8); 
String firstRedirectUrl = request.getContextPath()+"/location/set.html?action=asklocation&redirectUrl="+encodedSecondRedirectUrl; 
response.sendRedirect(firstRedirectUrl); 

뭔가 차라리 세션에서 RequestDispatcher를 저장하고 위치 설정 한 이후에 전달하여 문제를 해결하는 것이다. 그래도 문제가 해결되지 않으면

response.sendRedirect("location/set.html?action=asklocation&redirectUrl="+ 
      request.getRequestUri()+request.getQueryString()); 

당신의 URL 문자열의 시작 부분에 request.getContextPath()을 추가

+0

왜 그가 추가로'? '를 필요로 하는가? OP는 그의 상대 URL에 포함시켰다. –

+0

'redirectUrl' 매개 변수의 값은 OP가 설정 한 후 OP로 리다이렉트하려고하는 쿼리 문자열을 가진 경로이다. 위치는'/ location/set.html'에 있습니다. 그는 쿼리 문자열에서 경로를 분리해야합니다. 그렇지 않으면 현재 페이지가'/ foo/bar? problem = lol'이면 그는'/ foo/barproblem = lol'에서 끝나고 404. –

+0

URL'location/set.html? action = asklocation & redirectUrl =' 이미'?'를 포함하고 있는데,'&'라고 말하려고합니까? –

1

내 첫 반응은 (코드에), 당신의 URL에이 효과의 무언가를 /을 제거하는 것입니다 그래서 같은 :

response.sendRedirect(request.getContextPath() + "/location/set.html?action=asklocation&redirectUrl="+request.getRequestUri()+request.getQueryString()); 

Javadoc 상태 :

하는 경우 위치는 상대방이 없으면 이며 '/'는 컨테이너가 현재 요청에 상대적인 을 해석합니다. URI입니다. 위치가 인 상대 경로 인 경우 컨테이너는 선두 문자 '/'를 컨테이너 루트와 비교하여 으로 해석합니다.

+0

op는 경로가 현재 요청 URI와 관련이 있다고 명시하지 않습니까? –

+0

@Christoffer Hammarström, 아니요.하지만 그는 404를 얻으므로 서블릿 컨테이너가 전체 URL에 매핑하지 못합니다. –

+0

나는 이것이 매개 변수에 제공된 경로로 리디렉션하려고 할 때 404라는 것을 이해했습니다. 또한 404는 컨텍스트 경로가 누락되어있을 수 있습니다. –

관련 문제