본문 바로가기
코딩

2022.03.17_27일차_스프링(2)

by 흥뷰자 2022. 3. 17.

26일차 학습내용

편리한 라이브러리들 추가하고 실행해보기 : 
롬복

 

 

라이브러리 추가


롬복은 그냥 라이브러리만 추가하는 게 아니라 설치도 필요 

라이브러리 추가 전에 다운로드 

1. 롬복 (자바 프라이빗 변수- 게터세터 다 추가했었는데) 게터세터 to_string 생성자 등등 자동으로 생성해줌 클래스 설계에 편리) 

롬복 내부에 많은 어노테이션이 있다.

전체 만드는거 (@Data)

생성자만 만드는거

기본생성자만 만드는거

게터세터만 만드는거 

다운로드 후 실행하면 - 찾는경로가 나옴. 이클립스 해제해놓은 것을 spring 안에 지정 후 Install/Update

(만약 압축해제하는 방법으로 나오면 압축해제하지 말고 - cmd로 실행 해야하함 )


있는 드라이브 위치로 이동 d:
후 javva -jar lombok.jar 
실행 





롬복을 직접 실행

 

설치 완료

설치확인 이클립스 폴더 내에 파일이 있는지 확인 

이게 보이지 않으면 어쩌구 하라고 설치완료화면에 써있음

.ini 파일에 맨 하단에 \lombok.jar 써있는거 확인

 

그리고 이클립스 실행중인거 재부팅

 


 

이제 라이브러리 메이븐디펜던시 사이트에 들어가 서 필요한것들 검색후 pom.xml에 복붙

0. 어제 바꾼거 configration 자바 버전/ 소스 타겟 / 

1. 롬복

 

2. spring test : 테스트코드 작성시 필요

전 영역에서 쓰기 위해 <scope>test를 지워줌

version설정도 el언어로 바꿔줌 (관리 용이) 그리고 저장하면 자동으로 test 들어온거 확인됨 (오래걸림) 

 

 

 

 

 

3. 롬복과 충돌날수 있는거 log4j 기존거 주석처리하고 구버전으로 

log4j

4. junit도 수정 4.12로 수정

 

 

 

 



경로가 왜 집으로 되어있냐 
에러나게 되니까 경로 바꿔줘라


난 STS설치하고 .jar파일 압축해제를 기본 다운로드 폴더에 해버렸다.... (그게 원인인지는 정확하지않지만) 한글이 경로에 잡힘


이도 저도 안되어서 한글 경로를 바꾸는 작업을 진행





와씨.... 변경하니까 폴더 안에 있는게 다 실행이 안되벌임.........................


해결방법==>Microsoft계정을 새로 만들어서 사용자 추가로 다시 진행. 경로 한글이 없게 되어서 문제 없이 진행됨



 

 

 

 

 

 

 

5. 서블릿도 기존거는 주석처리하고 변경

 

 

 

 

 

6.   properties의 다른 태그들도 버전 수정

 

 

 

 

기본라이브러리들 완료

 

앞으로 필요한거 추가하면서 쓸것

 

 

에러없나 서버 실행 해보기

 


롬복 잘되나 테스트 패키지와 클래스 만들기 java내부에 

 

패키지 네임 3단계로

클래스 이름 아무거나

롬복이 잘 설치 됐으면 어노테이션@Data  하면 자동으로 Chef() 기본생성자, getter/setter, toString() 까지 잘 생기게 됨

잘 작동되는거 확인.


MVC가 어떻게 흘러가는지 

사용자가 페이지 요청 

http://localhost:8080/controller - home > helloworld나오겠지 / 뒤게 루트 컨넥스트패스

 

8080톰캣으로 요청이 들어가게 됨. 톰캣 서버 모듈 페이지에서 확인 가능 Path는 /controller로 되어있고, 해당 프로젝트는 myspring을 가르킴

톰캣 내부에 들어가있는 프로젝트(myspring) 중에서 컨텍스트패스가 /controller인걸된 프로젝트 찾아 - 마이 스프링 프로젝트를 원하는 거임. 패스는 수정할 수 있다. /만 남겨두면 :8080/만으로 접근 가능

해당폴더 안에 있는 web.xml부터 찾는다


루트컨텍스트확인

 

 

서블릿을 뭘쓰나 먼저 봄. 디스패쳐서블릿으로 잡혀있네, 그거로 서블릿으로 만들면서 초기값을 param으로 줌.

