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
'Java Spring' 카테고리의 다른 글
[Java Spring] 의존성 주입(DI, Dependency Inject) (0) | 2021.03.28 |
---|---|
[Java Spring] Annotation(2) (0) | 2021.03.28 |
[Java Spring] 환경 구축4(Mybatis, 오라클 연동) (0) | 2021.03.24 |
[Java Spring] 환경 구축3(오라클 설치) (0) | 2021.03.24 |
[Java Spring] 환경 구축2(글로벌프로퍼티 설정) (0) | 2021.03.24 |