@controller
-
[Spring] annotations 정리2019.10.16
[Spring] 프로젝트 커뮤니티,블로그 만들기(#2)-package 생성 및 설정 (Feat.Controller,Service,DAO)
안녕하세요 무작정 일단 따라해보는 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>
그런데 지금 HomeController와 home.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 > 커뮤니티(블로그) 프로젝트' 카테고리의 다른 글
[Spring] 프로젝트 커뮤니티,블로그 만들기(#5)-회원가입,로그인,로그아웃 구현하기 (5) | 2019.12.08 |
---|---|
[Spring] 프로젝트 커뮤니티,블로그 만들기(#4)-게시판 작성,수정,삭제(CRUD) 만들기 (1) | 2019.11.30 |
[Spring] 프로젝트 커뮤니티,블로그 만들기(#3)-DB 연결+MyBatis 설정하기 (1) | 2019.11.24 |
[Spring] 프로젝트 커뮤니티,블로그 만들기(#1)-프로젝트 생성 및 톰캣 설정,인코딩 설정 (0) | 2019.11.17 |
[Spring] annotations 정리
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, 등으로 나누어 볼 수 있다.
이상 글을 마칩니다. 이 글은 계속해서 공부하고 싶은 어노테이션들이 추가될 예정입니다.
'Spring' 카테고리의 다른 글
[Spring] GET 파라미터(parameter) 데이터 받기 총 정리 (0) | 2019.12.15 |
---|---|
[Spring] MyBatis 데이터 HashMap으로 받기 (0) | 2019.10.31 |
[Spring] @Scheduled (0) | 2019.10.30 |
[Spring] DTO(Data Transfer Object)와 VO(Value Object) (1) | 2019.10.29 |
[Spring] GET과 POST의 차이점과 문법 정리 (0) | 2019.10.21 |