# DipatcherServlet
# Controller
- 사용자 요청(URL 기반)에 해당하는 Controller의 특정 메소드가 호출됨
- Controller는 요청의 파라미터가 있으면 처리하고
- 비즈니스 처리를 위해서 서비스 컴포넌트를 주입 받아서 실행
- 실행된 결과를 전달받아 DispatcherServlet에게 반환
@Controller(클래스에 사용), @RequestMapping, @Autowired 어노테이션 사용
# @RequestMapping
@RequestMapping > Class Level Mapping vs Method Level Mapping
Class level Mapping 후에 Method Level Mapping이 합쳐져서 URL이 형성됨
URL이 같다고 하더라도 Get, Post와 같이 요청 방식에 따라 다른 메소드 호출 가능
@GetMapping, @PostMapping, @PutMapping, @DeleteMapping 과 같이 새로운 어노테이션 등장(Spring 4.3 후)
@PathVariable > 요청URL을 파라미터롤 사용(경로변수)
ex) URL:/bbs/{articleId} URL을 통해 게시판 카테고리와 ID를 Param으로 넘길 수 있음
@Controller
@RequestMapping("/bbs")
public class BbsController{
@AutoWired
private BbsService service;
@RequestMapping("/{articleId}")
public String viewDetail(@PathVariable String ArticleId){
Article article = service.viewArticle(articleId);
...
# ModelAndView를 사용한 모델/뷰 처리
응답으로 View(JSP)와 Model(Domain Object, VO)를 함께 처리할 때 사용
서비스로부터 받아온 데이터를 뷰로 전달해주는 역할
ModelAndView view = new ModelAndView();
view.setViewName("bbs/list"); // ViewResolver를 통해 Resolving
view.addObject("articleList", list); // JSP 페이지 Key, Value로 값 넘기기
return view;
${list}
${list}.length
# Redirect & Forward
컨트롤러에서 클라이언트의 요청을 처리한 후에 다른 페이지로 리다이렉트 하고 싶을 때
return "redirect:/bbs/list";
cf) forward: return "forward;/bbs/list"
경로 부분이 "/"로 시작하면 웹 어플리케이션 내에서의 절대 경로를 리다이렉트
"/"로 시작하지 않으면 @RequestMapping 어노테이션의 경로를 기준으로 상대 경로로 리다이렉트
// 상대 경로
@RequestMapping("/header/createauth"(
public String createAuth(){
return "redirect:main";
}
// 절대 경로
@RequestMapping("/header/createauth")
public String createAuth(){
return "redirect:http://localhost:8080:TotalTest";
}
# 실습 BbsController 작성 및 HTTP 파라미터 사용
Controller 생성 및 Request Mapping
package kr.co.acomp.hello.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import kr.co.acomp.hello.service.BbsService;
import kr.co.acomp.hello.vo.Article;
@Controller
@RequestMapping("/bbs") // 클래스 레벨 맵핑
public class BbsController {
@Autowired // DI 자동 주입
private BbsService bbsService;
@RequestMapping("/write") // 메소드 레벨 맵핑
public String write() {
bbsService.registArticle(new Article());
return "write_ok";
}
}
write_ok.jsp 파일 생성 - SpringMVCTest/src/main/webapp/WEB-INF/views
그리고 서버 가동 후 URL 확인(localhost:8080/SpringMVCTest/bbs/write)
파라미터 넘겨보기
localhost:8080/SpringMVCTest/bbs/write?author=kim
package kr.co.acomp.hello.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import kr.co.acomp.hello.service.BbsService;
import kr.co.acomp.hello.vo.Article;
@Controller
@RequestMapping("/bbs") // 클래스 레벨 맵핑
public class BbsController {
@Autowired // DI 자동 주입
private BbsService bbsService;
@RequestMapping("/write") // 메소드 레벨 맵핑
public String write(@RequestParam("author") String author) {
bbsService.registArticle(new Article());
System.out.println(author); // 받은 파라미터 출력
return "write_ok";
}
}
'Archived(Programming) > Spring #2(기초)' 카테고리의 다른 글
Restful API (0) | 2020.03.12 |
---|---|
Http 파라미터 처리 (0) | 2020.03.12 |
Spring MVC (0) | 2020.03.11 |
Layered Architecture & @Component (4) | 2020.03.10 |
DI(Dependency Injection) (0) | 2020.03.10 |