728x90
반응형
스프링 MVC - 컨트롤러 기능
- 스프링 MVC 처리
✔️ URI를 분석해서 적절한 컨트롤로 연결 (*.me, *.bo) 를 스프링이 한다. 별도의 매핑이 필요 x
✔️ 컨트롤러에 필요한 메서드 호출
✔️ 컨트롤러에 처리결과 (데이터)를 뷰 페이지로 전달
URI 에 적절한 뷰페이지 연결
적절한 파라미터를 수집 (DTO, VO)
- 개발자 처리
특정 URI 에 동작하는 컨트롤러 생성
컨트롤러 안에 필요한 결과를 메서드 형태로 구현
서비스 객체 생성
DAO 객체 생성
뷰페이지에서 전달받은 정보 출력
Controller 는 메서드를 통해서 동작을 구현함.
메서드 리턴 타입에 다른 뷰를 연결
void -> 호출 주소의 이름과 같은 뷰
String -> 리턴된 문자열과 같은 뷰
파라미터 (@ModelAttribute)
객체 Model
=> 뷰페이지에 정보를 각 각 전달
페이지 이동 시엔 redirect : 페이지 이동
RedirectAttribute 객체 (일회성 데이터 전달)
SampleController1
@Controller
public class SampleController1 {
///로그출력 객체
private static final Logger logger = LoggerFactory.getLogger(SampleController1.class);
@Controller
public class SampleController1 {
///로그출력 객체
private static final Logger logger
= LoggerFactory.getLogger(SampleController1.class);
//http://localhost:8080/web/doA
@RequestMapping(value = "/doA")
public void doA() {
logger.info("/doA 호출 -> doA() 실행 ");
}
//doB 라는 주소로 호출되는 doB 메서드
//http://localhost:8080/web/doB
@RequestMapping(value ="/doB",method=RequestMethod.GET)
public void doB() {
logger.info("/doB호출");
}
}
RequestMethod 아무것도 안적으면 Get 방식
POST를 넣으면..405 에러 뜸
스프링에서는 아래와 같이 쓴다.
@GetMapping(value="/doB")
public void doB() {
logger.info("/doB호출");
}
@PostMapping
@GetMapping
@Controller
@RequestMapping("/test/*")
public class SampleController1 {
///로그출력 객체
private static final Logger logger
= LoggerFactory.getLogger(SampleController1.class);
//http://localhost:8080/web/test/doA
@RequestMapping(value = "/doA")
public void doA() {
logger.info("/doA 호출 -> doA() 실행 ");
}
//doB 라는 주소로 호출되는 doB 메서드
//http://localhost:8080/web/test/doB
// @RequestMapping(value ="/doB",method=RequestMethod.POST)
@GetMapping(value="/doB")
public void doB() {
logger.info("/doB호출");
}
}
URI 에 적절한 뷰페이지 연결
컨트롤러에 처리결과 (데이터)를 뷰 페이지로 전달
SampleController2
//http://localhost:8080/web/doC1?msg=hello
@RequestMapping(value ="/doC1",method = RequestMethod.GET)
public String doC1(@ModelAttribute("msg") String msg) {
logger.info(" doC1() 메서드 호출 -> itwill.jsp 뷰 호출 ");
return "itwill";
}
itwill.jsp
<h1> itwill.jsp </h1>
JSP : <%request.getParameter("msg"); %><hr>
EL : ${msg }<hr>
EL : ${param.msg }<hr>
<h1> itwill.jsp </h1>
JSP : <%request.getParameter("msg"); %><hr>
JSP : <%request.getAttribute("msg"); %><hr>
EL : ${msg }<hr>
EL(r) : ${RequestScope.msg }<hr>
EL(s) : ${SessionScope.msg }<hr>
EL(p) : ${pageScope.msg }<hr>
EL(a) : ${applicationScope.msg }<hr>
EL : ${param.msg }<hr>
JSP : <%request.getParameter("tel"); %><hr>
EL : ${param.tel }<hr>
EL : ${tel }
@ModelAttribute("파라미터명") String 변수
request.setAttribute()의 역할을 함
SampleController3
@Controller
public class SampleController3 {
///로그출력 객체
private static final Logger logger
= LoggerFactory.getLogger(SampleController3.class);
//객체 -> 뷰 페이지로 전달
// doD 호출 => itwillMember.jsp 연결 => 유저 정보 출력
//http://localhost:8080/web/doD?userid=itwill&userpw=55555
@RequestMapping("/doD")
public String doD(Model model, MemberVO vo/*@ModelAttribute("userid") String userid*/) {
logger.info(" doD() 호출 -> itwillMember.jsp 연결 ");
//객체 정보를 전달 => Model 객체 (스프링에서 제공하는 컨트롤러의 정보를 뷰페이지로 전달하는 객체)
// MemberVO vo = new MemberVO();
// vo.setUserid("admin");
// vo.setUserpw("1234");
// vo.setUsername("관리자");
// vo.setUseremail("admin@admin.com");
//모델 객체에 정보를 저장 (연결된 뷰페이지로 전달)
// model.addAttribute("userid", userid);
model.addAttribute(vo);
//=> Attribute에 이름이 없는 경우 전달 되는 객체의 클래스명을 사용 (소문자)
return "itwillMember";
}
}
모델 객체
뷰 페이지로 객체의 정보를 전달 할 때 모델을 쓴다 (ModelAttribute)
itwillMember
<h1>itwillMember.jsp</h1>
${vo } <hr>
아이디 :${vo.userid } <br>
${userid }
비밀번호:${vo.userpw } <Br>
<%-- ${MemberVO } 대문자로 하면 안됨 --%>
${memberVO }
Model 객체 / @ModelAttribute
-> 둘다 정보를 뷰 페이지에 전달 (request.setAttribute)
Model 객체 (model.addAttribute()) : 메서드 단위 실행
-> key/value 쌍으로 정보를 객체에 저장 후 전달
@ModelAttribute : 컨트롤러 단위 실행
-> 전달된 파라미터의 타입에 맞는 객체를 생성 후 Model 객체에 다시 저장 (덮어쓰기)
SampleController4
@Controller
public class SampleController4 {
///로그출력 객체
private static final Logger logger
= LoggerFactory.getLogger(SampleController3.class);
// 동작 처리 이후에 페이지 이동 (주소이동)
//http://localhost:8080/web/doE
@RequestMapping("/doE")
public String doE() { //String을 리턴해야 redirect 사용 할 수 있음
logger.info("EEEEEEEEEEEEEEEEEEEEEE");
return "redirect:/doF"; //리다이렉트 X , 뷰페이지 호출 O
}
//http://localhost:8080/web/doF
@RequestMapping("/doF")
public String doF() {
logger.info("FFFFFFFFFFFFFFFFFFFFFFFFF");
return "";
}
}
return "forward:/doF"; 도 가능 (포워딩 방식)
return "redirect:/doF"; 도 가능 (리다이렉트 방식)
@Controller
public class SampleController4 {
///로그출력 객체
private static final Logger logger
= LoggerFactory.getLogger(SampleController3.class);
// 동작 처리 이후에 페이지 이동 (주소이동)
//http://localhost:8080/web/doE
@RequestMapping("/doE")
public String doE() { //String을 리턴해야 redirect 사용 할 수 있음
logger.info("EEEEEEEEEEEEEEEEEEEEEE");
return "redirect:/doF?msg=hello"; //리다이렉트 X , 뷰페이지 호출 O
}
//http://localhost:8080/web/doF
@RequestMapping("/doF")
public String doF(@ModelAttribute("msg") String msg) {
logger.info("FFFFFFFFFFFFFFFFFFFFFFFFF");
logger.info("msg : " + msg);
return "";
}
}
doE를 호출 했을 떄 콘솔에 hello 찍혀있으면 됨
모델 객체 이용해서 정보 전달하기
//http://localhost:8080/web/doE
@RequestMapping("/doE")
public String doE(Model model) { //String을 리턴해야 redirect 사용 할 수 있음
logger.info("EEEEEEEEEEEEEEEEEEEEEE");
model.addAttribute("msg","ITWILL");
// return "redirect:/doF?msg=hello"; //리다이렉트 X , 뷰페이지 호출 O
return "redirect:/doF";
//http://localhost:8080/web/doE
@RequestMapping("/doE")
public String doE(RedirectAttributes rttr /*Model model*/) { //String을 리턴해야 redirect 사용 할 수 있음
logger.info("EEEEEEEEEEEEEEEEEEEEEE");
// rttr.addAttribute("msg", "ITWILL");
//기존 Model 객체와 동일
//URI 에 표시 됨
//기존의 이동 방식 사용 가능
rttr.addFlashAttribute("msg", "ITWILL"); //일회성 데이터
//전달 정보를 1회성으로 사용 가능
//URI 에 표시 안됨. 정보는 전달 되고 있으나 F5(새로고침) 시 데이터 사라짐
//redirect 이동 시에만 사용 가능
/*model.addAttribute("msg","ITWILL");*/
// 주소줄에 파라미터 형태로 전달 /doF?msg=ITWILL
// return "redirect:/doF?msg=hello"; //리다이렉트 X , 뷰페이지 호출 O
return "redirect:/doF";
}
rttr.addAttribute("msg", "ITWILL");
기존 Model 객체와 동일
URI 에 표시 됨
기존의 이동 방식 사용 가능
rttr.addFlashAttribute("msg", "ITWILL");
전달 정보를 1회성으로 사용 가능
URI 에 표시 안됨. 정보는 전달 되고 있으나 F5(새로고침) 시 데이터 사라짐
redirect 이동 시에만 사용 가능
logger 단축키 만들기
${:import(org.slf4j.Logger,org.slf4j.LoggerFactory)}
private static final Logger mylog=LoggerFactory.getLogger(${enclosing_type}.class);
mylog 치면 이제 단축키로 만들수 있음
728x90
반응형
'Spring > Spring' 카테고리의 다른 글
1213 Spring 프로젝트 생성 & AdminLTE2 (2) | 2022.12.13 |
---|---|
1206 Spring (0) | 2022.12.06 |
1201 Spring - 회원 정보 조회, 로그인 (0) | 2022.12.01 |
1124 Spring - MyBatis 와 스프링의 연동 (0) | 2022.11.24 |
1122 Spring - MyBatis (0) | 2022.11.22 |