남는시간에 유투브 의미없는거보단 취업에 조금이라도 도움이 될만한 키워드로 검색해서 찾아보고 정리하자.
▶
학교강의들으면서 스프링강의 들을수 있을까,, 2주만 고생하자...
[오늘의 키워드]
1. 어제 받았던 질문 (http 통신방식, 에러 200 400 500) 정리하기
400 Bad Request 응답 상태 코드는 서버가 클라이언트 오류(예: 잘못된 요청 구문, 유효하지 않은 요청 메시지 프레이밍, 또는 변조된 요청 라우팅) 를 감지해 요청을 처리할 수 없거나, 하지 않는다는 것을 의미
500 에러의 경우 서버의 동작에서 발생하는 에러 중 더 정확한 에러 코드가 아닌 경우
- 서버 통신의 Timeout 시간 지연 오류
- 서버 트래픽 과부하
- 서버 언어의 구문 에러(스크립트 문법 오류)
- 1xx (정보): 요청을 받았으며 프로세스를 계속한다
- 2xx (성공): 요청을 성공적으로 받았으며 인식했고 수용하였다
- 3xx (리다이렉션): 요청 완료를 위해 추가 작업 조치가 필요하다
- 4xx (클라이언트 오류): 요청의 문법이 잘못되었거나 요청을 처리할 수 없다
- 5xx (서버 오류): 서버가 명백히 유효한 요청에 대해 충족을 실패했다
2. api 적용하는데 어떤 특징이있는지? <<맞나?
[오늘의 계획]
1. 수업내용 복습(스터디)
2. 부트스트랩 커먼게시판쪽 마무리하기
3.
[오늘의 공부]
실제로 만들어보자
Spring DAO 설정하기
- dataSource 설정
- ojdbc 필요 -> maven repository 들어가서 ojdbc 11을 다운받습니다.
-> jdbc 기능을 제공하기 위한 oracle driver 라이브러리
-spring jdbc 라이브러리 다운로드
-> spring dao 기능을 제공하는 라이브러리 - datasource 관련기능
=> 이걸 빌드하면 Transaction Manager도 같이 빌드처리 된다!
[bean configutaion 파일 설정]
apache가 제공하는 commons-dbcp2 라이브러리의 basicDataSource 클래스를 Spring bean으로 등록한다.
-> Connection 객체를 생성 관련 정보를 필드에 전달하여 저장 - setter injection한다
<bean class="org.apache.commons.dbcp2.BasicDataSource">
<property name="driverClassName" value="oracle.jdbc.driver.Oracledriver"/>
<property name="url" value="jdbc:oracle:thin:@localhost:1521:oracle"/>
<property name="username" value="BITUSER"/>
<property name="password" value="1004"/>
</bean>
[SpringDAO 클래스 작성]
spring dao 기능을 이용하여 dao 클래스 작성 - spring-jdbc 라이브러리 빌드 선행 필수
- JdbcTemplate 클래스의 템플릿 메소드를 호출하여 dao 클래스 작성
JdbdTemplate 객체를 이용하는 방법
- JdbcTemplate 객체를 제공받아 필드에 저장 ㅡ DI 이용 (권장)
- JdbcDaoSupport 클래스 상속 - JdbcTemplate 객체를 저장한 필드 사용
- injection을 위해서는 Setter 메소드가 필요.
- Bean Configuration File에서 StudentDAOImpl 클래스를 Spring Bean 으로 등록할 때 JdbcTemplate 클래스의 Spring bean을 필드에 인젝션 처리하여 의존관계 설정 ㅡ DI
JdbcTemplate.update(String sql, Object,,(0개이상의) object) : sql명령(insert,update,delete)를 dbms 서버에 전달하여 실행하는 메소드 - 조작행의 갯수를 반환한다.
=> 매개변수의 sql 명령과, inparameter(?) 에 저장될 값을 차례대로 나열하여 전달.
insert,update,delete : 같은 경우는 springDAO 사용하는게 편리하다.
하지만, select는 MyBatis가 훨씬 강력하다.
[오후수업 포인트]
xml에서 스프링빈으로 등록해서 사용하는게 중요하다.
SpringMVC에 대해서 살펴볼것임.
(괴상하게 생겼네)
jdbcTemplate.queryForObject(sql, new RowMapper<Student>(){ 오버라이드 메소드 } ,no);
public List<Student> selectStudentList(){ }
- 익명클래스를 만들어주네
- 익명의 내부클래스 대신 사용하고자 하는 클래스를 선언한다 - 재사용성을 위해서!!
프로그램이 dao를 갖다쓰는것이 아니고, service가 dao를 갖다가 쓴다.
프로젝트 시작
[web.xml]
: was 실행시 프로젝트 자원을 컨텍스트(웹자원)로 제공하기 위한 정보를 설정한 파일
=> 리스너설정, 필터 설정, 서블릿 설정, 에러페이지 설정
context-param : 컨텍스트로 존재하는 모든 클래스에 값을 제공하기 위한 엘리먼트
listener : was 실행시 listener 클래스를 객체로 생성하기 위한 엘리먼트
Listener 클래스 : ServletContextListener 인터페이스를 상속받은 자식클래스
└ contextInitialized() 메소드 : listener 객체 생성 후 자동으로 호출되는 메소드 - 초기화 작업
└ contextDestroyed() 메소드 : listener 객체 소멸 전 자동으로 호출되는 메소드 - 마무리 작업
was가 실행되자마자 가장 먼저 객체를 만들어준다
★ContextLoaderListener 클래스 : WebApplicationContext(Spring Container) 객체를 생성하고 Bean Configuration File을 읽어 Spring Bean으로 등록된 모든 클래스를 객체로 생성하여 컨텍스트로 존재하는 모든 클래스에서 사용할 수 있도록 제공하는 Listener 클래스.
Bean Configuration File : context-param 엘리먼트의 contextConfigLocation 이름으로 제공되는 파일
servlet : 서블릿 클래스를 웹프로그램(서블릿)으로 등록하는 엘리먼트
=> DispatcherServlet 클래스(Front Controller)를 웹프로그램으로 등록
DispatcherServlet 클래스 : 클라이언트의 모든 요청을 처리하기 위해 Spring Framework에서 제공하는 Front Controller 클래스
-> webApplicationContext 객체로 Bean Configuration File을 읽어 서블릿에서 사용될 Spring Bean객체를 생성하여 등록한다.
====> WebServlet한테만 스프링 객체를 제공한다.
init-param : servlet 클래스에서 필요한 값을 제공하기 위한 엘리먼트
★ 이거랑 위에 리스너랑 차이점이 무엇일까요?
왜 두개나 만들었음??????
사용할수있는 범위가 좀 다름
리스너 : 컨텍스트로 존재하는 모든 클래스
디스패쳐 : appServlet으로 등록된 servlet에서만 사용가능
왜? -> servlet 엘리먼트를 사용하여 front Controller기능을 제공하는 servlet을 여러개 등록 가능.
<load-on-startup> : was 실행시 서블릿 클래스를 객체로 생성하기 위한 엘리먼트
->클라이언트의 요청 없이 was 실행시 미리 서블릿 클래스를 객체로 생성하기 위해 사용
->엘리먼트의 값은 0보다 큰 정수값을 사용하며 값이 작을수록 먼저 객체로 생성한다.
★ 어디에 어떤 스프링빈 파일을 만들어줘야하는지 구분이 되어야 한다.
mvc 실습하기
1. ListController 클래스
- Command Controller : 클라이언트의 요청을 처리하기 위한 클래스 - model
=> 인터페이스가 필요했었음.. 하지만 만들필요가 없다. 스프링이 제공해 주기 때문이다.
implements Controller..!
@Override
handelRequest() : Front Controller(DispatcherServlet)에 의해 자동 호출되는 메소드
- was가 만들어주는 request 객체와 response 객체를 매개변수로 제공받아 요청처리한다.
- 뷰 관련정보를 스프링에서 제공하는 ModelAndView 객체에 저장하여 반환한다
ModelAndView : 응답관련 정보를 저장하기 위한 클래스
-> 요청에 대한 처리결과와 뷰페이지 관련 정보를 저장하여 front Controller에게 저장한다.
프론트컨트롤러 : 요청을 받는애, 요청을 분석해 알아서... 요청에 맞는 컨트롤러를 줘
커맨드컨트롤러 : 요청을 처리하는애
Spring MVC
SimpleUrlHandlerMapping : Front Controller에게 클라이언트 요청을 처리하기위한 Command Controller 클래스의 Spring Bean 객체의 beanName을 제공하기 위한 클래스
핸들러매핑 -> 디스패쳐 : 달라고해서 컨트롤러 객체를 넘겨준다.
모델앤뷰 : 처리결과와 뷰네임이 있음
- 사용자의 요청이 front Controller(dispatcherServlet)에 들어온다.
- front controller가 받은 요청정보를 처리하기위해
handlerMapping에게 정보를 넘기고 그에 맞는
컨트롤러 객체(command Controller)를 전달받는다. - command Controller(model)가 일을한다
- -> 처리결과를 model에 담고 뷰네임을 view에 담아서 돌려준다.
요청에 대한 처리결과와 뷰페이지 관련 정보를 저장하여 front Controller에게 저장한다. - ViewResolver는 사용자가 요청한 것에 대한 응답 view를 렌더링하는 역할. view 이름으로부터 사용될 view 객체를 맵핑하는 역할
5.
'일기장 > 하루 정리' 카테고리의 다른 글
220316 [수] OT , @ModelAttribute , @SessionAttribute (0) | 2022.03.16 |
---|---|
220315 [화] Annotation MVC 설정 (0) | 2022.03.15 |
220311 [금] AOP (2) | 2022.03.11 |
220310 [목] 검색 동적 Query 완성, Mapper 입력 (0) | 2022.03.10 |
220309 [수] MySql , query 짜기 (0) | 2022.03.09 |