노승현
Spring Controller 변환 과정 본문
C가 변화되는 과정 기억
편의상 호칭이 버전 1,2,3
버전 1 : JSP
사용자가 요청을 하면 FrontController가 요청을 받아서 Action을 선택하고, 해당 action에서 ActionForward 반환
버전2
(Spring 진입)
사용자 요청 >> DispatcherServlet -> Controller 선택하고, String (페이지 이름에 대한 정보)를 반환
=>DS가 Controller를 반환하는 과정에서 HandlerMapping을 사용함
여기서 반환된 정보를 ViewResolver를 통해서 응답을 처리함
핸들러맵핑과, ViewResolver는 DispatcherServlet의 멤버변수임
= 의존관계
= 의존주입(DI)을 필요로 함
버전3
Spring 프레임 워크에서 제공하는 Controller 인터페이스를 사용해보자
output이 MAV (ModelAndView)
버전 4 : Spring 프레임 워크에서 제공하는 @Controller를 사용하면
더 이상 인터페이스가 아니게 됨
메서드 시그니쳐 강제 x
output String이 가능해진다
기존에는 메서드 인자 안에 Request, response 등에 객체를 사용했는데
ex) myapge GET : 페이지 단순 이동
// mypage OST : 마이페이지의 변경된 정보를 저장해줘
기존에 JSP에서 사용하면 호출명이 중복되는 경우 에러가 발생할 수 있었는데 스프링에서는 타입의 전달방식을
비교해서 요청을 수행하기 때문에 해당 호출명이 같아도 같은 이름으로 단순 페이지 이동과, 데이터 전달을 같이
처리할 수가 있음
이관 작업 방식
1. 특별한 일이 없다면 이름을 똑같이함 (Action만 Controller로 수정)
2. 실제 내용 전부 복사 후 붙여넣기
3. 클래스 위에 어노테이션 Controller 붙여주기
4. 메서드 하나 생성
5. 기존에 actionForward가 하던 경로를 찾아서 원래 반환 하던 값을 String으로 바꿔줌
6. forward.setPath ("~~.do) => return "redirect:main";
forward.setRedirect("true")
7. if / else문 처리시에 성공한 코드를 가장 바깥 뎁스로 빼고, 실패한 경우를 내부에 넣음
public String replyDelete(Model model){
if (!flag){
return "alert"
}
return "redirect:main"
}
8. 데이터를 전달하는 경우에 model 객체를 이용해서 model.addAttribute("msg","메시지"); 등을 추가함
public String replyDelete(Model model){
rDAO.delete();
if (!flag){
model.addAttribute("msg","메시지")
return "alert"
}
return "redirect:main"
}
9. flag와 delete가 같으므로 해당 코드로 변환
public String replyDelete(Model model, ReplyDAO rDAO){
if (!rDAO.delete()){
model.addAttribute("msg","메시지")
return "alert"
}
return "redirect:main"
}
10. DTO를 넣어줘야 하기 때문에 인자로 rDTO를 추가 함
public String replyDelete(Model model, ReplyDTO rDTO){
if (!rDAO.delete(rDTO)){
model.addAttribute("msg","메시지")
return "alert"
}
return "redirect:main"
}
11. 맵핑을 통해 요청정보 확인
@RequestMapping("/replyDelete")
public String replyDelete(Model model, ReplyDAO rDAO,ReplyDTO rDTO){
if (!rDAO.delete(rDTO)){
model.addAttribute("msg","메시지")
return "alert"
}
return "redirect:main"
}
12. 의존관계이기 때문에 @Autowired 사용
기존에 사용하던 DAO service로 변환
public calss ReplyDeleteController{
@Autowired
private ReplyService replyService;
@RequestMapping("/replyDelete")
public String replyDelete(Model model, ReplyDTO rDTO){
if (!replyService.delete(rDTO)){
model.addAttribute("msg","메시지")
return "alert"
}
return "redirect:main"
}
}
'Spring' 카테고리의 다른 글
MyBatis (1) (1) | 2024.03.26 |
---|---|
Validator (0) | 2024.03.13 |
Spring 통합 질문 (0) | 2024.03.08 |
Spring 이관 및 boot 실행 (0) | 2024.03.08 |
DBCP (0) | 2024.03.05 |