1. 스크립트릿 (Scriptlet)

<%        %>

jsp 페이지 내에서 자바 코드 실행시 사용되는 블록

 

 

2. 표현식 (Expression)

<%=        %>

어떤 값을 출력 결과에 포함시키고자 할 때 사용

변수 또는 문자나 숫자를 직접 입력

 

 

3. 선언부 (Declaration)

<%!        %>

jsp 페이지의 스크립트릿이나 표현식에서 사용할 수 있는 함수(메소드) 작성시 사용

'BackEnd > Java' 카테고리의 다른 글

Java :: 데이터와 변수  (0) 2016.03.14
Java :: 삼항 연산자  (0) 2016.03.13
Jsp :: get vs post  (0) 2016.03.02
Java :: Iterator  (0) 2016.03.01
Java :: HashMap  (0) 2016.02.28

1. get

<a href="list.jsp?pageNo=2&id=admin&password=1234"></a>

<form method="get" action=" " name=" "> </form>

http://localhost/example/list.jsp?pageNo=2&id=admin&password=1234

 

클라이언트로부터 데이터를 이름 + 값이 결합된 스트림 형태로 전달함

각 이름과 값의 쌍은 &을 이용하여 구분

웹브라우저의 주소 입력란에 직접 입력해도 데이터를 서버로 전송 가능

데이터를 쿼리의 일부로 전달

기본적으로 DB에 대한 질의어 데이터와 같은 요청 자체를 위한 정보

데이터 용량이 클 시 데이터가 절단됨(초과된 용량의 데이터만큼)

=> URL로 전달되기 때문에 255자 이상은 절단

퍼머링크로 사용 가능

아무리 hidden 타입을 써서 전송해도 get방식으로 보내면 url에 전부 노출되어 버린다.

 

* 퍼머링크 : 정보를 식별하는 고유 식별자. 고유 주소 체계

* 이클립스에서 get방식 한글 인코딩이 깨질 시에는 이클립스의 server.xml을 수정해줘야 한다.

 

 

2. post

<form method="post" action=" " name=" "> </form>

http://localhost/example/list.jsp

 

클라이언트와 서버간 상호 정의되어 있는 형식대로 값을 인코딩한 뒤 다음 서버로 전송

내부의 구분자가 각 파라미터(이름 + 값)을 구분

백엔드 프로그램에 사용

서버 : 전달된 스트링을 디코딩 > 각 파라미터 구분 > 필요한 값들을 추출

클라이언트로부터의 데이터가 HTTP 헤더에 포함되어 전송됨

브라우저의 주소 입력란에 내용이 나타나지 않음

특정 페이지로 많은 양의 파라미터를 전송하거나 보안상 노출되어선 안되는 파라미터를 전송하는 경우

(일정한 크기 이상의 데이터 전송시 사용)

get 방식에 비해 처리 속도가 다소 늦음

퍼머링크로 사용 불가

charset 설정으로 데이터 인코딩 가능

보통 form을 이용하여 submit 하는 형태를 갖출 때 사용

'BackEnd > Java' 카테고리의 다른 글

Java :: 삼항 연산자  (0) 2016.03.13
Jsp :: jsp 페이지 구성 요소  (0) 2016.03.03
Java :: Iterator  (0) 2016.03.01
Java :: HashMap  (0) 2016.02.28
Java :: for문과 foreach문  (0) 2016.02.28

배열의 경우, 배열의 특정 객체를 참조하기 위해 인덱스를 이용한 참조가 바로 가능하지만 Collection은 가장 일반적인 객체의 모임이라는 의미밖에 가지고 있지 않으므로 인덱스를 가지고 원하는 객체를 찾을 수가 없다.

 

컬렉션 (ex. List, Set)이라면 Iterator의 인터페이스를 사용 가능하다.

표준화가 되어 있지 않으면 각각의 클래스에 접근이 힘들어지는데, 모든 컬렉션으로부터 접근 가능한 인터페이스

 

ArrayList<String> list = new ArrayLlist<String>();

itr = list.iterator();

처럼 뒤에 iterator()를 붙여 형을 변환한다.

 

 

 boolean hasNext()

(int형 : hasNextInt())

다음 값의 존재를 true로 리턴하고

다음 데이터가 없을 때까지 반복한다.(없을 시 false 리턴)

