@controller

반응형

안녕하세요 무작정 일단 따라해보는 Spring 커뮤니티 만들기 2탄 시작합니다.

환경

Eclipse 2019-9 Jee 
JDK 1.8_231 
Apache Tomcat 8.5.47

 

Spring 프로젝트 구조

1편에서 만들었던 Spring 프로젝트죠 

굉장히 복잡해보이는데요 한번 간단하게 알아보겠습니다.


src/main/java : 말 그대로 java 파일들이 모여있는 곳 (Controller,Service,DAO)

한마디로 Java 파일을 만들 땐 이 패키지에 만들면 됩니다.


src/main/resources : 서버가 실행될 때 필요한 파일들,배포할 리소스 파일

-XML Mapper(쿼리),로그 설정..등

-Properties 파일


src/main/webapp : 웹 애플리케이션 관련 파일 

src/main/webapp/WEB-INF/views : jsp 페이지 경로


pom.xml : Maven 관련 설정 파일


정말 최고로 간단하게 설명했고,

이 이상은 일단 따라해보는 Spring 프로젝트 취지에 맞지 않기 때문에 다루지 않습니다.

 

 

Controller,Service,DAO package 만들기


src/main/java 폴더 우 클릭 후 -> New -> Package

이렇게 3개(controller,service,dao)의 Package를 만들어주세요.


그리고 기존에 있던 HomeController.java는 삭제해줍시다.

 

최종 src/main/java


Controller 만들기


com.company01.springEx01.controller 패키지 우 클릭 -> New -> Class

Name : ViewController

이렇게 ViewController.java 라는 파일을 만들었는데요 이게 Controller라는걸 컴퓨터는 모르겠죠?

그래서 @Controller 라는 이름표를 붙여줍니다.

@Controller
@RequestMapping("view/*")
public class ViewController {

	@RequestMapping("view/dashboard")
	public ModelAndView dashboard() {
		ModelAndView mav = new ModelAndView();
		
		return mav;
	}
	
}

@Controller : 컨트롤러라는걸 명시하는 어노테이션

@RequestMapping : 클라이언트가 요청한 URL를 누가 처리 할 것인지 결정하는 길잡이 역할

-@RequestMapping("view/*") : URL에 view라는 요청이 들어오면 무조건 ViewController.java으로 보내겠다.

-@RequestMapping("view/dashboard") : URL에 view/dashboard라는 요청이 들어오면 dashboard() 라는 메소드로 보내겠다.


자 그럼 Controller는 만들었으니 view 라는 폴더를 만들어야겠죠

 

그전에 먼저 기존에 존재하던 home.jsp도 삭제 해줍시다.

 

src/main/webapp/WEB-INF/views/ 마우스 우 클릭 후 -> New -> Folder

Folder name : view

view 폴더가 만들어졌으면, view 폴더 우 클릭 -> New -> JSP File

File name : dashboard

dashboard.jsp 생성 후 ->더블 클릭 -> 코드 작성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>dashboard</title>
</head>
<body>
<p>dashboard 입니다.</p>
</body>
</html>

그런데 지금 HomeControllerhome.jsp가 없기때문에 톰캣 서버를 켰을 때

404 페이지가 출력되는 현상이 발생됬습니다.

 

처음 사이트에 진입하면 보이는 화면을 보통 index 화면이라고 하는데요.

index.jsp를 만들어봅시다.

src/main/webapp/ 폴더 우 클릭 후 -> New -> JSP File

File name : index

 

주의 : views 폴더에 만드는 것이 아닌 webapp 폴더 밑에 만드셔야 합니다. WEB-INF,views 아니고,

        반드시 webapp 밑에 만드셔야 합니다.

index.jsp 생성 후 -> 더블 클릭 -> 코드 작성

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>SpringEx01 커뮤니티</title>
</head>
<body>
<p>환영합니다 SpringEx01 커뮤니티입니다.(index page)</p>
<a href="/springEx01/view/dashboard">대시보드 보러가기</a>
</body>
</html>

자 그럼 들어가 볼까요?

먼저 Run on Server를 하고 바로 들어온 모습입니다.

index.jsp 페이지가 잘 떴네요.

 

대시보드 보러라기 링크를 클릭해 이동해봅시다.


view/dashboard 라는 URL이 추가되니 dashboard() 메소드가 실행된 겁니다.

dashboard 페이지도 잘 떳습니다.

 

정리

1.Controller 생성 완료

2.@Controller , @RequestMapping 사용법 숙지 완료

3.JSP file 생성 완료


최종 Project Explorer

반응형

[Spring] annotations 정리

2019. 10. 16. 14:15
반응형

