우당탕탕 개발일지

65일차_Spring MVC(2) & Spring Project(1) 본문

비트캠프/이론 및 정리

65일차_Spring MVC(2) & Spring Project(1)

ujin302 2024. 10. 10. 09:38
반응형

요청 응답 관련 설정

@ResponseBody

반환값을 단순한 문자열로 인식할 수 있도록 도와주는 어노테이션

 

1. @ResponseBody 사용 X

Spring에서 String 반환값을 단순한 문자열이 아닌 view 파일 이름으로 인식

 

2. @ResponseBody 사용 O

@ResponseBody 를 사용하면 Spring Framework가  String 반환값을 단순 문자열로 인식

 

 

@RequestMapping 한글 깨짐

한글 깨짐

 

@RequestMapping 에서 produces = "text/html; charset=EUC-KR" 를 사용하면 한글이 안 깨진다.

 

 

 

[ Spring Framework 실습 ]

예제1: 다양한 방법으로 Data 주고 받기

 

 

프로젝트명: Chapter06_1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

@Controller

SumController.java

클라이언트의 데이터를 받는 5가지 방법 

 

1. HttpServletRequest  사용

 

결과 화면

 

 

2. @RequestParam 사용

결과화면

 

 

 

3. 예외 처리

400: 데이터 없음

 

 

@RequestParam((required = false, defaultValue = "0")

  • 데이터가 없을 경우, 0 으로 초기화

 

결과화면

 

 

매개변수가가 너무 많을 경우

4. Map 사용 

매개변수

  • @RequestParam Map : 클라 -> 서버 
  • ModelMap : 서버 -> 클라

 

5. DTO 사용

매개변수

  • @ModelAttribute DTO : 클라 -> 서버
    • 클라에서 보내는 name 속성과 DTO에서 받는 필드변수명이 동일하여야 받아 올 수 있다.
  • ModelMap : 서버 -> 클라 

 

 

 

예제2: 예제1 프로젝트에서 성적 프로그램 추가

 

프로젝트명: Chapter06_1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

@Controller

 

 

input.jsp 파일에서 name 속성과 DTO의 필드변수명이 동일한 것을 알 수 있다.  

 

 

결과 화면

 

 

 

 

[ Spring MVC Project 실습 ]

프로젝트 생성 화면

 

 

 

 

프로젝트명: SpringProject

 

버전

  • Java: jdk-11
  • Tomcat: 9.0
  • Spring Framework: 5.3.37

 

기술

  • Back: Spring Framework
  • DB: MyBatis(MySQL)
  • Front: JSP

 

 

 

 

 

 

 

 

 

 

1. 기본 설정

URL 주소 변경

 

 

DispatcherServlet 등록

web.xml

요청 url 형태: Spring/~~ 

 

 

DB 설정 파일

 

해당 위치에 있어야 java 파일에서 경로를 읽을 수 있다

main 아래의 resources 폴더는 java 관련된 자원이 위치한다. 

  • 경로: src/main/resources

 

파일 목록

  • mapper
  • db 연결정보
  • mybatis 설정 정보

 

 

 

 

 

 

resources 폴더가 webapp 아래에 있는 것도 있다. 

이 폴더는 web과 관련된 자원파일을 위치하여야 한다. 

 

위의 main 폴더 아래의 resources 폴더와 헷갈리면 안된다...! 

 

 

 

 

 

 

 

 

 

 

 

 

 

2. 코드

  1. SpringConfiguration.java
    • 목적: DB 연결 관련 설정
    • @Configuration
  2. UserController.java
    • user 관련된 요청 URL 처리
    • @Controller
  3. UserDTO.java
    • user DTO
  4. UserServiceImpl.java
    • user 관련된 비즈니스 로직 처리
    • Interface UserService  
    • @Service
  5. UserDAOImpl.java
    • user 관련된 DB 처리 
    • Interface UserDAO
    • @Repository

 

SpringConfiguration.java

Interface UserService는 빈으로 등록할 수 없다.

하지만 @Autowired 어노테이션을 통해 의존성 주입이 되고 있다. 

인터페이스인 UserService에 자동으로 값이 초기화될 수 없는 상황이다. 

 

이때 Spring이 자동으로 Interface UserService의 구현체(Class) 중에서 빈으로 등록되어 있는 클래스로 주입하게 된다. 

해당 코드에서 구현체는 UserServiceImpl 클래스임으로 userService에는 UserServiceImpl 객체가 주입된다. 

 

[ Interface가 의존성 주입이 가능한 원리 ]

  1. Interface는 빈으로 등록 X & 의존성 주입 불가능
  2. Interface의 구현체를 찾음
    1. 구현체가 1개이며 Bean으로 등록되어 있는 경우 의존성 주입 가능
    2. 구현체가 2개 이상이면 @Qualifier("구현체 클래스명") 을 통해 구현체 지정하여 의존성 주입
  3. 조건에 맞는 클래스로 InterFace에 의존성 주입 

 

 

결과화면

반응형