매핑할 경로는 / 모든경로~~ 톰캣서버에 매핑되어있는거가 있어서.. 쉽게는 모든~~ (해당경로 객체생성하면서 서블릿구조를 다 만들어줌 - 컨트롤러도 만들고 뷰리졸버 행들러매핑도...)

채워주는 파일이 루트컨텍스트와 서블릿컨텍스트

앱서블릿 태그 이름 실행 / 요청들어오는 곳이 어디인지를 본다/ DispatcherServlet을 사용하는고나~~ 디스패처서블릿이 가져가야 할 초기값. 웹과 관련. 서블릿과 관련 / 자식  

sevlet과 servlet-mapping은 쎄트 / 서블릿에는 서블릿이름지정 초기화파라미터이름, 파람이름위치와 이름(정해져있음) , 초기설정값으로 가져가야할 경로까지 세팅/ 매핑에는 주소 들어올 때 주소 패턴을 지정 슬래시 컨트롤러 '/'모든 

앱서블릿을 사용하는 태그를 찾는다. 

 

 

<context-param> 변수 이름에 값. 설정정보 가지고 있는 파일의 위치 초기화 파라미터를 추가한 것. 범용적으로 쓸 목적 스프링 환경 경로. root컨테이너?. 프로젝트 스프링 전체와 관련/ 부모

 

처음에 프로젝트 서버 스타트하면 필요한 정보들 담아서 설정하고 환경만들때 Spring Container도 만들고

 

<listener> 설정정보를 해줘야 할 경우 듣고있다가 설정관련된걸 다 로딩을 해줌. 서버 스타트 되면 컨텍스트 로딩해. 위에 컨텍스트 파람들을 들어서 다 로딩해줌. 

 

 

 

 

디스패쳐서블릿

스프링컨테이너에 만들어지는것

설정정보가 모두 web.xml에 있음

 

 

servlet-context.xml

 

 

webapp 밑 resources에 css, js, 이미지 등 소스들 경로를 jsp에서 경로 적을 때, /resources/~~라고 작성하면 해당 폴더안에서 찾겠다~지정하기

<resources mapping="/resources/**" locaton="/resources/"/>

 

컴포넌트 요소를 스캔하겠다. 

해당 패키지를 스캔해라 ~~ @Component, @Controller, @Service, @Repository 들이 붙어있는 클래스들을 전부 스캔해서 객체 생성 자동으로 해줌

스프링이 해당 어노테이션이 붙은 클래스들을 객체생성(스프링빈으로등록)해서 스프링이 개체를 관리하게 됨. (더이상 new하지 않음 자동으로 스프링이 관리)

<context:component-scam base-package="com.basic.controller"/>

 

 

 

 

 


우리만의 컨트롤러를 만들어보자

 

 

루트컨텍스트를 없앰

저장 후 서버 재부팅

 

 

만든 컨트롤러 클래스(파일) 에 컨트롤러를 임포트해~

@Controller

 

 

요청경로 매핑~~~@RequestMapping

views 내부에 있는 파일을 부르는 명령 (메서드가 처리할 요청 경로를 지정) (임포트) 여기서는 메서드 안에 적었지. 이따가 클래스 위에도 작성하는거 볼 수 있음 

파일 명은 뒤에 확장자 없이 앞에 경로도 없이 가운데 부분만 리턴으로 받아 뷰리졸버가 있으니까. (서블릿컨텍스트.xml에 설정~~)

jsp파일 만들기. 바로 안보이니까 other로 들어가서 만들어야함.

 

 

서버 재부팅. jsp에서 태그 바꾸는거 말고는 다 서버 재부팅. 

내가 지정한 /hello 로 들어가보니까 테스트 페이지가 뜨게 됨

요청경로 매핑~~~ @RequestMapping

(위치는 클래스 위에도 가능 - (메서드 전에 경로 추가할때) 사용할 수 있음) 모든 경로 앞에 해당 경로가 추가되는 것임.

 

주소를 바꿔서 들어가야 들어갈 수 있음

속성에 요청방식 적는 method가 있음

요청 방식 안적으면  GET, POST 둘다 가능

따로 지정하려면 value="요청주소", method=요청방식

요청방식에는

  C Create  POST
  R Read GET
  U Update PUT
  D Delete DELETE

있는데 우리는 GET, POST만 쓸거..

 

추가된 어노테이션 (스프링 4.3버전부터 사용가능)

요청 관련 어러가지 어노테이션

