:redirect 리턴방식 비교
ModelAndView | ViewResolver |
ModelAndView.setViewName()에서 redirect:가 붙지 않으면 무조건 InternalResourceViewResolver가 설정한 prefix와 suffix 정보가 적용된 .jsp 파일을 찾고, redirect:가 붙으면 InternalResourceViewResolver 설정 정보는 무시되고 Context path 위치에서 .jsp 파일을 찾는다 |
Redirect vs Forward
http://jonggs.blogspot.com/2018/11/spring-redirect-forward.html
[Spring] Redirect와 Forward의 차이에 대해
들어가며 예전에 Spring Project를 진행하면서 redirect와 forward차이점에 대해 궁금하였지만 지금에 와서야 차이점을 알게 되었고 정리하기 위해 작성합니다. Redirect란? Client가 Server에 Re...
jonggs.blogspot.com
ModelAndView | ViewResolver |
Model과 View를 한번에 담을 수 있는 객체 메소드를 String이 아닌 ModelAndView로 만들고, 그 객체에 addObject를 이용하여 데이터를 담을 수 있음 Controller 처리 결과 후 응답할 View와 View에 전달할 값을 저장 : 렌더링하고자 하는 View의 논리적 이름과 해당 View에서 사용할 Model을 함께 설정 |
✔ 실행할 view를 찾는 일을 한다 ✔ 페이지 컨트롤러가 리턴한 뷰 이름에 해당하는 뷰 컴포넌트를 찾는 역할 |
ModelAndView
: Controller 처리 결과 후 응답할 View와 View에 전달할 값을 저장
생성자
- ModelAndView(String viewName) : 응답할 View 설정
- ModelAndView(String viewName, Map values) : 응답할 view와 view로 전달할 값들을 저장한 Map 객체
@RequestMapping("/response-view-v1")
public ModelAndView responseViewV1() {
ModelAndView modelAndView = new ModelAndView("response/hello").addObject("data", "test");
return modelAndView;
}
ModelAndView 주요 메소드
- setViewName(String View)
- addObject(String Name, Object value)
- requestScope에 설정됨
- addAllObject(Map values) : view에 전달할 값을 Map에 name-value로 저장하여 한번에 설정
Redirect 방식 전송
- View이름에 redirect : 접두어 붙이기
ex) mv.setViewName("redirect:/welcome.html");
ViewResolver
Controller가 넘긴 View이름을 통해 알맞은 View를 찾는 역할
- Controller는 ModelAndView 객체에 응답할
context에 선언 해주어야함
ViewResolver 종류
✔ ResourceBundleViewResolver
properties에서 뷰 이름에 해당하는 컴포넌트의 URL을 찾는다
✔ InternalResourceViewResolver
미리 지정된 접두사, 접미사를 사용하여 뷰 이름으로 컴포넌트의 URL을 완성해 URL 지정하기편리
교체 방법은 XML 에서 설정하는 방법과 Java Config로 설정하는 방법
실행과정
1. 페이지 컨트롤러는 클라이언트가 요청한 작업을 실행한 후 그 결과를 출력할 뷰의 이름 리턴
2. 프론트 컨트롤러는 RequestHandler가 리턴한 URL을 ViewResolver에게 전달
3. ViewResolver는 자신의 정책에 맞춰서 뷰 URL 준비
4. InternalResourceViewResolver의 경우 RequestHandler가 리턴한 URL 앞, 뒤에 접두사와 접미사를 붙여 JSP를 찾음
5. 프론트 컨트롤러는 ViewResolver가 준비한 URL을 가지고 View 객체를 통해 해당 URL의 자원을 실행
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
@RequestMapping("/response-view-v2")
public String responseViewV2(Model model) {
return "response/hello";
}
redirect관련 참고
https://developer-joe.tistory.com/222
ModelAndView의 setViewName() 메소드에 redirect: 사용하는 법
ModelAndView의 setViewName() 메소드에 redirect: 사용하는 법 ModelAndview는 Model 정보(DB로 부터 획득한 데이터 정보)와 View 정보(이동할 페이지의 .jsp 파일 정보)를 같이 담아서 넘기는 클래스인데 ViewResolver
developer-joe.tistory.com
'Java' 카테고리의 다른 글
[오류] Implicit super constructor Object() is undefined for default constructor. Must define an explicit constructor (0) | 2023.01.15 |
---|---|
[Android/Java] java security 관련 오류 정리 (0) | 2023.01.06 |
[JAVA] Servlet vs JSP 의 개념/특징/차이점 (0) | 2022.07.28 |
MyBatis vs JDBC 의 개념/특징/차이점 (0) | 2022.07.28 |
[JAVA] 인터페이스 구현 (0) | 2022.07.27 |
댓글