Mapping

XML_Beans Configuration

  • 가상 경로를 생성하여 실제 경로를 대체하여 주소 지정
  • webapp>WEB-INF>spring>appServlet>servlet-context.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans>

	<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
	<resources mapping="/res/**" location="/resources/" />
	<resources mapping="/image/**" location="/WEB-INF/image/" />

	<!-- 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/day1005/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>
	
	<context:component-scan base-package="spring.mvc.start" />
	
</beans:beans>
  • <context:component-scan>태그의 base-package 속성 값에 해당하는 패키지의 Controller를 참조
  • <resources>태그의 location 속성은 실제 경로이며, mapping 속성으로 이를 대체할 가상 경로를 지정 (맨 앞의 ‘/’는 root 경로) …
  • <beans:bean>태그로 Beans에 등록되는 매핑 주소의 기본 정보를 지정 (위의 경우에는 등록 매핑 주소의 앞에는 ‘/WEB-INF/day1005/’를, 뒤에는 ‘.jsp’를 생략하여 입력해야 함) …

Using Annotation

  • Model과 Controller의 클래스와 메서드를 View에서 사용하기 위해서는 xml을 통해 Beans에 등록하여야 함
  • 이 과정을 간소화하기 위해 @(annotation) 사용

Requesting Mapping

@Controller
public class StartController {

	//start.jsp로 가기위한 메서드(포워드)
	
	@GetMapping("/")
	public String start(Model model) {
		
		//Model: request에 데이터를 저장하기위한 인터페이스
		//서블릿에서 하던 request.setAttribute와 같다
		model.addAttribute("name", "김영환");
		model.addAttribute("addr", "서울시 강남구");
		
		return "start"; //WEB-INF/day1005/start.jsp
	}
}
  • Controller 클래스는 @Controller 어노테이션으로 Beans에 등록
  • 매핑은 메서드를 단위로 하고, 각 메서드에 @GetMapping 어노테이션으로 가상 경로 매핑
  • 시작 페이지의 경로는 root 페이지이며, root의 매핑 경로는 ‘/’로 표기
  • … 여기서 ‘start’는 매핑 주소의 기본 정보인 앞뒤 내용을 제외한 것만 작성
  • Model : request에 데이터를 저장하기 위한 인터페이스로, 매핑된 주소로 값을 넘겨줌 (addAttribute() 메서드를 사용하여 데이터 저장 → 데이터는 입력 시 입력한 형식대로 저장, “str”처럼 문자열로 입력하면 문자열, 34처럼 숫자로 입력하면 숫자형)
//StartController로부터 포워딩 된 View
<body>
	<b>이름:${requestScope.name} </b> //requestScope.은 생략 가능
	<b>주소:${addr} </b>
</body>
  • 위의 Controller로 부터 포워딩된 이 코드의 경로는 ‘WEB-INF/day1005/start.jsp’이 되며, 웹 상에서는 가상 경로인 ‘start/’로 표현됨 …
  • Controller에서 request에 저장한 데이터를 표현식(${ })으로 호출해 표현

Forwarding Ex_1

//start/
<body>
	<ul>
		<li><a href="apple/list">apple/list</a></li>
		<li><a href="apple/list.do">apple/list.do</a></li>
		<li><a href="apple/list.kyh">apple/list.kyh</a></li>
		<li><a href="banana/insert">banana/insert</a></li>
		<li><a href="orange/delete">orange/delete</a></li>
	</ul>
</body>
  • 매핑 연습을 위한 링크
@Controller
public class ResultController {

	@GetMapping("/apple/list.do") //list뒤에 .do나 다른 확장자를 붙이든 다호출됨
	public String result1(Model model) {
		
		model.addAttribute("name", "김영환");
		model.addAttribute("nick", "홍박사");
		
		return "result1";
	}
}
  • 매핑 어노테이션의 인자 값으로 이동시킬 가상 경로 지정 (확장자가 없으면 위 링크의 ‘list’, ‘list.do’, ‘list.kyh’ 모두 호출 가능)
  • 이 Controller의 실제 경로는 ‘WEB-INF/day1005/result1.jsp’
//WEB-INF/day1005/result1.jsp
<body>
	<h2>제 이름은 ${name}이며, 별명은 ${nick}입니다</h2>
</body>

Forwarding Ex_2

@Controller
public class ResultController {

	@GetMapping("/banana/insert")
	public ModelAndView banana() {
		
		//ModelAndView는 request에 저장하기 위한 Model과
		//포워드 하기위한 View를 합쳐놓은 클래스입니다
		ModelAndView mv=new ModelAndView();
		
		//request에 저장
		mv.addObject("java", 88);
		mv.addObject("spring", 99);
		
		//포워드할 jsp파일 지정
		mv.setViewName("result2");
		
		return mv;
	}
  • 이번에는 전의 일반 방법과는 다른 방법으로 포워딩 해보겠다
  • ModelAndView : request에 저장하기 위한 Model과 포워드하는 View를 합친 기능 (addObject() 메서드를 사용하여 데이터 저장 → 저장된 데이터는 Object 형식으로 저장됨, 문자열이나 숫자같은 일반 자료형 아님)
  • 일반 방법과 달리 ModelAndView 방식에서는 포워딩할 경로를 setView() 메서드로 지정
//WEB-INF/day1005/result2.jsp
<body>
	<c:set var="tot" value="${java+spring }"></c:set>
	<c:set var="avg" value="${tot/2 }"></c:set>
	<h2>점수 출력 결과</h2>
	<pre>
		자바점수:${java }
		스프링점수:${spring }
		총점:${tot }
		평균:${avg }
	</pre>
</body>

Forwarding Ex_3

<ul>
	<li><a href="shop/detail">resource의 이미지출력</a></li>
	<li><a href="board/insert/data">WEB-INF의 이미지출력</a></li>
</ul>
  • 매핑 연습을 위한 링크2
@Controller
public class ResultController {

	@GetMapping("/shop/detail")
	public String resImage() {
		return "result4";
	}
	
	@GetMapping("/board/insert/data")
	public String webImage() {
		return "result5";
	}
}
  • 파일 업로드를 위한 매핑 연습
//WEB-INF/day1005/result4.jsp
<body>
	<h2>리소스 폴더안의 이미지출력</h2>
	<img src="../res/02.png">
	<img src="../res/image1/01.png">
</body>
  • 파일의 경로를 찾기 위해서는 가상 경로를 알아야 함 (Controller에서 확인 가능)
  • 지정된 매핑 주소가 ‘/shop/detail’이므로 root 폴더인 ‘/’까지 한 단계 회귀 (../)
  • resources 폴더에 있는 ‘02.png’ 파일이며, resources/ 경로를 res/로 대체하였으므로 대체한 가상 경로를 기준으로 경로 확인 …
//WEB-INF/day1005/result5.jsp
<body>
	<img src="../../image/11.png">
	<img src="../../image/shop/12.png">
</body>
  • 지정된 매핑 주소가 ‘/board/insert/data’이므로 root 폴더인 ‘/’까지 두 단계 회귀 (../../)
  • WEB-INF>image 폴더에 있는 ‘11.png’ 파일이며, WEB-INF/image/ 경로를 image/로 대체하였으므로 대체한 가상 경로를 기준으로 경로 확인 …
profile
초보개발자

0개의 댓글