12.10

0

jsp

목록 보기
9/39
post-thumbnail

자바스크립트 - 함수안에 함수 가능. - 클로저 개념
함수 여러개의 뎁스구조로 되어있으면 그 뎁스구조만큼 클로저가 생긴다.
지역변수 찾고 없으면 클로저 -> 전역변수 순으로 찾음.

세션타이머 - 이렇게 복잡하게 한 이유
1. 라이브러리로 쓸 수 있게 하기
2. 클로저
3. 실행순서 왜 바꿨는지

모달은 부트스트랩건데 부트스트랩이 로드되기전에 모달을 사용해서 오류났었음 -> reday function으로 묶어줌.


actionTag

useBean
1.<%%>기호 안써도 변수를 선언, 객체 생성해줌
2.그 이후에 해당 객체를 스코프에 넣어줌 - 기본으로 page에 넣음.
먼저 스코프 뒤져서 이름에 해당하는 객체 있으면 그걸 가져오고 없으면 새로 생성해줌

nullpoint가 발생할일이 없음. 오타 발생해도 새로 생성하니까.
jsp에서 nullpoint피해갈 수 있는 첫번째 방법.

너머오는 파라미터중에 property와 같은 이름 있는지 봐서 그걸로 하겠다.
지금은 거의 안씀, 나중에 el하면 이거 쓸일없음.


beanUtils, ibatis - 리플렉션


DB서버

클라이언트와 웹서버 사이에는 HTTP 프로토콜 규약만 맞추면 브라우저가 뭐든(크롬,파이어폭스..), 서버가 뭐든(아파치, 제우스..) 상관없다.
하지만 웹서버와 DB사이에는 연결이 되는 통로가 DB의 종류에 따라 달라진다.
노란색 부분은 네트워크. => socket, port가 필요하다. DB종류에 따라 port번호가 바뀐다.
=> 서버에서 연결통로를 직접 생성하면 port가 바뀔때마다 소스가 바뀌어야됨. X 그럴 수 없음
그래서 중간에 연결통로가 필요한데 그것이 드라이버이다

DB와 드라이버는 한 세트. DB가 바뀌면 드라이버도 바뀌어야됨. 그래서 드라이버를 DB파일 안에서 가져옴.
이때 서버안에서 드라이버 사용방법을 공통적으로 쓸 수 있어야 한다. 드라이버 사용방법을 정의하고 있는 것을 java.sql 패키지이다.
- connection, statement.. 다 이 패키지 안에 있는 것들!
이 패키지는 사용 방법만을 정의하고 있어서 대부분이 인터페이스로 되어있다. 구현체는 드라이버가 가지고 있다.
드라이버 - 리모컨 역할. 모든 것을 얘한테 명령해서 실행함.
그리고 이렇게 인터페이스를 제공하는 것을 퍼사드패턴(facade)이라고 한다.

오라클 - 클라이언트, 서버있음(다운받을때 나눴던거)
where sqlplus치면 클라이언트가 먼저나옴. 쿼리문이나 명령 실행할때 클라이언트가 먼저 실행됨
클라이언트는 어떤 클라이언트인지 주소 써줘야됨

  • 그래서 system@localhost라고 했던것.

오라클과 함께 주어진 드라이버들. -> 얘네를 빌드패스에 추가해서 쓰면 되는것.
하지만 지금 메이븐 쓰고 있어서 얘로 추가. 하지만 central repository에 없음. 오라클에서 공개 안함.
-> 다른 커스텀?애들한테서 빌려쓰자.

mvmrepository 사이트에서 jar파일 다운받기

버전 상관없음. 아무거나. 이거 쓰려고 하는게 아니라 이 안의 ojdbc6쓰려고 하는거라

이 다음부터 com - oracle - ojdbc6-버전선택
-> groupId, artifacId, version이 되는것

이클립스 dependency에 추가해준다.

central repository말고 mvm사이트를 새로운 repository로 등록해줘서 여기서도 찾을 수 있게 해줬다.

버추얼머신은 이런 jar파일 있는거 모름. 자기가 원래 가지고 있던게 아니라
->2. 드라이버 클래스 로딩해야됨
1.은 드라이버 다운받은것.

jar 파일의 클래스패스가 라이브러리에 저렇게 되있어서

경로를 이렇게 써 줬던것!


JDBC(Java DataBase Connectivity)

  1. driver를 빌드패스에 추가. 리모컨 찾음
  2. driver loading . 리모컨 있다고 알려줌
  3. Connection 생성
  4. Query 객체- 쿼리 날아다주는 배달원
    1) Statement
    2) PreparedStatement
    3) CallableStatement
  5. Query 실행 DML(SELECT, INSERT, UPDATE, DELETE)
    1) ResultSet executeQuery() - ibatis:queryfor
    2) int executeUpdate()
  6. ResultSet 활용 - 데이터베이스에서 데이터 조회할때 커서형태로. 그 커서를 가져오기 위해..
  7. 자원 해제. close()

지금 작성하고 있는 소스는 가짜소스! 실제는 work의 jsp servelt에서 만들어지니까. 그래서 SQLException처리 안해도 빨간줄 안생기지만 혹시 모르니까 예외처리 해줌. 그리고 나중에 connection, statement 얘네들 close해야되니까 try-with 구문으로 해줌

db는 커서형태로 가져옴. 그래서 resultSet-set에다 저장한것.(인덱스 없음) 그런데 맨처음에 커서가 컬럼명에 있음->그래서 while문에 rs.next()해준것


VO - lombok

!!!!!!!!!!!!!!!!!!!컴파일하려면 이클립스가 --있어야됨..?

그래서 플러그인필요

lombok 사이트에서 플러그인 다운받고 콘솔에서 설치

이클립스 ini파일 열면 이 플러그인 가지고 있어야됨

이클립스에 dependency 추가해준다.

  • @EqualsAndHashCode(of={"property_name"}) : property_name이 같으면 같은 객체로 판단하겠다.
    어노테이션 종류 3가지
    - 마커
    - 싱글
    - 멀티. 위에건 멀티. ()안에 필요한것 추가
  • @ToString(exclude= {"bytes"}) : bytes는 제외하고 객체상태 확인하겠다.
  • @Data : Getter, Setter, Equals, ToString 한번에 만들어주는 것
  • @NoArgsConstructor : 기본생성자. 이거 없으면 ibatis는 이 VO 못써먹음
  • @AllArgsConstructor : Builder를 위한 프로퍼티 다 가지고 있는 생성자. @NoArgsConstructor 추가하면 다 가지고 있는 생성자 없어져서 @Builder에서 에러남.
    @Builder : 빌드패턴 적용

★ 중요!
ToString할때 무조건 쓰지 말고 제외시킬것 잘 보고 해야된다!
위 예제처럼 byte[]이 있는데 만약 1GB라면?
toString 기록하거나 직렬화, 마샬링할때 그것만 하다 끝날 수 있음. 로딩할 때 문제생길 수 있다.
->

  • exclude 추가
  • 직렬화 배제 transient
  • 마샬링 배제 @JsonIgnore

Outline보면 getter, setter등 다 만들어져 있음!

lombok은 어떻게 property보고 이런것들 만들까?
lombok - 자바빈규약에 의해 등록함
-> 이 클래스 안에 어떤 프로퍼티 있는지 동적으로 찾을수있어야됨 - 이때 사용하는 기술이 리플렉션

equals - property같으면 같은 객체로 판단하겠다. 없으면 주소값 비교해서 다 다른객체로 나옴.

숙제 - 리플렉션 어떤건지 찾아보기

0개의 댓글