JSP 에서 페이지 이동 response. sendRedirect () 와 request. getRequestDispatcher () 의 차이

자바 웹 개발 에서 MVC 모드 를 사용 할 때 컨트롤 러 가 모델 을 호출 한 후에 인터페이스 가 사용자 에 게 응답 하 는 것 을 선택 합 니 다. 항상 2 가지 방식 으로 1. response 대상 의 sendRedirect 방법 으로 방향 을 바 꿉 니 다.
response.sendRedirect("login.jsp");

2, RequestDispatcher 대상 을 통한 forward 방법:
<!--    -->
RequestDispatcher rd = request.getRequestDispatcher("login.jsp");
rd.forward(request,response);

3. jsp 동작 명령 을 사용 하 는 방법: 제2 의 방식 과 같다.
<jsp:forward page="login.jsp"></jsp:forward>

이제 두 사람의 차 이 를 살 펴 보 자. 1) 과정 이 다르다. response. sendRedirect ("login. jsp") 방식 은 브 라 우 저가 응답 을 받 은 후에 서버 에 한 번 더 요청 한 것 과 같 기 때문에 두 번 의 요청 에 해당 한다.request. getRequestDispatcher ("login. jsp") 방식 은 방법 호출 에 해당 합 니 다. 현재 파일 을 실행 하 는 과정 에서 대상 파일 로 전환 합 니 다. 두 파일 (현재 파일 과 대상 파일) 은 같은 요청 에 속 합 니 다.2) 주소 표시 줄 이 다 릅 니 다: response. sendRedirect ("login. jsp") 방식 에서 사용자 가 브 라 우 저 주소 표시 줄 에서 본 것 은 대상 파일 의 주소 입 니 다. 즉, 주소 표시 줄 이 변 합 니 다. request. getRequestDispatcher () 방식 에서 사용자 가 브 라 우 저 주소 표시 줄 에서 본 것 은 현재 문서 의 주소 입 니 다. 즉, 주소 표시 줄 이 변 하지 않 습 니 다.
3) 데이터 공유 각도: request. getRequestDispatcher () 는 전송 을 요청 하고 앞 뒤 페이지 에 request 를 공유 합 니 다.response. sendRedirect () 는 다시 방향 을 정 합 니 다. 앞 뒤 페이지 는 request 가 아 닙 니 다.sendRedirect 두 번 제출, forword 한 번 제출
다른 웹 프로젝트 의 한 주소 로 요청 을 옮 길 필요 가 있다 면 아래 방법 을 누 를 수 있 습 니 다.
1.       Web App ServletConext  (currentServletContext.getContext(uripath)). 
2.   ServletContext.getRequestDispatcher(String url)  。 
eg:
ServletContext.getRequestDispatcher("smserror.jsp").forward(request,response);

4), 매개 변수 전달 에 있어 response. sendRedirect (url) 는 지정 한 URL 주소 로 이동 하여 새로운 request 를 생 성 합 니 다. 따라서 매개 변 수 는 url 뒤에 매개 변 수 를 추가 해 야 합 니 다. 예 를 들 어 url? id = 1. request. getRequestDispatcher (url). forward (request, response) 는 요청 을 지정 한 URL 로 직접 전송 하기 때문에 이 요청 은 이전 요청 한 데 이 터 를 직접 얻 을 수 있 습 니 다.데 이 터 는 request. setAttribute () 방법 으로 request 에 밀봉 할 수 있 습 니 다.요청 퍼 가기 로 요청 대상 이 항상 존재 하 며 다시 만 들 지 않 는 다 는 것 이다.sendRedirect () 는 request 대상 을 새로 만 들 기 때문에 이전 request 의 데 이 터 를 잃 어 버 립 니 다.
5) 기능 상: response. sendRedirect () 방법 은 현재 프로그램의 다른 자원 으로 방향 을 정할 수 있 고 같은 사이트 의 다른 프로그램의 자원 으로 방향 을 바 꿀 수 있 으 며 심지어 절대 URL 을 사용 하여 다른 사이트 의 자원 으로 방향 을 바 꿀 수 있 습 니 다.
response.sendRedirect(“http://www.baidu.com”)

request. getRequestDispatcher ("login. jsp") 방법 은 같은 웹 프로그램 에 있 는 자원 사이 에서 만 요청 을 전달 할 수 있 습 니 다.
response.sendRedirect(“login.jsp”);request. getRequestDispatcher ("login. jsp");요청 과정 은 다음 과 같 습 니 다. redirect 는 먼저 response 를 브 라 우 저 에 보 낸 다음 브 라 우 저 에서 이 response 를 받 은 후에 requeset 를 서버 에 보 낸 다음 서버 에서 새로운 response 를 브 라 우 저 에 보 냅 니 다. 이 때 페이지 에서 받 은 request 는 브 라 우 저 에서 새로 보 낸 것 입 니 다.
forward 는 서버 내부 에서 발생 하여 브 라 우 저가 전혀 모 르 는 상태 에서 브 라 우 저의 다른 페이지 의 response 를 보 냈 습 니 다. 이 때 페이지 에서 받 은 request 는 브 라 우 저 에서 직접 보 낸 것 이 아니 라 request. setAttribute 로 request 에 데 이 터 를 넣 었 을 수도 있 습 니 다. 이동 하 는 페이지 에 서 는 request. getAttribute 로 데 이 터 를 직접 얻 을 수 있 습 니 다.

좋은 웹페이지 즐겨찾기