[Spring]6. spring MVC 시작하기.

- xml 설정파일에 직접 <bean> 태그로 등록 할 수 있지만 spring 3.0 이후부터는 대부분이 @(어노테이션)을 사용하게 된다.


1. 만든 두개의 xml 파일에 다음과 같은 코드를 추가한다.


1
2
3
4
5
6
7
8
<beans>
 
    <context:component-scan base-package="com.controller">
   </context:component-scan>
    <!-- 지정한 패키지에 존재하는 어노테이션을 사용한 클래스를 
          전부 스캔하여 여기에 <bean> 형태로 등록한다 라는 뜻이다. -->
    
</beans>


-base-package= 안에 설정에 해당하는 (서블릿 설정파일이면 컨트롤러를, 리스너의 설정파일이면 모델단에 해당하는) 패키지 명이 들어간다.


2. @(어노테이션)을 이용해 컨트롤러, 서비스 등을 만든다.


- com.controller.HelloController.java
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
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Repository;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
 
import com.service.HelloService;
 
@Controller
public class HelloController {
    
    @Autowired
    HelloService service;
    
    @RequestMapping("/hello.do")
    public String hello(Model model){
        System.out.println("sfefd");
        
        service.exe();
        
        //포워딩 시키고 싶은 데이터는 메소드의 매개변수로 모델을 받으면 된다.
        //모델에 속성을 추가하면 된다.
        //이렇게 만들어진 모델은 리퀘스트의 생명 주기와 같다. 
          //설정을 통해 어플리케이션, 세션으로 바꿀 수 있다.
        //jsp에서 호출을 할 때는 EL을 사용하면 된다.
        model.addAttribute("pw""1234");
        
        return "/WEB-INF/view/hello.jsp";
    }
}



-com.service.HelloService.java
 1
2
3
4
5
6
7
8
9
import org.springframework.stereotype.Service;
 
@Service
public class HelloService {
    public void exe(){
        System.out.println("service 실행");
    }
}
 




@Controller, @Service, @Repository는 @Component의 자식들이다. Component를 스캔하면 전부 스캔 되는 것이다.


@Controller는 이것만 쓰면은 기능을 못한다.

기능을 실행 하는 메소드에 @RequestMapping("/hello.do")라는 매핑 어노테이션이 필요하고,

 리턴으로 데이터를 받거나 보여줄 jsp 파일 위치가 들어가야 한다.


서비스를 호출 해야 한다면 서비스를 맴버 변수로 가지고, 위에 @Autowired 가 붙으면 자동으로 생성자나 setter를 이용한 di를 생성한다.

constructor 나 byType 혹은 byName 으로 생성자나 setter를 설정할 수 있다. 생성자나 setter가 존재 해야 가능하다.
























댓글()