2012-02-07 4 views
0

컨트롤러가 2 개 있습니다. 하나는 메인 컨트롤러이고 다른 하나는 중간 컨트롤러입니다. 중간 컨트롤러에서 HTTPRequest에 헤더를 추가해야합니다. 추가 후 주 컨트롤러에 리디렉션해야합니다. 여기에서 내가 추가 한 헤더를 확인해야합니다. 어떻게해야합니까? 사람이 나를 도와 드릴까요? PLS ........하나의 컨트롤러 클래스에서 다른 컨트롤러 클래스로 HTTPRequest를 리디렉션하는 방법은 무엇입니까?

답변

0

앞으로 파견 요청 전달이 다른 리소스에 JSF 컨트롤러 서블릿에 의해 내부적으로 수행

getServletContext().getRequestDispatcher().forward("second page"); 

합니다. 브라우저는 웹 컨테이너에서 서버 측에서 발생한 일을 인식하지 못합니다. 따라서 여전히 원래 요청을 보류하고 주소 표시 줄에 원래 URL을 표시한다고 생각합니다. 그러나 표시된 페이지 내용은 두 번째 페이지에서 가져온 것입니다.

리디렉션 파견이 경우

response.sendRedirect("second page"); 

는 JSF 컨트롤러 서블릿은 다른 URL을 가져 오기 위해 (HTTP 응답 헤더를 통해) 클라이언트 브라우저에 지시합니다. 따라서 브라우저는 완전히 새로운 URL을 가져오고 주소 표시 줄에 두 번째 URL을 표시합니다. 이것은 당신이 리디렉션이 아닌 요청을 전달해야한다고 생각 here

+0

또 다른 예 :. FacesContext.getCurrentInstance()를 .getExternalContext() 리디렉션 ("내 페이지"); – tartak

0

에서 성능이 약간 지연에게

의 원인이 될 수 있습니다.

RequestDispatcher dispatcher= request.getRequestDispatcher("servlet-mapped-url"); 
dispatcher.forward(request, response); 
1

Servlet Filter을 사용하는 것이 좋습니다. 들어오는 요청을 사전 처리하려면 서블릿 필터로이를 수행 한 다음 해당 서블릿에 연결하면됩니다.

자세한 내용은 BalusC Answer을 참조하십시오.

이이 단지 같은 요청을 전달할 수있는 경우가 아니라면 : 여기

 request.getRequestDispatcher("/yourServlet").forward(request, response); // forward to the main servlet 
관련 문제