본문 바로가기

프로그래밍/JAVA & SPRING

[LifeSoft] spring 4강 Controller와 View의 연결 방법

반응형

다. Controller와 View의 연결 실습

 

1) controller.MainController.java

src/main/java/com/example/spring01/controller

 

2) views/include/header.jsp

contextPath 사이트 식별자다 하나의 서버에 여러 사이트가 돌아갈 때 식별자 필요,

물론 도메인이 다르게 할 수도 있지만.

 

3) views/include/menu.jsp

 

자바표현: <% String path = request.getContextPath(); %>
Jstl 표현: <c:set var="path" value="${pageContext.request.contextPath}" />

4) views/test/gugu.jsp

@RequestParam int dan

@RequestParam은 붙여주지 않아도 되지만

int dan는 단독변수가 아니라 앞의 페이지에서 넘어오는 값을 저장하는 변수라고 명명해줄 수 있다.

 

 

4) views/test.jsp

http://localhost:8080/spring01/test.do 에서의 urlname test

page test.jsp 에서의 pagename test

url name과 page name이 똑같다면 return type 을 void로 할 수 있다.

 

- view/test/doA

로그메시지에는 시간 / 클래스 / 함수명 / 라인넘버에 대한 정보가 표시된다.

16:27:53.296 [http-nio-8080-exec-51] INFO [MainController.class.doA:45]-
    doA called...

 

- view/test/doB

리턴타입이 void이면 요청파라미터(test/doB)의 마지막이름으로 doB.jsp파일을 찾는다.

 

 @RequestMapping("test/doB")
 public void doB(Model model) {
  logger.info("doB reCalled...");  
 }

 

 

- view/test/doC

객체에 값을 넘기는 방법

먼저 DTO를 만든다.

 

Model은 자료를 담는 그릇이다.

ModelAndView는 그릇과 주소를 가지고 있다.

 

map.put("product", new ProductDTO("books", 23500));
return new ModelAndView("test/doC", "map", map);
${map.product.name}, ${map.product.price}

 

 

map속에 product 변수에 객체를 담았다.

ModelAndView는 값을 하나밖에 못 보낸다.

map에서 꺼낼때는 '맵변수명.객체명.변수'로 호출한다.

 

- view/test/doD

리다이렉트(페이지를 다른 곳으로 보낸다). 데이터는 못 보낸다.

 

return "redirect:/test/doB";

 

그런데 forward는 주소가 바뀌지 않는데 (예 http://localhost:8080/spring01/test/doA)

redirect는 주소가 변경된다.

클릭으로 요청주소(test/doD)를 보내면 다시 요청(/test/doB)을 보낸다.

리다이렉트에 대한 요청처리도 해주어야 한다.

주소는 http://localhost:8080/spring01/test/doB 로 바뀐다.

 

 

- view/test/doF

비동기적 방법(AJAX)으로 처리

리턴타입이 데이터를 호출한 곳으로 보내준다.

클래스(Controller)를 하나 정의하고

javascript를 추가하고

라이브러리가 필요하다. JSon data를 보내기 위해 pom.xml에 추가한다.(jackson-databind)

ajax에서 result는 String 만 읽을 수 있다.

객체데이터(DTO)를 json형식의 String 값으로 바꿔줘야 한다.

 

 

 

 

 

 

JUnit Test

테스트의 용도는 기능을 하나 완성할 때까지 시간이 많이 걸린다.
m-v-c 모두 만들어야 한다.
예) 회원관리 프로젝트를 만들때
Controller Service Model View 다 만들어야 하는데
view가 없는 상태에서도 Controller만으로 테스트가 가능하다는 이점이 있다.