본문 바로가기

BE/Spring

[Spring] 어노테이션 종류, @Autowired, @qualifier, GET / POST 방식 처리

 

 

 

 

 

어노테이션

어노테이션

: 어노테이션을 붙이면 프로젝트 실행 시 빈 객체로 등록된다 ( = 생성자가 실행된다 )

 

파일 세팅

 

어제 세팅해둔 com.care.ex01 을 com.care.ex02 로 변경

 

Controller, DAO, Service 에 각각 기본 생성자 생성 후 콘솔에 출력되게끔 하고 Controller 에만 어노테이션을 적용하여 실행

어노테이션이 붙으면 서버 실행 시 빈으로 등록되어 생성자가 실행된다 >> Controller 의 생성자만 실행되는 모습

 

DAO 와 Service 에 @Component 어노테이션을 붙여서 실행 >> 콘솔 창 출력

 

이번에는 DAO 에는 @Repository, Service 에는 @Service 어노테이션을 붙인 뒤 실행 >> 콘솔 창 확인

 

어노테이션은 종류에 따라 기능적 차이는 없고 빈 객체로 등록만 시킬 뿐이다...

예를 들어 Service 클래스에 @Controller 어노테이션을 붙여도 문제가 생기지 않는다

( 즉, 이름만 구분지어 놨을 뿐 기능 상 차이는 없다 )

 

 

 

 

 


 

 

 

 

 

만들어진 빈 객체를 꺼내오는 방법

만들어진 빈 객체를 꺼내오는 방법

 

Controller 에 코드 작성 후 서버 실행 ( MemberService 변수 생성, RequestMapping 을 사용하여 ex02/index 경로로 오는 내용을 처리 )

 

@Autowired 어노테이션을 사용하여 서버를 재시작 후 페이지에 접속하니 이미 등록된 service 객체를 불러오니 객체 값이 출력된다

 

Controller 에서 Service 쪽에 getData 메소드에 model 전달

 

Service 에 getData 메소드 생성 후 저장 > 웹 재접속 시 콘솔창에 출력되는 내용 확인

 

Service 에서 DAO 로 접근해야 하므로 Autowired 이용하여 DAO 객체를 불러와서 사용 >> DAO 의 메소드를 사용할 코드 작성

 

DAO 에서 값을 리턴 >> Service 에서는 해당 내용을 msg 변수로 받아 model 에 msg 라는 키로 저장

 

jsp 에서 전달받은 model 의 저장값 출력되는 것 확인

 

root-context.xml 파일에서 MemberService 를 abc 라는 빈 객체를 생성 >> MemberSerivce 에서 어노테이션에 빈 객체의 이름을 명시하여 저장

>>> 에러가 발생, Autowired 는 자료형을 기준으로 먼저 찾고 자료형이 같은 객체가 2개가 존재하면 이름으로 찾는데 현재 빈 객체에 MemberService 자료형이 두개 존재하므로 이름으로 찾기를 시도하지만 Controller 에서 설정한 변수 이름인 ms 와 동일한 이름을 가진 빈 객체를 찾지 못해 주입하지 못하고 오류가 발생된다.

 

빈 객체의 이름과 Autowired 로 호출하는 변수의 이름을 일치시키면 정상적으로 작동한다.

 

root-context.xml 에 DAO 빈 객체 등록 ( 아까 어노테이션으로 DAO 객체를 설정해놨으므로 Service 쪽 DAO 변수에 설정한 Autowired 에서 문제 발생 ) >> Service 에서 @Inject, @Qualifier 어노테이션을 사용해서 빈 객체의 이름을 지정하여 주입해서 사용할 수 있다.

 


 

 

 

 

GET, POST 전송 방식 처리하기

index.jsp 에 get 방식 전송과 post 방식 전송 코드 작성

 

웹에서 전송을 클릭하면 Controller 로 넘어올테니 Controller 에 코드 작성 및 result 페이지 작성

 

@RequestMapping 을 사용하면 get 방식과 post 방식을 모두 받을 수 있음

 

Controller 에서 RequestMapping 어노테이션에 GET 방식만 받게끔 설정 후 POST 방식으로 전송하여 확인 >> 405 에러 출력 ( GET 방식만 받도록 설정했기 때문 )

 

Controller 에서 전달받은 파라미터 값을 model 에 담아서 jsp 로 전달 >> jsp 파일에서 출력

 

입력 전송 > 확인 ( 파라미터 값이 model 객체를 사용하여 잘 넘어가는 것 확인 )

 

이번에는 POST 방식을 처리해볼 것임

 

PostMapping 으로 동일한 경로로 post 로 넘어오는 값을 처리 ( 어노테이션을 사용해서 넘어오는 값을 변수로 저장 ) > 웹에서 확인

@RequestParam 을 사용해서 input 태그에서 넘어오는 이름을 가지고 변수로 저장해서 사용.....

 

Controller 에서 최상단에 ex02 경로를 RequestMapping 으로 설정해주면서 하위에 동일 경로인 ex02 경로를 모두 생략할 수 있게 해준다

 

 

 

 

 

DTO 를 활용하여 파라미터 값을 받는 방법

 

DTO 생성 및 작성 ( getter / setter )

 

jsp 파일에 DTO 활용해서 넘길 폼 작성

 

Controller 에 DTO 를 활용하여 값을 받게끔 설정 >> jsp 파일 작성

 

전송 >> 확인

 

DTO 를 활용해서 받으면 넘어오는 파라미터의 이름과 DTO 의 변수 이름이 같으면 자동으로 값을 주입해준다

 


 

 

 

 

 

실습 예제

실습 예제

 

예제 풀이

프로젝트 생성 및 파일 세팅

 

버전 세팅

 

버전세팅 이후 프로젝트 업데이트 진행 ( 변경된 버전으로 사용하기 위해서 )

 

인코딩 오류 해결

 

Controller 에 index 페이지를 작성

 

register 에 대한 경로를 get 방식과 post 방식으로 분류하여 post 방식으로 들어오는 경우 회원가입 로직을 처리한 뒤 index 페이지로 반환

 

정상적으로 post 와 get 방식으로 들어오는 경우 경로를 나눠 출력하는 모습

 

입력 정보를 그대로 받아올 DTO 작성

 

Controller 에서 회원가입에 대한 정보를 DTO 객체로 받아온 뒤 Service 로 넘겨준다 >> Service 에서는 DAO 로 dto 객체를 저장하기 위해 넘겨준다 >> DAO 에서는 list 에 dto 객체를 저장한다

 

회원 목록보기 구현

 

Controller 에 경로 작성 후 list.jsp 에 넘겨줄 model 객체 만들어서 Service 에 전달 >> Service 에서는 DAO 에서 getList 메소드를 사용한 값을 model 에 list 라는 이름으로 저장한다 >> DAO 에서는 list 의 값을 리턴해준다

 

list.jsp 에 list 에 내용이 없을 시 출력될 내용과 내용이 있을 시 출력될 내용 작성

 

코드 실행
728x90