개요
이 기사는 봄에 리디렉션을 구현하고 각 전략의 이유를 논의하는 데 중점을 둘 것입니다.
왜 리디렉션인가?
먼저 스프링 응용 프로그램에서 리디렉션을 수행 해야하는 이유를 고려해 봅시다.
물론 가능한 많은 사례와 이유가 있습니다. 간단한 것은 문제의 이중 제출과 관련하여 양식 데이터를 게시하거나 다른 컨트롤러 방법으로 실행 흐름을 위임 할 수 있습니다.
주목해야 할 것은 일반적인 게시물/리디렉션/get 패턴이 듀얼 커밋 문제를 적절히 해결하지 못한다는 것입니다. 초기 커밋이 완료되기 전에 페이지를 새로 고치는 문제는 여전히 듀얼 커밋을 초래할 수 있습니다.
redirectView를 사용하여 리디렉션합니다
이 간단한 방법부터 시작하겠습니다. 즉시 예를 들어 봅시다.
redirectView 뒤에는 httpservletresponse.sendRedirect ()를 발사합니다. 실제 리디렉션이 수행됩니다.
여기에서 리디렉션 된 속성을 방법에 주입하는 방법에 주목하십시오. 프레임 워크는 무거운 작업 의이 부분을 수행하여 이러한 속성과 상호 작용할 수 있습니다.
모델 RedirectAttributes에 속성을 추가합니다. 이 모델에는 객체가 포함되어 있습니다. 일반적으로 문자열로 변환 할 수있는 문자열 또는 객체.
이제 리디렉션 함수를 테스트하겠습니다. 간단한 컬 명령을 사용하여 도움을 주겠습니다.
결과는 다음과 같습니다.
리디렉션을 사용하여 리디렉션 : 접두사
이전 방법은 redirectView를 사용합니다. 왜냐하면 어떤 이유로는 최적이 아니기 때문입니다.
먼저, 우리는 코드에서 직접 redirectView를 사용하기 때문에 이제 Spring API에 결합됩니다.
둘째, 처음부터 컨트롤러 작동을 구현할 때 결과가 항상 리디렉션 될 것이라는 것을 알아야하지만 항상 그런 것은 아닙니다.
더 나은 옵션은 리디렉션을 사용하는 것입니다. 접두사 - 리디렉션보기 이름은 다른 논리적보기 이름과 같이 컨트롤러에 주입됩니다. 컨트롤러는 리디렉션이 발생하고 있음을 알지 못합니다.
다음과 같이 보입니다.
보기 이름이 리디렉션으로 반환되면 : URLBASEDVIEWRESOLVER 클래스 (및 모든 서브 클래스)는 리디렉션 해야하는 특수 표시로 인식됩니다. 나머지보기 이름은 리디렉션 URL로 취급됩니다.
여기에 주목할 곳이 있습니다 - 리디렉션 :/redirecedurl 논리보기를 사용하면 현재 서블릿 컨텍스트와 관련된 리디렉션을 수행합니다.
절대 URL로 리디렉션 해야하는 경우 다음과 같은 이름을 사용할 수 있습니다 : http : // localhost : 8080/spring-redirect/redirectedUrl.
이제 컬 명령을 실행할 때 다음과 같습니다.
우리는 즉시 리디렉션을받을 것입니다.
전방 접두사로 전달
이제 약간 다른 일을하는 방법을 살펴 보겠습니다.
코드를 살펴보기 전에 전달 및 리디렉션의 의미에 대한 빠르고 높은 수준의 요약을 살펴 보겠습니다.
리디렉션은 302 응답 코드 및 위치 헤더가 포함 된 새 URL로 응답합니다. 그런 다음 브라우저/클라이언트는 서버 측에서 새 URL에 다시 전달됩니다. 서블릿 컨테이너는 동일한 요청을 대상 URL로 전달합니다. 브라우저의 URL을 변경할 필요가 없습니다.
이제 코드를 살펴 보겠습니다.
리디렉션과 마찬가지로 : 전방 : 접두사는 urlbasedviewresolver와 하위 클래스에 의해 구문 분석됩니다. 내부적으로 새로운보기에 대한 requestDispatcher.forward () 작업을 수행하는 내부적으로 소송을 만듭니다.
Curl로 명령을 실행할 때 :
HTTP 405 (허용되지 않음)를 얻을 수 있습니다.
이 경우 리디렉션 솔루션에있는 두 개의 요청과 비교하여 브라우저/클라이언트에서 서버 측로 전송 된 요청이 하나뿐입니다. 물론 리디렉션에 의해 추가 된 특성은 필요하지 않습니다.
redirectattributes를 포함하는 특성
다음 - 리디렉션에서 속성을 전달하는 방법을 살펴 보겠습니다. 프레임 워크에서 리디렉션 변형을 활용하십시오.
앞에서 언급했듯이 속성 객체를 메소드에 직접 삽입하여 메커니즘을 매우 쉽게 사용할 수 있습니다.
또한 플래시 속성을 추가합니다. 이것은 URL에 추가되지 않는 속성입니다. 우리는이 속성을 달성 할 수 있습니다 - 나중에 리디렉션 된 최종 대상 방법에서 @ModelAttribute ( "FlashAttribute")를 사용하여 플래시 속성에 액세스 할 수 있습니다.
따라서 기능을 테스트하기 위해 CURL을 사용해야하는 경우 성공적으로 완료하십시오.
우리는 새로운 위치로 리디렉션됩니다.
이러한 방식으로 ModelMap 대신 redirectattribures를 사용하면 리디렉션 작업과 관련된 두 가지 방법간에 만 일부 속성을 공유 할 수 있습니다.
접두사가없는 다른 구성
이제 접두사없이 다른 구성 - 리디렉션을 탐색합시다.
이를 달성하려면 org.springframework.web.servlet.view.xmlviewresolver를 사용해야합니다.
org.springframework.web.servlet.view.internalresourceviewresolver 대신 이전 구성에 사용했습니다.
또한 구성에서 REDIRECTVIEW BEAN을 정의해야합니다.
이제 우리는 ID를 통해이 새 콩을 참조하여 리디렉션을 트리거 할 수 있습니다.
테스트하기 위해 Curl 명령을 다시 사용합니다.
결과는 다음과 같습니다.
HTTP 후 요청 요청을 리디렉션합니다
은행 지불과 같은 사용 사례의 경우 HTTP 사후 요청을 방향을 바꿔야 할 수도 있습니다. 반환 된 HTTP 상태 코드에 따라 게시물 요청을 HTTP get 또는 post로 리디렉션 할 수 있습니다.
HTTP 1.1 프로토콜 참조에 따르면, 상태 코드 301 (영구적으로 제거) 및 302 (찾은)는 요청 메소드가 게시물에서 get으로 변경 될 수 있습니다. 이 사양은 또한 요청 메소드를 POST에서 GET으로 변경할 수없는 관련 307 (임시 리디렉션) 및 308 (영구 리디렉션) 상태 코드를 정의합니다.
이제 게시물 요청을 다른 게시물 요청으로 리디렉션하기위한 코드를 살펴 보겠습니다.
이제 CURL 명령을 사용하여 리디렉션 된 게시물을 테스트합시다.
우리는 대상 주소로 리디렉션되고 있습니다.
결론적으로
이 기사는 봄에 리디렉션을 구현하는 세 가지 방법, 이러한 리디렉션을 수행 할 때 속성을 처리/전달하는 방법 및 HTTP 게시물 요청의 리디렉션을 처리하는 방법을 소개합니다.
위의 것은 편집자가 소개 한 vSpring 리디렉션 (리디렉션) 가이드 및 관련 전략 문제입니다. 나는 그것이 당신에게 도움이되기를 바랍니다. 궁금한 점이 있으면 메시지를 남겨 주시면 편집자가 제 시간에 답장을 드리겠습니다. Wulin.com 웹 사이트를 지원해 주셔서 대단히 감사합니다!