Spring MVC 정리

TPark·2020년 5월 19일
0

백엔드

목록 보기
8/8

Spring MVC 구성요소

  • DispatcherServlet
    • 총괄
    • 클라이언트로부터 받은 요청을 뿌려주는 역할
    • 다른 MVC Components들의 맵핑 정보를 가지고 있다
  • HandlerMapping
    • 웹으로부터 받은 요청을 어떤 컨트롤러가 수행할지 맵핑해준다
  • Controller
    • 요청 분석 (if ~~)
    • 사용자 입력 데이터 가져오기 (req.getParameter()...)
    • 모델 (dao) 호출 (dao.insert()...)
    • 데이터 영역 저장 (req.setAtrribute()...)
    • 페이지 (jsp) 설정
  • VeiwResolver
    • 컨트롤러부터 받은 정보를 어떤 View에게 넘겨줄지 도와주는 객체
  • View
    • Spring에선 주로 jsp를 말함

Spring MVC workflow

1: 클라이언트에서 요청을 보냄
2, 3: 요청 (URL)을 어떤 컨트롤러에서 수행할지 판단하기 위해 HandlerMapping 객체에 전달
4, 5: Controller에서 로직을 수행한 뒤 처리된 정보와 정보를 보낼 View의 이름을 전달 받음
6, 7: 전달 받은 View의 이름으로 맵핑된 View가 있는지 검색
8, 9: 해당 View에 처리된 정보를 전달한뒤 보여줄 처리된 결과를 받음
10: 클라이언트에 최종결과 출력

servlet-context.xml

  • DispatcherServlet (컨트롤러, 뷰) 관련 저장소
	<!-- 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" />
   

root-context.xml

  • = applicationContext.xml)
  • Model (주로 DB) 관련 저장소
<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)

Spring 컨트롤러 예제

@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";
	}
}

0개의 댓글