1: 클라이언트에서 요청을 보냄
2, 3: 요청 (URL)을 어떤 컨트롤러에서 수행할지 판단하기 위해 HandlerMapping 객체에 전달
4, 5: Controller에서 로직을 수행한 뒤 처리된 정보와 정보를 보낼 View의 이름을 전달 받음
6, 7: 전달 받은 View의 이름으로 맵핑된 View가 있는지 검색
8, 9: 해당 View에 처리된 정보를 전달한뒤 보여줄 처리된 결과를 받음
10: 클라이언트에 최종결과 출력
<!-- image, css, js 위치 -->
<resources mapping="/resources/**" location="/resources/" />
<!-- ViewResolver (jsp) 관련 맵핑 -->
<!-- 예) 파일명이 user/login 이면 /WEB-INF/views/user/login.jsp 로 맵핑함 -->
<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>
<!-- 컨트롤러 직접 등록 -->
<beans:bean class="com.example.control.MyController"></beans:bean>
<!-- 컨트롤러를 Annotation 통해 스캔해서 등록하기 위한 코드 -->
<context:component-scan base-package="com.example.control" />
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<!-- DI 관련 annotation 적용 -->
<context:component-scan base-package="com.example.model" />
</beans>
servlet-context.xml, root-context.xml 두 파일 모두 Web.xml 에서 등록할수 있음
WEB-INF 안에 있는 파일 (Server Scope) 는 브라우저에서 직접 요청 불가 (예: http:~~~.jsp)
@Controller
public class MyController {
// 컨트롤러의 메소드 한개는 서블릿의 service 메소드 한개와 동일
@RequestMapping("url") // URL 요청
void m1() {
System.out.println("url 요청 들어옴");
} // 해당 url 없음
@RequestMapping("user/input")
void input() {
System.out.println("입력 페이지 요청");
}
//void 값은 기본적으로 url에 해당하는 jsp 파일을 views 폴더에서 찾음
// prefix값과 suffix 값은 servlet-context.xml 파일의 InternalResourceViewResolver 관련 항목에서 설정 가능
// String 값은 리턴하는 값으로 포워드시킴
@RequestMapping("string")
String stringEx() {
System.out.println("string 페이지 요청");
return "home"; // 포워드
}
// 원한다면 매개변수로 Request, Response 등의 값들을 받아서 사용 가능
@RequestMapping("user/result")
void result(String username, int userage, Model model) { // 매개변수명은 HTML에서 선언된 속성값과 일치
// String username = request.getParameter("username); forward();
// 스프링 프레임워크에서 위와 같은 로직들을 내부적으로 수행해줌
System.out.println("이름: " + username + ", 나이: " + userage);
model.addAttribute("username", username);
model.addAttribute("userage", userage);
}
// 리다이렉트 이동
@RequestMapping("/redirect")
String m2() {
System.out.println("redirect 요청");
return "redirect:/string";
}
}