본문 바로가기

Archived(Programming)/Spring #2(기초)

@Controller

# DipatcherServlet

DispatcherServlet

# 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