InternalResourceViewResolver
- ViewResolver의 디폴트 클래스
BeanNameViewResolver
- 경로다각화
- 결과페이지가 없는 File Download, Ajax
prefix(접두어) /suffix(접미어)
prefix - Controller가 리턴한 뷰 이름 앞에 붙을 접두어
suffix - Controller가 리턴한 뷰 이름 뒤에 붙을 확장자
그냥 jsp경로 앞뒤에 붙는거구나라고 생각했는데 찾아보고는 공부가 필요하다고 느꼈다.
ViewResolver
- 컨트롤러가 지정한 뷰 이름으로 View객체를 구한다.
- View객체에는 컨텐트타입(text/html)을 리턴하는 getContentType() 메서드와 파라미터로 모델과 요청/응답 객체를 갖는 render()메서드가 있다.
Content-Type
https://dev-gorany.tistory.com/125
서버와 클라이언트가 어떤 자원(파일,문서,데이터 등)을 주고받을 때 웹서버는 HTTP헤더로 파일이나 자원을 포함하는 바이트의 Stream을 앞에 보낸다.
Content-Type개체 헤더는 리소스의 Media Type을 나타내기 위해 사용된다. (Media Type = MIME Type)
과거에는 MIME(Multipurpose Internet Mail Extension)으로 불렸지만 요즘은 Media Type이라고 함
getContentType()
https://sjs0270.tistory.com/19
클라이언트 정보 및 서버 정보 읽기
- request 기본 객체는 웹 브라우저, 즉 클라이언트가 전송한 정보 및 서버 정보를 구할 수 있는 메서드를 제공하고 있다.
- 방법 : <%=request.메소드%>
- getContentType()
: 클라이언트가 요청 정보를 전송할 때 사용한 컨텐트의 타입을 구한다. (return type : String)
- ViewResolver구현 클래스 (검색어 : Spring MVC 뷰 리졸빙)
1) InternalResourceViewResolver
: 뷰 이름으로 JSP나 Tiles연동을 위한 View객체를 리턴
2) BeanNameViewResolver
: 뷰 이름과 동일한 이름의 빈 객체를 View객체로 사용한다.
InternalResourceViewResolver
- JSP, HTML과 같은 웹 어플리케이션의 내부 자원을 이용해서 응답 결과를 생성한다.
JSTL이 존재할 경우 하위 타입은 JstlView객체를 리턴한다.
/WEB-INF 하위에 JSP파일을 위치시키는 이유는 클라이언트가 직접 접근하는 것을 막기 위해서다.
웹 컨테이너가 /WEB-INF 하위 경로에 접근하는 것을 제한한다.
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/" />
<property name="suffix" value=".jsp" />
</bean>
BeanNameViewResolver
- 뷰 이름과 동일한 이름을 갖는 빈 객체를 뷰로 이용한다.
주로 파일 다운로드 기능을 위한 커스컴 View클래스로 사용된다.
@Controller
public class downloadClass{
public ModelAndView download(MultipartHttpServletRequest request, HttpServletResponse response){
File downloadFile = request.getFile("file");
return new ModelAndView("download", "downloadFile", downloadFile);
}
}
--------------------------------------------------------------------------------------------
<bean id = "viewResolver" class = "org.springframework.web.servlet.view.BeanNameViewResolver"/>
<bean id = "download" class = "my.com.download.DownloadView"/>
다수의 ViewResolver설정하기
- 하나의 DispatcherServlet에서 2개이상의 ViewResolver를 가질 수 있다.
- order 값이 작은 순서대로 ViewResolver에게 뷰이름에 해당하는 View객체를 요청한다.
우선순위가 높은 ViewResolver가 null을 리턴하면 그 다음 순위에게 요청한다.
IntervalResourceViewResolver는 null리턴하지 않으므로 가장 낮은 순위를 지정해야 한다.
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="0"/>
<bean id="viewResolver"
class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/view/" p:suffix=".jsp" p:order="0"/>
https://javacan.tistory.com/tag/VelocityViewResolver
SimpleUrlHandlerMapping에서 사용되는 규칙
- ? - 한 글자에 매칭된다.
- * - 0 개 이상의 글자에 매칭된다.
- ** - 0개 이상의 디렉토리에 매칭된다.
더보기
- com/t?st.jsp - com/test.jsp, com/tast.jsp 또는 com/txst.jsp 등에 매칭된다.
- com/*.jsp - com 디렉토리에 있는 모든 .jsp에 매칭된다.
- com/**/test.jsp - com 경로 아래에 위치한 모든 test.jsp와 매칭된다.
- org/springframework/**/*.jsp - org/springframework 경로 아래에 위치한 모든 jsp와 매칭된다.
BeanNameUrlHandlerMapping , SimpleUrlHandlerMapping 구현체의 공통 프로퍼티
- interceptors - 사용할 인터셉터의 목록
- defaultHandler - 매칭되는 핸들러를 찾지 못할 때 사용할 기본 핸들러
- order - 하나의 서블릿 콘텍스트에서 다수의 HandlerMapping을 사용할 수 있는데, 이 경우 HandlerMapping 간의 우선순위를 지정한다
[참조]
https://windorsky.tistory.com/entry/spring-prefix-suffix-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0
https://milkye.tistory.com/267
https://j2yes.tistory.com/entry/viewresolver-prefix-suffix-%EB%93%B1%EB%A1%9D
https://icefree.tistory.com/entry/Spring-BeanNameViewResolver
https://velog.io/@ednadev/%EC%8A%A4%ED%94%84%EB%A7%81-6-ViewResolver
https://midas123.tistory.com/201
https://javacan.tistory.com/tag/VelocityViewResolver
'차근차근 > Spring' 카테고리의 다른 글
2.용어정리(6)-SPA (0) | 2021.12.09 |
---|---|
2.용어정리(5)-싱글톤패턴 (0) | 2021.12.09 |
2.용어정리(3)-AOP (0) | 2021.12.08 |
2.용어정리(1)-Model1,Model2,SpringMVC,POJO (0) | 2021.12.08 |
1.스프링의 구조 (0) | 2021.12.08 |