Annotation(어노테이션 || 애너테이션 || 애노테이션)이란?

아하영어사전 - 애너테이션

http://aha-dic.com/View.asp?word=Annotation

대중적인 발음 - 어노테이션

여기선 어노테이션이라 칭하겠음

 

1.본래 주석이란 뜻으로 사용됨

2.인터페이스를 기반으로 문법

3.클래스에 특별한 의미 부여 || 기능 주입 가능

 

종류

1.built-in annotation

) Override

2.Meta annotation

) @Target

3.Custom annotation

)public @interface AnnotationName{}

 

쨋든 글에서 다루어볼것은 Spring 프레임워크에 들어있는 자주쓰이는 기본 어노테이션들을 다루어 보겠습니다.

 

[@Controller]

해당 클래스가 Controller임을 나타내기 위한 어노테이션

 

[@RequestParam]

Controller 메소드의 파라미터와 웹요청 파라미터와 맵핑하기 위한

어노테이션

 

[@ModelAttribute]

Controller 메소드의 파라미터나 리턴값을 Model 객체와 바인딩하기 위한 어노테이션

 

[@SessionAttributes]

Model 객체를 세션에 저장하고 사용하기 위한 어노테이션

 

[@RequestPart]

Multipart 요청의 경우, 웹요청 파라미터와 맵핑 가능한 어노테이션

 

[@CommandMap]

Controller메소드의 파라미터를 Map형태로 받을 때 웹요청 파라미터와 맵핑하기 위한 어노테이션(egov 3.0부터 추가)

 

[@ControllerAdvice]

Controller를 보조하는 어노테이션으로 Controller에서 쓰이는 공통기능들을 모듈화하여 전역으로 쓰기 위한 어노테이션(egov 3.0, Spring 3.2.X부터 추가)

 

[@RequestMapping]

 

이름

타입

설명

value

String[]

URL 값으로 매핑 조건을 부여 (default)

method

RequetMethod[]

HTTP Request 메소드 값을 매핑 조건으로 부여

사용 가능한 메소드는 GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE (7개)

params

String[]

HTTP Request 파라미터를 매핑 조건으로 부여

consumes

String[]

설정과 Content-Type request 헤더가 일치할 경우에만 URL이 호출됨

produces

String[]

설정과 Accept request 헤더가 일치할 경우에만 URL이 호출됨

 

 

[@ResponseBody

이 어노테이션이 붙으면 View Page를 리턴하는게 아니고 '데이터'를 리턴합니다.

즉, return type이 String이며 "home"이라는 문자열을 되돌려준다고 가정해볼께요.

@ResponseBody 어노테이션을  안붙이면 "home.jsp" 페이지를 보여주지만

어노테이션을 붙이게되면 "home"이라는 문자열 자체를 보여주게됩니다. 

 

[@RequestBody]

보통 AJAX + JSON을 사용할때 사용하는 어노테이션

요청받은 데이터의 Body(내용)의 전체내용을 파라메터로 받습니다.

 

View페이지의 AJAX요청의 contentType이 "application/json"이면 @RequestBody 어노테이션을 통해서만

웹서버에서 내용을 받을 수 있어요.

 

※주의 ResponseBody,RequestBody 문법 헷갈림 

 

[@RestController]

 

스프링 4 부터 @RestController 애노테이션의 경우 기존의 특정한 JSP 같은 뷰를 만들어 내는 것이 아닌REST

  식의 데이터 자체를 서비스하는 것을 말한다.

  - 스프링 3에는 해당 메소드의 리턴 타입에 @ResponseBody 애노테이션을 추가하는 형태로 작성되었다.

  - 기능은 달라진것이 없지만컨트롤러 자체의 용도를 지정한다는 점에서 변화가 있다고   있다.

  - URI 원하는 리소스를 의미한다.(복수형으로 작성)

  - URI에는 식별할  있는 데이터를 같이 전달하는 것이 일반적이다.

 

  // 컨트롤러 위에 어노테이션을 붙혀서 사용한다.

 import org.springframework.web.bind.annotation.RequestMapping;

 import org.springframework.web.bind.annotation.RestController;

 

 @RestController

 @RequestMapping("/sample")

 public class RestControllerExampleController {

 

 }

 

 만약 import 오류가 발생하면 maven webmvc 버전을 확인하라.

 

 @RestController JSP 같은 뷰를 만들어 내지 않는 대신에 데이터 자체를 반환하는데이때 주로 사용되는 것은 단순 문자열과 JSON, XML, 등으로 나누어   있다.

 

 

이상 글을 마칩니다. 글은 계속해서 공부하고 싶은 어노테이션들이 추가될 예정입니다.

반응형

+ Recent posts