@RequestMapping
1. 정의
- 요청을 특정 메서드에 매핑하기 위해 사용되는 어노테이션
2. 특징
- 해당 URL로 들어오는 요청을 특정 메서드로 매핑
- HTTP 메서드 지정 - method 속성을 사용, 특정 HTTP 메서드에 대해 요청 처리
- 파라미터 및 헤더 매핑 - params 및 headers 속성을 사용, 파라미터나 헤더를 검사하여 조건부로 메서드 매핑
- 클래스 매핑 - 클래스에 @RequestMapping을 적용시 해당 클래스의 모든 메서드에 대해 기본 URL을 설정
@Controller
1. 정의
- 웹 애플리케이션 컨트롤러 클래스 정의
- HTTP 요청을 처리, 뷰 반환
2. 특징
- 요청 처리 - HTTP 요청 수신,처리하는 메서드 정의, 요청 URL에 따라 특정 메서드가 호출
- 뷰 반환 - 처리 결과에 따라 JSP, Thymeleaf 같은 뷰 이름 반환
- 모델 데이터 설정 - Model 객체를 통해 뷰에 데이터 전달
- RESTful API 구축 - @RestController사용, JSON, XML 형태로 응답 반환하는 RESTful 웹 서비스 구축
<@Controller, @RequestMapping 사용 예시>
package com.coma.app.view.gym;
import java.util.ArrayList;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.coma.app.biz.gym.GymDAO;
import com.coma.app.biz.gym.GymDTO;
@Controller("gymMain")
public class GymMainPageAction{
@RequestMapping("/GYMMAINPAGEACTION.do")
public String gymMain(Model model, GymDAO gymDAO, GymDTO gymDTO) {
//---------------------------------------------------------------------------
//해당 페이지에서 공통으로 사용할 변수 and 객체
//View에서 전달해주는 (페이지 번호)변수
// int타입은 null 체크를 할 수 없으므로 Integer타입으로 저장
Integer page = gymDTO.getPage();
//---------------------------------------------------------------------------
//페이지 네이션을 위해 암벽장 전체 개수를 요청 selectOne
//페이지 네이션을 위한 페이지 개수를 구하는 로직을 구현
int page_num = 1; // page_num 초기 변수 지정
if(page!=null) {
page_num = page;
}
int gym_size = 5; // 한 페이지에 표시할 게시글 수 설정
int min_gym = 1; // 최소 게시글 수 초기화
// 페이지 번호에 따라 최소 및 최대 게시글 수 설정
if(page_num <= 1) {
// 페이지 번호가 1 이하일 경우
min_gym = 1; // 최소 게시글 번호를 1로 설정
}
else {
// 페이지 번호가 2 이상일 경우
min_gym = ((page_num - 1) * gym_size) + 1; // 최소 게시글 번호 계산
}
//페이지네이션 값과 condition 값을 DTO에 추가하여 (6개출력)
gymDTO.setModel_gym_min_num(min_gym);
gymDTO.setModel_gym_conditon("GYM_ONE_COUNT"); //컨디션 추가해야함
//암벽장 총 개수를 요청 selectOne
GymDTO model_gym_total = gymDAO.selectOne(gymDTO);
System.out.println("min_gym"+min_gym);
// 페이지네이션 에 표시할 min_gym ~ max_gym까지 를 설정
gymDTO.setModel_gym_min_num(min_gym);
//암벽장 리스트를 model에 요청 selectAll
//암벽장 테이블에서 받을 값(암벽장 번호 / 암벽장 이름 / 암벽장 주소)
ArrayList<GymDTO> model_gym_datas = gymDAO.selectAll(gymDTO);
System.out.println(model_gym_datas);
//------------------------------------------------------------
//지도 API를 사용하기 위해 json 형식으로 보내는 로직
String json = "[";
//model_gym_datas 비어 있지 않다면
if(!model_gym_datas.isEmpty()) {
for (GymDTO data_gym : model_gym_datas) {
// datas(크롤링한 암벽장 데이터)만큼 암벽장 이름과
json += "{\"title\":\"" + data_gym.getModel_gym_name() + "\",";
// 암벽장 장소를 json 형식으로 쓰여져있는 String 값으로 추가해서
json += "\"address\":\"" + data_gym.getModel_gym_location() + "\"},";
}
// 끝에있는 쉼표 제거한 뒤 저장
json = json.substring(0, json.lastIndexOf(","));
}
json+="]";
System.out.println(json);
//------------------------------------------------------------
//암벽장 리스트를 View로 전달
model.addAttribute("model_gym_datas", model_gym_datas);
//암벽장 전체 개수를 View로 전달
model.addAttribute("model_gym_total", model_gym_total.getModel_gym_total());
//json 형식 데이터 전송
model.addAttribute("datas", json);
//암벽장 페이지 페이지 번호를 전달.
model.addAttribute("page_num", page_num);
return "gymMain";
}
}
2024.10.10
'Spring' 카테고리의 다른 글
| [Spring] 07-3. 활용 코드 예시(Front, .xml 설정파일) (3) | 2024.10.11 |
|---|---|
| [Spring] 07-2. 어노테이션의 종류(@Repository, @Service) (1) | 2024.10.10 |
| [Spring] 06. ModelAndView의 정의 (1) | 2024.10.08 |
| [Spring] 05. 어노테이션 의존성 주입 (1) | 2024.10.04 |
| [Spring] 04. 의존성 주입 (0) | 2024.10.02 |