반응형

1. @Controller 

가장 기본적인 Annotation이다. 

우리의 비즈니스 모델을 보면

Controller -> Service(Impl) -> DAO -> Mybatis -> SQL 뭐 이런식으로 흘러간다.

여기서 사용자가 주소창에 http://www.test.com/kr/test.do 

이런 걸 치고 들어왔다고 쳐보자. 그러면, 이 호출이 Java 단에서 잘 찾아줘야하는데,

그 역할을 하는 것이 Controller라고 보면 된다.

Controller는 간단하다. 그냥 클래스 위에 @Controller만 추가해주면 된다.

예시는 다음과 같다.

구조는 위와 같고,

소스코드는 다음과 같다.

@Controller
public class BoardController {
	private static final Logger logger = LoggerFactory.getLogger(BoardController.class);
	@Resource(name="boardService")
	private BoardService boardService;

	@RequestMapping(value = "/board/BoardList.do")
	public String home(Locale locale, Model model) throws Exception {
		ModelAndView mv = new ModelAndView("/co/coe/BoardList");
		
		List<BoardVO> list = boardService.selectBoardList();
		model.addAttribute("list", list);
		
		System.out.println(list.get(0).getContents());
		System.out.println(list.get(0).getId());
		
		return "/co/coe/BoardList";
	}
}

이런 소스가 있다. 이렇게 컨트롤러를 설정해주는 어노테이션이다~ 이말이야~

Anyway

(@Resource와, @RequestMapping도 보이는 데, 뒤에서 다룰 예정이다.)

 

2. 그 다음에 바로 보이는 RequestMapping

소스코드는 위와 동일하고 보면 

	@RequestMapping(value = "/board/BoardList.do")

뭐 이런식으로 써져있다.

이건 무슨의미냐 -> http://localhost:9128/kr/board/BoardList.do 을 주소창에 입력했을 때 

여기로 들어와라 라는 것을 의미한다. (본인은 port Number : 9128로 지정, Default : 8080

그리고 초반에 패키지 설정하는 걸 com.kitao.kr 로 설정 했다.)

그러면 여기를 들어오게되고 Java 로직이 실행 되는 것이다.

 

RequestMapping을 사용하는 방법은 2가지가 있다.

1. Class에 선언

2. 메소드에 선언

둘의 차이점을 살펴보자.

 

1.  Class 에 RequestMapping 설정

@Controller
@RequestMapping(value = "/board/*")
public class BoardController {
	private static final Logger logger = LoggerFactory.getLogger(BoardController.class);
	@Resource(name="boardService")
	private BoardService boardService;

	@RequestMapping	
	public ModelAndView home1(Model model) throws Exception {
		ModelAndView mv = new ModelAndView("/co/coe/BoardList");
		
		List<BoardVO> list = boardService.selectBoardList();
		model.addAttribute("list", list);
		
		System.out.println(list.get(0).getContents());
		System.out.println(list.get(0).getId());
		
		return mv;
	}

	@RequestMapping(value="/BoardList.do")
	public String home2(Locale locale, Model model) throws Exception {
		ModelAndView mv = new ModelAndView("/co/coe/BoardList");
		
		List<BoardVO> list = boardService.selectBoardList();
		model.addAttribute("list", list);
		
		System.out.println(list.get(0).getContents());
		System.out.println(list.get(0).getId());
		
		return "/co/coe/BoardList";
	}
}

Class에 value값이 /board/* 로 설정되어 있고 그 하위에는 설정안되있는 것이 한개, 

/BoardList.do로 설정되어 있는게 한개 총 2개가 있다.

 

이게 뭐를 의미하는지 솔직히 주구장창 설명보다 예시가 낫다고 생각한다.

http://localhost:9128/kr/board/BoardList.do

-> @RequestMapping(value="/BoardList.do") 로직 수행

http://localhost:9128/kr/board/

-> @RequestMapping 로직 수행

http://localhost:9128/kr/board/test.do

-> @RequestMapping 로직 수행

 

자 이제 감이 오는가? 일단 http://localhost:9128/kr/board/~~~ 의 형태인 애들은 

저 Class로 접근을 1차적으로 하고 하위에서 다시 갈리는 것이다.

예시를 보고 설명을 들으니 더 쉬운 Magic !

 

3. @PathVariable 과 @requestParam

간단하게 설명하자면, 

@PathVariable은 주소에 값을 가져와서 넣기 위해 사용되는 이노테이션,

@requestParam은 파라미터의 형태로 넘어온 애들을 넣어주는 변수.

아니 뭐 이것도 예시가 빠르다.

	@RequestMapping(value="/test//test.do", method = RequestMethod.GET)
	public ModelAndView home3(Locale locale, Model model, 
			@PathVariable("userId") int user,
			@RequestParam(value = "date", required = false) String date) throws Exception {
		System.out.println(user);
		System.out.println(date);
		
		return new ModelAndView("co/coe/BoardList");
	}

이런 소스가 있을때, 

대충 느낌보면, http://localhost:9128/kr/test/1234/test.do 이런 애들이 오겠구나 생각이 들어야한다. 여기서 더 해서 파라미터까지 설정 http://localhost:9128/kr/test/1234/test.do?date=2012 이런식으로 들어오겠구나 생각이 들 수 있다.

 

http://localhost:9128/kr/test/1234/test.do?date=2012  이러한 애가 들어왔다고 가정하면

int user <- 이 안에는 1234

String date <- 이 안에는 2012로 들어온다.

 

참고로 Get, Post 방식으로 모른다면 관련 문서를 참고하고 오는걸 추천한다.

http://localhost:9128/kr/test/1234/test.do?date=2012  에서 1234가 @PathVariable로 인하여 user에 설정되었고, @requestParam으로 인하여 물음표 뒤에 달려있는 파라미터(Get 방식)이 date에 설정되었다.

참고로 @requestParam은 html의 form 태그로 넘길때도 설정 가능하다.

 

오늘은 여기까지 배워보고 다음에는 자바스프링에서의 의존성 역전 원리와

그것을 설정해주는 @Inject @AutoWired @Resource를 살펴보고

@Service Annotation에 대해서도 살펴볼 것이다.

 

 

 

그럼 20000

 

 

반응형

+ Recent posts