if나 while문에서 사용한다. (ex. while(itr.hasNext())

 Object next()

읽어올 요소가 남아있는지 확인하고

다음 데이터를 true/false로 리턴.

 void remove()

next()로 읽어온 요소를 삭제.

next() 메소드를 호출한 다음에만 호출 가능.

<Iterator 메소드 종류>

 

 

보통 메소드의 구현 순서는 hasNext() > next() > remove() 순이다.

'BackEnd > Java' 카테고리의 다른 글

Jsp :: jsp 페이지 구성 요소  (0) 2016.03.03
Jsp :: get vs post  (0) 2016.03.02
Java :: HashMap  (0) 2016.02.28
Java :: for문과 foreach문  (0) 2016.02.28
Jsp :: 자바빈 액션태그  (0) 2016.02.24

둘 다 element 식별용으로 사용되며, 특별한 경우가 아니면 보통은 id와 name을 동일하게 설정한다.

 

 

1. id

document.all.id.value

id.value

document.getElemnetById("폼id").value

 

중복으로 사용이 불가하다.

자바스크립트에서 다룰려고 지정하는 값.

id로 설정된 값은 서버 쪽의 파라미터로 넘어가지 않기 때문에 서버 쪽에서는 접근이 불가능하다.

 

 

2. Name

document.폼객체명.폼원소명.value

document.getElementsByName("name");

 

페이지 안에서 중복되어 사용할 수 있다. 그렇기 때문에 getElementsByName()으로 메소드도 중복을 허용한다.

action에 해당하는 페이지로 전달을 하는 파라미터로 쓰인다.

get/post 방식으로 값을 전달하고 싶은 태그에 사용한다(서블릿을 통하여 HttpServletRequest로 전달)

form 객체들 (ex. input, radiobox, checkbox)에 전송되는 파라미터의 key 값으로 사용된다.

request.getParameter(name)으로 값을 가져온다.

 

같은 name이 여러개일 경우에는 배열의 형태로 가져올 수 있다.

 

 

* input 태그 지정시에는 id와 name 두가지 모두 사용 가능

1. 정의

key값과 value값을 하나의 쌍으로 관리하므로 Enumeration이나 Iteration 개체를 사용하여 데이터를 추출하지 않고 해당 키에 대한 데이터 값을 추출하는 Connection

 

 

2. 장점

동기화가 포함되지 않으므로 HashTable에 비해 속도가 빠름

 

 

3. 단점

value값의 중복은 허락하지만 key값의 중복은 허락하지 않으므로 null을 가지는 key가 두개일 수는 없다.

 

 

4. 메소드 종류

 

 put(key, value)

put(기존 key, 다른 value)

삽입

기존 key를 다른 value값으로 수정(가능)

get()

지정 키에 해당하는 데이터 value값을 반환

containsKey(key)

지정 키가 존재하는지의 여부를 true / false로 반환

 containsValue(value)

지정 value가 존재하는지의 여부를 true / false로 반환

size() 

HashMap 객체의 요소 갯수를 반환

 isEmpty() 

HashMap이 비어있는지의 여부를 true / faluse로 반환

 

 

'BackEnd > Java' 카테고리의 다른 글

Jsp :: get vs post  (0) 2016.03.02
Java :: Iterator  (0) 2016.03.01
Java :: for문과 foreach문  (0) 2016.02.28
Jsp :: 자바빈 액션태그  (0) 2016.02.24
Servlet :: Servlet 과 Servlet Container 정의  (0) 2016.02.23

1. for 문

for (초기화식; 조건식; 업데이트식) {

     실행부분;

 

1
2
3
4
5
6
7
8
9
10
11
package com.java.example;
 
public class ForTest_Main {
    public static void main(String[] args) {
//        일반 for문
        int array[] = {1020304050};
        
        System.out.println("console> array.length : " + array.length);
        
        for (int i = 0; i < array.length; i++)
            System.out.println("console> array[i] : " + array[i]);

    } 

cs

 

- 반복적인 업무를 처리하기 위한 배열. ArrayList 등과 함께 자주 사용됨.

- for 문에서 이용하는 변수는 배열 인덱스로 겸용하여 쓰여지는 경우가 많음.

 

 

2. foreach 문

for (변수타입 변수이름 : 배열이름) {

     실행부분;

} 

 

1
2
3
4
5
6
7
8
9
10
11
12
package com.java.example;
 
public class ForTest_Main {
    public static void main(String[] args) {
//        for each문
        int array[] = {1020304050};
        
        System.out.println("console> array.length : " + array.length);
        
        for (int number : array)
            System.out.println("console> number : " + number);
    }

cs

 

- 배열 요소의 갯수에 맞게 loop를 돌림.

- 배열 요소 갯수를 몰라도 간단히 for loop를 돌릴 수 있음 (enum 타입에도 사용 가능).

- 오직 배열의 값을 가져오는 것만 가능(read), 수정 불가(write).

- JDK 5.0 버전부터 foreach 지원.

- 반복 횟수를 임의로 주는 형태가 아닌 경우에만 사용이 가능(무조건 1스탭씩 순차적으로 반복하는 경우만 사용 가능)

- 배열 이름 부분에는 Array, Collection, Iterable<E>를 상속받은 객체 또한 가능.

 

'BackEnd > Java' 카테고리의 다른 글

Java :: Iterator  (0) 2016.03.01
Java :: HashMap  (0) 2016.02.28
Jsp :: 자바빈 액션태그  (0) 2016.02.24
Servlet :: Servlet 과 Servlet Container 정의  (0) 2016.02.23
Java :: java version과 eclipse project version 똑같이 맞추기  (0) 2016.02.17

1. 정의

sql 묶음

하나의 논리적 작업 단위로 수행되는 일련의 연산 집합. DB 작업의 단위

다양한 데이터 항목들을 액세스하고 갱신하는 프로그램 수행의 단위가 됨

 

단일 쿼리로는 해결할 수 없는 로직을 처리할 때 필요한 기술

2개 이상의 퀴리를 하나의 Connection으로 묶어 DB에 전송하고 에러가 발생할시 원상태로 복구함 (All or Nothing)

 

한 개 이상의 쿼리에서 동일한 Connection 객체를 공유하게 되는데, 자바에서는 DB 연결시 java.sql.Connection 객체를 이용했던 반면 트랜잭션에서는 Connection autoCommit() 이라는 메소드가 존재하여 개발자가 직접 커넥션에 대해 커밋을 수동으로 관리할 수 있음 (autoCommit default : true)

=> 개발자가 직접 commit과 rollback을 자유자재로 조절 가능

 

commit() : 해당 커넥션 요청을 완료한 후 에러가 없으면 그 결과를 DB에 반영하는 것

  rollback() : 해당 커넥션을 수행 중 에러가 발생할 시 모든 과정을 취소하고 DB를 커넥션 수행 전 상태로 변경하는 것

 

* Spring framework는 다이나믹 프록시 + AOP 기술을 사용하기 때문에 크게는 인터페이스 단위까지 트랜잭션을 컨트롤할 수 있음. 거기에 애노테이션 기술로 @Transaction을 설정하는 것 만으로 트랜잭션 설정을 가능하게 함

 

트랜잭션은 ACID 성질이라고 하는 4가지 조건으로 설명됨

 

 

2. 트랜잭션의 필수 조건 4가지 (ACID)

 명칭

 설명

 원자성(Atomic)

 - 더이상 분류할 수 없는 작업 단위여야 함

 - 모든 데이터 수정 작업이 수행되거나, 하나도 수행되지 말아야 함

 일관성(Consistency)

 - 완료된 트랜잭션의 모든 데이터는 일관적이어야 함

 - 관계형 DB에서는 트랜잭션 수정에 모든 규칙을 적용하여 모든 데이터 무결성을 유지해야 함

 - 트랜잭션 마지막에는 B-tree 인덱스 또는 이중 연결 목록 등 모든 내부적 데이터 구조를 반드시 수정해야 함

 독립성(Isolation)

 - 동시 트랜잭션에 의한 수정은 다른 동시 트랜잭션에 의한 수정과 격리되어야 함

 - 트랜잭션에서 다른 동시 트랜잭션이 수정하기 전 상태의 데이터를 보거나, 두번쨰 트랜잭션이 완료된 후의 데이터를 볼 수는 있으나 중간 상태는 볼 수 없음

 => 결과적으로 시작 데이터를 다시 로드하고 일련의 트랜잭션을 재생하여 원래 트랜잭션이 수행된 후의 상태로 데이터를 되돌릴 수 있는데, 이를 순차성이라고 함

 지속성(Durabillity)

 - 트랜잭션 완료 후 그 영향이 영구적으로 시스템에 적용되어야 함

 - 수정은 시스템에 오류가 발생한 경우에도 지속됨

 

 

3. DBMS 구성

ㄱ. 질의 처리기 (Query Processor) : 상부 구성.

ㄴ. 저장 시스템 (Storage System) : 하부 구성. MySQL의 경우 InnoDB/MyISM 등과 같이 여러 하부 저장 시스템

선택 가능

 

* MySQL : 상부의 질의 처리기와 하부의 저장 시스템이 명확하게 구분되는 계증 구조에 해당됨

 

 

4. 트랜잭션이 종료되는 경우

ㄱ. 쿼리가 정상으로 수행되어 commit을 통해 종료되는 경우

ㄴ. 잘못된 입력 or 일관성 제약 조건 위배 등 사용자 요청에 의해 철회되는 경우

ㄷ. time out or 교착 상태 등 시스템이 감지하는 문제로 DBMS가 철회되는 경우

 

DB 시스템은 비휘발성 저장 장치인 디스크에 데이터를 저장하며, 전체 DB의 일부분을 메인 메모리에 유치시킴

DBMS는 데이터를 고정 길이의 페이지로 저장하며 디스크에서 읽거나 쓸 때 페이지 단위로 입출력이 이루어짐

 

메인 메모리에 유치되는 페이지들을 관리하는 모듈을 페이지 버퍼(Page buffer) 또는 관리자 버퍼라 부르는데, DBMS의 주요 모듈 중 하나임

 

 

5. 트랜잭션 복구시 버퍼 관리 정책

 종류

 설명

 UNDO 복구

 - 해당 트랜잭션이 어떤 이유든 정상적으로 종료할 수 없게 되면 트랜잭션이 변경했던 페이지들이 그 이전 상태로 원상 복구되는 것

 - STEAL / -STEAL 2가지가 존재함

 REDO 복구

 - UNDO 복구의 반대

 - 커밋한 트랜잭션 수정은 어떤 경우에도 유지되어야 함

 - 이미 commit한 트랜잭션의 수정을 재반영하는 복구 작업

 - FORCE / -FORCE 2가지가 존재함

DBMS는 버퍼 관리 정책으로

UNDO 복구의 STEAL : 수정된 페이지를 언제든지 디스크에 쓸 수 있음

REDO 복구의 -FORCE : 수정했던 페이지를 트랜잭션 commit 시점에서 디스크에 반영하지 않음

두 개를 채택하고 있어 UNDO + REDO 복구 두 가지가 모두 다 필요함

 

 

6. 로그 (Log)

UNDO 복구와 REDO 복구를 사용하기 위해 가장 널리 쓰이는 구조

로그는 로그 레코드의 모음으로 이루어짐. DB의 모든 갱신 작업을 기록함. 이론적으로는 가장 안정적인 저장 매체에 기록됨

 

로그는 덧붙이는(append) 방식으로 기록되며, 각 로그 레코드는 고유 식별자를 가짐

항상 뒤에 덧붙이는 방식으로 쓰이기 때문에 로그 식별자는 단조 증가함

 

* 레코드 고유 식별자 : LSN (Log Sequence Number) or LSA (Log Sequence Address)로 불림

 

기록할 Object 타입에 따라 물리적 / 논리적 로깅으로 분류됨

 

* 물리적 상태 로깅 (Physical State Logging) : DBMS에서 가장 널리 쓰이는 기본적인 로깅 방법

* 로그 버퍼 : DBMS가 로그 레코드 관리를 위해 유지하는 별도의 버퍼

성능을 위해 로그 버퍼에 로그 레코드를 모았다가, block 단위로 로그 파일에 출력함

 

* 더티 페이지 (Dirty Page)

- 데이터 캐시에서는 변경되었지만 데이터 파일 (*.mdf)에서는 아직 변경되지 않은 데이터(페이지)

- 더티 페이지가 데이터 파일에 성공적으로 적용된 후 체크포인트가 설정됨

hidden이 가지는 value 값의 name 변수를 현재 파일에서 보여주지 않고 form문의 action에서 주어진 곳으로 넘어가게 해주는 것 (보통 form문과 함께 쓰인다)

넘겨받은 값을 다시 다른 페이지로 넘길 때 사용하면 유용

 

화면에 출력되는 부분이 아니라 제작할 때에는 영향을 미치지 않지만 폼을 서버로 전송할 때 함께 전송함

 

사이트에서 회원가입시 사용자가 정보를 입력하는 폼 요소들 외에 가입 날짜, 경로 등 사용자가 따로 입력하지 않아도 알게 되는 내용들을 hidden 필드로 적용한다 (ex. 회원가입시 사용자의 ip 주소를 받는 경우 hidden 필드에 넣음)

 

value 값이 없으면 null이 아닌 공백이 들어간다

form 태그의 내용 전달 버튼 등의 중요 속성을 통해서만 동작함 (radio 속성 등에는 반응하지 않음)

 

 

 

<input type="hidden"    name="이름"    value="값">

 

 

* name="이름" : 식별자. 넘겨지는 값의 변수명

   value="값" : 넘겨지는 값 (ex. <%=person.getId() %>)

1. 정의

html만으로는 하지 못하는 일을 도와주는 보조 수단

독립된 응용 프로그램의 형태를 지니지 못하는 스크립트 언어(완벽한 문법적 구조를 가지지 못함)

객체를 이용하여 프로그래밍 하는 객체 기반 언어

확장성 있는 네트워크 어플리케이션 개발에 사용되는 소프트웨어 플랫폼

 

 

2. 장점

html 소스 속에 끼워 컴파일 과정 없이 그대로 브라우저로 실행이 가능 (인터프리터 언어)

변수에 대한 특정 자료형을 선언하지 않고도 사용이 가능

유닉스, 리눅스, 윈도우 제한 없이 사용 가능

타 언어에 비해 배우기가 쉽고 이해가 쉬움

객체를 정의하여 사용할 수 있음

 

 

3. 단점

소스 코드가 노출되어 보안 유지가 불가능

객체가 한정되어 있기 때문에 인터넷 게임과 같은 다양하고 고난이도의 프로그램은 작성 불가능

웹 브라우저에서만 인식 가능

객체를 정의하여 사용할 수는 있으나 클래스를 정의하거나 클래스 상속은 불가능

1. 자바빈

프로그래머가 jsp 페이지에 자바 코드를 입력했을 때, 디자이너 입장에서는 해석하기가 어려워지고 비효율적이다.

이런 비효율적인 부분인 지원하기 위해 제공되는 기능의 형태가 jsp 액션 태그.

jsp 페이지의 디자인과 로직 부분을 나눔으로서 복잡한 자바 코드는 줄이고 프로그램의 재사용성을 증가시킨다.

자바 클래스의 객체를 생성하여 jsp 내의 원하는 데이터의 저장 영역에 배치되게 하는 것

스크릿트릿에서 필요한 객체를 생성하여 사용하려면 자바 코드를 작성해야만 하는데

자바 코드를 사용하지 않고 태그를 쓰는 방법. xml 문법을 따른다

 

 

일반적인 HTML 태그처럼 보이게 하는 jsp 기술의 특별한 구문. 어떤 작업을 수행하기 때문에 액션 태그라고 한다.

클래스 파일 경로 : 클래스가 패키지 내에 소속되어 있어야만 돌아가도록 되어있다.

(ex. WEB-INF / classes / myapp / connection.class)

 

 

2. <jsp:useBean> 액션 태그

<jsp:useBean id="빈 이름"     class="자바빈 클래스 이름"    scope="범위" />

 

 

id : 생성될 자바빈 객체(인스턴스)의 이름. 생략 불가

class : 객체가 생성될 자바빈 클래스명. 자바 클래스의 풀네임 기입. 생략 불가

scope : 자바빈 객체의 유효 범위. 자바빈 객체가 공유되는 범위를 지정.

종류로는 page, session, application가 있으며 생략시에는 기본값이 page로 지정된다.

 

* useBean으로 사용되는 class는 반드시 getter, setter 메소드를 가지고 있어야 한다.

 

 

 

3. <jsp:setProperty> 액션 태그

 

<jsp:setProperty name="빈 이름"       property="프로퍼티 이름"       value="프로퍼티에 저장할 값" /> 

name : 자바빈 객체의 이름 기입. 생략 불가.

property : 프로퍼티명 기입. 생략 불가.

프로퍼티가 "*"일 경우(아스테리스크) 모든 프로퍼티 값이 세팅됨.

(form으로 넘어오는 파라미터 이름과 갯수가 프로퍼티의 이름과 갯수와 일치해야 한다)

value : 프로퍼티에 저장할 값 기입. 생략 가능

 

 

4. <jsp:getProperty> 액션 태그

 

<jsp:getProperty name="빈 이름"    property="프로퍼티 이름" /> 

 

name : 자바빈 객체의 이름 기입. 생략 불가능.

property : 프로퍼티명. 생략 불가능.

 

 

* request.getParameter()와 같은 기능이라고 볼 수 있으나 자바빈 액션 태그를 사용하는 것이 훨씬 high level의 기술이다.

+ Recent posts