Spring

230201 Spring MVC Controller 객체 구현. @Controller와 @RequestMapping

주영재 2023. 2. 1. 19:10

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방식이라 콘솔창 출력도 되지 않는다.