본문 바로가기

Spring/Spring

1205 Spring 컨트롤러 4가지

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