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 |