일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- java annotation
- JavaScript
- xml
- Session
- 자바스크립트
- xml mapping
- Database
- 웹프로그래밍
- Servlet
- JSTL
- Java
- 데이터문서포맷
- java컴파일
- 자바
- 데이터베이스
- 세션
- JSP
- 프로그래밍용어
- 데이터규정
- Ajax
- XML DOM
- 공문서작성규정
- 스프링프레임워크
- Request/Response Header
- 반응형웹
- HTTP
- XML Core
- 카카오APi
- Multipart
- 데이터포맷
- Today
- Total
KyungHwan's etc.
스프링프레임워크 - 디스패처(Dispatcher)가 뷰(View)를 찾는 방법 본문
Spring MVC 기초
스프링의 흐름은 위와 같다.
client가 요청을 한다.
DispatcherServlet 이 요청을 받는다.
DispatcherServlet이 Controller에게 요청을 하고, 응답을 받는다.(ModelAndView를 이용)
ViewResolver와 View(JSP)를 통해 사용자에게 페이지를 띄어준다.
(보통 제작 과정에서 Controller와 View 부분을 많이 건드리게 된다.)
디스패처(Dispatcher)가 뷰(View)를 찾는 방법
servlet-context.xml은 보통 빈 설정 내용들을 적게 된다.
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<resources mapping="/css/**" location="/resources/css/" />
<resources mapping="/js/**" location="/resources/js/" />
<resources mapping="/images/**" location="/resources/images/" />
<resources mapping="/jsp/**" location="/resources/jsp/" />
<!-- 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>
<context:component-scan base-package="com.mvcboard.board"/>
servlet-context.xml파일에 들어가보면, prefix와 suffix가 있다.
prefix와 suffix를 정해주면, 디스패쳐는 알아서 view를 찾을 수 있다.
위의 경우는 /WEB-INF/views/ + 뷰의 이름 + .jsp
즉, /WEB-INF/views/ 디렉토리 안에 있는 뷰의 파일이라는것을 알려주는 것이다.
페이지 화면이 띄어지는 과정
DispatcherServlet은 web.xml에서 설정을 해준다.
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
servlet mapping의 url-pattern을 보면 / 으로 url이 설정되어 있다. 그래서, / 라는 url이 들어오면 디스패쳐가 가로챈다. 그럼 디스패처는 controller를 찾아야하는데, 어느 패키지에서 찾아야 하는지 모른다.
<context:component-scan base-package="com.mvcboard.board"/>
그렇기 때문에, servlet-context.xml의 context:component-scan에 의해서 컨트롤러의 패키지를 알려준다.
그러면 그 안의 파일들을 검색하기 시작한다.
@Controller를 만나면 그 클래스가 Controller라는 것으로 인식한다.
그리고 디스패처는
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
/**
* Simply selects the home view to render by returning its name.
*/
(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
logger.info("Welcome home! The client locale is {}.", locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate );
return "home"; //home.jsp를 찾아 화면에 띄어준다
}
@RequestMapping을 보고, (여기서는 /로 설정되어 있다.)
그 어노테이션이 붙어있는 메소드의 로직을 수행한다.
그리고 return값으로 view의 이름을 알려준다. 여기서는 home 이라고 되어 있으므로,
ViewResolver를 통해 /WEB-INF/views/ + home + .jsp /WEB-INF/views/home.jsp 를 찾아 화면에 띄어준다. 위와 같은 이유로
그래서 주소창에 context명을 쓰고 / 를 붙이면, (여기서는 board/)
위와 같은 페이지가 화면에 띄어진다.
Reference
'Java > 스프링프레임워크' 카테고리의 다른 글
스프링프레임워크 - MVC Redirect 시 URI 에 붙는 파라미터 제거 하기 (0) | 2018.06.21 |
---|---|
스프링프레임워크 - ModelAndView (0) | 2018.06.21 |
스프링프레임워크 - View에서 Parameter 값 받기(@RequestBody, HttpServletRequest request) (0) | 2018.06.21 |
스프링프레임워크(@RequestBody 와 @ResponseBody 및 AJAX & JSON 연동) (0) | 2018.06.12 |
스프링프레임워크 - Spring Framework: annotation 정리 (0) | 2018.06.01 |