[Spring] 컴포넌트 스캔(component-scan)
component-scan 설정
bean 으로 등록될 준비를 마친 클래스를 스캔하여 bean으로 등록
component-scan 설정
servlet-context.xml 에서 Namespaces 탭 - mvc 체크 → context:component-scan 태그 사용 가능
base-package 속성으로 스캔할 범위를 지정
<context:component-scan base-package="패키지명" />
component-scan 활용
아래 두가지 조건을 만족하면 객체를 컴포넌트 스캔 처리 가능
1. 위에서 지정한 패키지 범위안에 존재
2. 클래스명 위에 어노테이션 작성
@Component
용도가 애매한 객체에 사용
@Controller
컨트롤러에 사용
@Service
서비스 객체에 사용
@Repository
DAO 객체에 사용
스프링 MVC
스프링 MVC는 컨트롤러 파일에 메서드를 작성
예시 1 (String 타입으로 결과 페이지 반환)
// @Controller: Servlet-context.xml 가장 하단의 component-scan으로 해당 파일을 컨트롤러로 인식
// bean-container에 삽입 - 해당 어노테이션이 부여된 class들을 자동으로 스캔해 bean 으로 등록
@Controller
public class MvcController{
// @RequestMapping: 기본 url 이후 주소를 정의해 접속시 작동
// 기본 주소(localhost:8181)뒤에 "/goA"를 작성하면 goA() 메서드 실행
@RequestMapping(value="/goA")
public String goA(){
// 결과 페이지는 views 폴더 아래의 A.jsp(.jsp를 생략하고 작성)
return "A";
}
예시 2 (주소 뒤 ?값=값 형태로 들어오는 결과 페이지 반환_파라미터 내부 변수 값과 주소 뒤 값이 일치)
@RequestMapping(value="/goB")
// 주소 뒤 ? 뒤의 값을 파라미터 값으로 처리 - 작성하지 않으면 결과 페이지에 접근하지 못함
public String goB(int num, Model model){
// 파라미터 값 전달 - addAttribute("name", value);
mdoel.addAttribute("num", num);
return "C";
}
예시 3 (주소 뒤 ?값=값 형태로 들어오는 결과 페이지 반환_파라미터 내부 변수 값과 주소 뒤 값이 불일치)
@RequestMapping(value="/goC")
// @RequestParam("대체이름") - 작성한 변수명 대신 대체이름으로 받아옴
public String goC(@RequestParam("c")int num, Model model){
model.addAttribute("num", num);
return "C";
}
예시 4 (결과 페이지가 같은 주소를 공유하지만 접근방식에 따라 다른 값을 반환)
// 하나의 로직으로 작동하는 메서드라는 것을 알려주기 위해 같은 주소를 사용
// form 에서 method=post 로 제출시에만 해당 메서드가 실행됨
@RequestMapping(value="/goD", method=RequestMethod.POST)
public String goD(int d, Model model){
model.addAttribute("d", d);
return "D";
}
// 주소창을 검색하여 이동하는 것은 get 방식으로 간주되어, 주소창에 /goD 입력 시 해당 메서드가 실행됨
@RequestMapping(value="/goD", method=RequestMethod.GET)
public String goDForm(){
return "DForm";
}
@RequestMapping
의 Method=get, post 방식 구분을 넣는 파라미터는
1. 위처럼 각각 사용하거나
2. array로 묶어 method = {RequestMethod.GET, RequestMethod.POST}
사용하거나
3. get 방식만을 전제로 하는 @GetMapping()
, post 방식만을 전제로 하는 @PostMapping()
로 사용 가능
예시 5 (url 패턴으로 특정 파라미터 값 받아와 결과 페이지 반환)
// '/주소값/숫자'에서 숫자 위치에 있는 값을 page 값으로 간주
@RequestMapping(value="/goE/{page}")
public String goE (@PathVariable int page, Model model){
model.addAttribute("page", page);
return "E";
}
예시 6 (void 타입은 반환할 값이 없기 때문에 반환될 결과 페이지의 이름은 'url패턴.jsp' 로 자동 지정)
@RequestMapping(value="/goF", method=RequestMethod.GET)
public void goF(int f, Model model){
model.addAttribute("f", f);
}