Spring

Spring MVC - @RequestMapping, @GetMapping

전체코드

HomeController.java

package co.jw.sol.controller;

@Controller
public class HomeController {
	@RequestMapping(value="/", method=RequestMethod.GET)
	public String home() {
		return "index";
	}
}
    • @Controller : 해당 클래스를 빈으로 등록, 컨트롤러로 사용한다고 명시한다
    • 기본 주소 / 가 요청되면 get방식으로 index 페이지를 반환한다
    • url과 함께 HTTP Method도 함께 구분한다

 

SpController.java

-  HttpServletRequest

@GetMapping("/t1")
public String a1(HttpServletRequest request) {
    request.setAttribute("d1", "세종");
    return "forward:/final1";
}
@GetMapping("/final1")
public String f1(HttpServletRequest request) {
    String str=(String)request.getAttribute("d1");
    System.out.println(str);
    return "final1";
}

// 출력: final1.jsp
${requestScope.d1 }
  • "t1" 요청이 get방식으로 들어오면 HttpServletRequest 타입으로 "d1" 이름의 객체에 값(세종)을 담아서 
  • forward 방식으로 final1 페이지에 전달한다

forward 와 Redirect 

forward

  • 코드는 서버에서만 이동을 하고, 브라우저는 그 흐름을 알수 없기 때문에 주소창의 주소가 변경되지 않는다
  • HttpServletRequest HttpSession 도 그대로 유지된다

Redirect

  • 새로운 요청이 발생한 것으로 HttpServletRequest 객체는 소멸하고 새롭게 생성된다
  • HttpSession 객체는 그대로 유지된다

Model

@GetMapping("/t2")
public String a2(Model m) {
    m.addAttribute("d2","정조");
    return "forward:/final2";
}

@GetMapping("/final2")
public String f2(HttpServletRequest request) {
    String d2=(String)request.getAttribute("d2");
    return "final2";
}

//출력 final2.jsp
${requestScope.d2 }
  • 't2’ url이 요청들어오면, ‘d2’ 이름의 데이터에 값(동원)을 저장해서 모델에 담는다
  • Model 객체에 세팅하면 HttpServletRequest 객체에 담겨 jsp 전달할 있다
  • forwrad 방식으로 final2 페이지를 반환한다
  • Model로 주입 받은 것은 HttpServletRequest 객체에 담겨있기 때문에 HttpServletRequest 받아서 final2 페이지로 넘겨준다.

 

ModelAndView

@GetMapping("/t3")
public ModelAndView a3(ModelAndView mv) {
    mv.addObject("d3","태조");
    mv.setViewName("forward:/final3");
    return mv;
}
@GetMapping("/final3")
public String f3(HttpServletRequest request) {
    String str=(String)request.getAttribute("d3");
    return "final3";
}

//출력
${requestScope.d2 }
  • ModelAndView: 모델과 뷰 정보를 담아서 반환한다
  • “d3” 이름의 데이터에 값을 저장해서 ModelAndView 담는다
  • forward 방식으로 “final3” 이름으로 ModelAndView 담아서 ModelAndView 반환한다
  • Model에 담긴 것은 HttpServletRequest 객체에 담겨 있으므로 객체에서 받는다

 

@GetMapping("/t4")
public String a4(Model m) {
    Data dd=new Data();
    dd.setD1("정조");
    dd.setD2("정종");
    m.addAttribute("dd",dd);
    return "forward:/final4";
}

@GetMapping("/final4")
public String f4(HttpServletRequest request) {
    Data dd=(Data)request.getAttribute("dd");
    System.out.println(dd.getD1());
    System.out.println(dd.getD2());
    return "final4";
}

//출력 final4.jsp
${requestScope.dd.d1 }
${dd.d2 }
  • “t4” url 요청받으면 Data객체를 생성하고, set메서드를 통해서 값을 저장한다
  • 저장된 값을 “dd”이름으로 모델에 담아서 forward 방식으로 “final4” 페이지로 전달한다
  • “final4” 요청이 오면 “final4” 페이지를 반환한다
  • “dd”이름으로 HttpServletRequest 담겨있는 Data객체를 꺼낸다

 

@GetMapping("/t5")
public String a5(@ModelAttribute("bean") Data dd) {…}

//출력:  final5.jsp
${bean.d1 }
${requestScope.bean.d2 }
  • “bean”이름으로 Data 객체로 주입받고 동일한 이름의 프로퍼티에 model에 담아서 자동으로 주입된다

DI

전체코드  

→ 동일한 작업을 xml로 작성 : 전체코드  (@Lazy 를 추가해야지 오류가 생기지 않는다)

더보기

config 파일을 src가 아닌 WEB-INF에 만든다.
 WEB-INF에 web.xml 생성
root-context.xml에서 빈 등록
그 다음 작업은 자바작업과 동일하다

xml으로 작업하면, 로딩될때 객체가 생성되기 때문에 오류가 발생
(request는 요청될때 생성되는데)
@Lazy 추가해야 한다.

컴포넌트 등록은 servlet-context에서 컴포넌트스캔 추가

ServletAppContext

@ComponentScan(basePackages = "co.jw.sol.beans")

 

RootAppContext

@Configuration
public class RootAppContext {
	@Bean
	@RequestScope
	public Data d1() {
		return new Data();
	}

	@Bean("b1")
	public Data2 d2() {
		return new Data2();
	}
}
  • @Configuration : 빈 등록 클래스임을 명시한다
  • @RequestScope
    • 범위를 Request 영역까지 설정(생량 가능)
    • 응답결과가 브라우저로 전송될 때까지 유지된다
    • 리턴값은 Data객체의 주소값이다
  • @Bean("b1")  :  “b1” 이름으로 Data2를 빈 객체로 등록한다

 

SpController.java

@Controller
public class SpController {
	@Autowired
	Data d1;
	@Resource(name="b1")
	Data2 d2;
	@Autowired
	Data3 d3;
	
	@GetMapping("/t1")
	public String a1() {
		d1.setD1("세종대왕");		d1.setD2("이순신");
		d2.setD3("야키자카");		d2.setD4("호호");
		d3.setD5("컴포넌트 주입");
		return "forward:/final1";
	}
	
	@GetMapping("/final1")
	public String f1(Model m) {
		System.out.println(d1.getD1()+"/"+d1.getD2());
		m.addAttribute("d1", d1); m.addAttribute("d2", d2); m.addAttribute("d3", d3);
		return "final1";
	}
}
  • data객체의 주소값을 d1에 주입한다
  • “b1”이름의 객체를 자동주입한다
728x90
728x90

'Spring' 카테고리의 다른 글

properties - 유효성검사, 에러메시지출력  (0) 2022.08.05
HttpSession  (0) 2022.08.05
myBatis를 이용한 DB연결, CRUD구현  (0) 2022.08.02
JDBC 연결하기  (0) 2022.08.02
Spring AOP - xml과 어노테이션  (0) 2022.08.01