여러 경로를 한번에 적용: 중괄호로 묶어서 나열

 

물음표 와일드 카드 매핑 . 글자 하나 뭐가오든 열어줌~ 확장자명? 충돌날순있지만 이런게 있따..

 

다른 컨트롤러만들어보자

패키지 만들고, 그다음 클래스를 만든다

 

 

3단계로 

컨트롤러 어노테이션과 리퀘스트 매핑을 해줌

여기까지만 하면 객체생성 안댐 

SampleController 객체생성 더이에 하는지도 몰라. 메인이 뭔지 모르니까~~ 이제는 

xml파일에 객체생성~~

 

객체 생성 = 스프링 빈(스프링이 관리하는 객체. 생성도 필요시 주입도 알아서)으로 등룍 
java.util.Date 패키지 명까지 포함해서 적어야
TestController 이름생략 = new TestController(); 

서버재부팅 후 요청하면 보임

이걸 개별적으로 하지 않고 context:componet-scan 으로 한번에 생성 가능

해당 패키지를 스캔해라~~~ @Component, @Controller, @Service, @Repository들이 붙어있는것들
스프링이 해당 어노테이션이 붙은 클래스들을 객체생성(스프링빈으로 등록)해서
스프링이 객체를 관리하게 됨.  

객체는 서블릿-컨텍스트파일에해주고 <beans:bean>앞에 별칭을 써줘야함 // xmlns가 mvc로 되어있어서 

모델은 루트-컨텍스트파일에 해주면 됨 <bean>  이건 xmlns에 beans까지 다 붙어있어서 

쓸 태그 묶음들 위로가면 보면대~~

 


객체생성=빈등록 

루트에 다 넣어~~~~ 컨트롤러 빼고 다 루트에 넣어주세용. 빈 클래스 동일하게 만들경우 변수이름까지 맞춰주세요

데이트 객체로 예시~~

 

 

 

 


그전에 

컨트롤러 메서드 리턴타입 여러가지 

void 타입

 

웹에 - jsp file 선택~~~

페이지 주소를 day02/hello2

객체생성 해봤으니까 이제

DI (Dependency Injection)  의존성 주입 = 부품 조립. 

: 스프링에서 의존성을 줄여야 부품을 잘 만든거고 그 방법중 하나가 의존성 주입

 

기존 방법은 다음과 같이 new로 객체를 생성해서 가져다 쓰게 됨


타입 설정하여 변수를 선언하고


실제 필요할 때 객체를 생성해서 변수에 담아주고

 



uitl패키지의 date임 sql이 아니니까 주의

의존성 주입으로 한다는건 빈으로 등록한다는 말~~

 

자동주입

@Autowired

private 클래스명 변수명;

 

같은 타입의 빈 두개 설정 = 같은 타입으로 객체 생성 두개 생성 하는 경우 변수이름까지 동일하게 맞춰줘야함

 

 

기존 셰프 클래스 빈으로 등록해보자 (객체생성) ~~ 루트에 

 

오토와이어드~~ 자동주입 TestController에서 ~ 다른 폴더에 있으니까 임포트도 해주고

주입이 됐는지 안됐는지 보기 위해서 출력도 한번 해봄

 

 

서버재부팅

 

컴포넌트는 부모~~ 다른애들 기능 세분화 자식들

빈으로 만들지 않고 context가 가지고있는 컴포넌트스캔을 쓰고싶다면 해당 해당 스키마만 추가해주면된다.

서블릿 컨텍스트에 이미 스키마가 들어가 있으니까 거기거 복붙~~ 

근데 빈으로 만들든 컴포넌트 스캔을 쓰든 둘중 하나만 해야 하니까 좀전에 만든 빈을 주석처리하고~~

서블릿 컨텍스트.xml에 있는 것들 중에서 필요한 것 복사 (나는 이에서 네번째 줄 / 끝에서 두번째줄,마지막줄)

붙여넣기

 

쓰고싶은 위치.xml파일에 객체생성위한 자동 스캔해달라고 작성~~

뉴 레거시 프로젝트로 처음부터 연습해보기

 

'코딩' 카테고리의 다른 글

2022.03.21_29일차_spring(4)_EL, JSTL  (0) 2022.03.22
2022.03.18_28일차_스프링(3)  (0) 2022.03.18
2022.03.16_26일차_스프링(1)  (0) 2022.03.16
25일차  (0) 2022.03.16
2022.03.14_24일차_jsp(2)  (0) 2022.03.16

댓글