230201 Spring MVC Controller 객체 구현. @Controller와 @RequestMapping
http://localhost:8282/controll/WEB-INF/views/request/ex01
여기서 controll이 컨텍스트패스
porm.xml에서
컨텍스트 패스 변경 -artifactId를 변경,
<artifactId>basic</artifactId>
톰캣
-모듈에서 path를 edit으로 변경.
스프링 MVC Controller 객체 구현
@Controller
-컨트롤러 클래스에 사용
Spring Bean Configuration file인 servlet-context.xml의
<context:component-scan base-package=""/>
를 통해 빈으로 생성된다.
@Service
-서비스 클래스에 사용
@Repository
-DAO클래스 또는 리포지토리 클래스에 사용함
@Component
-위의 셋이 아닌 일반적인 컴포넌트로 등록되기 위한 클래스에 사용
=>기능은 다 똑같다.
@RequestMapping("경로")
클래스에 사용할 수도 있고, 메서드에 사용할 수도 있다.
메서드에 사용할 떄, 클래스에 RequestMapping을 하면 아래 메서드에 경로가 붙는다.
즉, 그룹화해준다.
/클래스경로/메서드경로1
/클래스경로/메서드경로2 가 가능.
어노테이션에도 속성이 있다.
@RequestMapping(value="", method=RequestMethod.GET) //get요청만 받을 수 있음
@RequestMapping(value="", method=RequestMethod.POST) //post요청만 받을 수 있음
Controller의 화면처리와 연결될 떄,
@RequestMapping 메서드는 void형 메서드, String형 메서드로 만들 수 있다.
void형 메서드-들어오는주소와 나가는 주소가 동일할 때.
String형 메서드-들어오는경로 따로, 화면에 나가야하는 경로 따로, 둘이 다를 때.
제일 많이 사용하는게 String형 메서드.
String형 메서드는 return에 리졸버에서 합성될 경로를 넣는다.
@RequestMapping()의 ()안에는 value 하나만 쓸거면 그냥 쓰면 된다.
@RequestMapping(value="/basic1", method = RequestMethod.GET)는
@GetMapping("/basic1")로 줄일 수 있다.
Post방식도 마찬가지. RequestMethod.POST면 @PostMapping()으로 사용가능
RequestController.java
package com.simple.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
@RequestMapping("/request") //메서드 앞에 공통으로 들어가는 요청경로
public class RequestController {
//String메서드-출력 화면을 직접 지정
// @RequestMapping("/ex01") //요청경로
// public String ex01() {
// return "request/ex01"; //출력경로
// }
//void메서드-요청경로가 출력경로가 됨
@RequestMapping("/ex01")
public void ex01() {}
//get만 허용
//@RequestMapping(value="/basic1", method = RequestMethod.GET)
@GetMapping("/basic1")
public String basic1() {
System.out.println("get만 허용");
return null;
}
//post만 허용
//@RequestMapping(value="/basic2", method=RequestMethod.POST)
@PostMapping("/basic2")
public String basic2() {
System.out.println("post만 허용");
return null;
}
@RequestMapping("/basic3")
public String basic3() {
return null;
}
}
!일단 화면을 그리는 메서드를 먼저 생성
ex01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ex01</title>
</head>
<body>
ex01화면
<a href="basic1">요청1</a>
<a href="basic2">요청2</a>
<a href="basic3">요청3</a>
</body>
</html>
화면을 그리지 않았기에 요청1과 요청3으로 이동하면 404에러 발생. 요청1은 콘솔창에 "get만 허용"을 출력
요청2는 405에러. post방식이라 콘솔창 출력도 되지 않는다.