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 에 내용이 없을 시 출력될 내용과 내용이 있을 시 출력될 내용 작성