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

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)에서는 아직 변경되지 않은 데이터(페이지)

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

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의 기술이다.

* 구조 : 서블릿 - 서블릿 컨테이너 - 웹서버

 

1. Servlet

웹에서 자바 프로그래밍 구현을 위해 탄생함

자바 프로그램이 서버 역할을 잘 할 수 있도록 확장해주는 것

보안성이 있고, 이식이 가능함. 사용이 쉬워서 CGI로 대체 가능

클라이언트(웹서버)의 요청에 따라 동적으로 모듈을 처리하고 그 결과를 다시 클라이언트에게 전송하는 서블릿 클래스

HTTP 프로토콜 서비스를 지원하는 Javax.http:.HttpServlet 클래스를 상속한다 (Servlet은 Container에 의해 실행되고 관리된다)

JVM에서 작동함. 서버 측 프로그램이라 브라우저를 가리지 않는다

HTML 변경시 Servlet을 재컴파일 해야 한다

 

ㄱ. 역할 : request header와 user가 보낸 데이터를 받음 > 결과 생성 > response header와 생성된 결과를 보여줌

 

ㄴ. 구성 : javax.Servlet = 보편적인 서블릿 인터페이스

javax.Servlet.http = HTTP용 서블릿 인터페이스

 

ㄷ. 자바 서블릿의 생명 주기 : public void init = 서블릿이 처음 적재될 때 호출되는 초기화 함수

   public void service = 클라이언트의 요청이 들어올 때마다 호출(doGet / doPost 호출)

   public void destroy = 서블릿이 메모리에서 해제될 때 호출되는 종료 함수

 

 

2. Servlet Container (서블릿 관리)

서블릿 생명 주기를 관리하고 요청에 따른 스레드를 생성한다

HTTP를 요청 받아서 Servlet 을 실행시키고 결과를 사용자 브라우저에게 전달해주는 기능을 가진 컴포넌트

서블릿과 웹 서버(Apache)가 서버로 통신하는 방법을 제공

멀티스레딩을 지원하여 클라이언트가 다중 요청을 알아서 처리한다

 

ㄱ. 역할 : 통신 지원

생명 주기 관리

멀티스레딩 관리

선언적 보안 관리

jsp 지원

 

ㄴ. 대표적인 컨테이너 : Tomcat, jetty, jboss etc

 

 

 

* Web Server : 웹서버로 들어온 클라이언트의 요청을 받아 컨테이너로 전송하고 웹 컨테이너의 결과값을 받아

클라이언트로 전송한다.

클라이언트가 get, post 등의 메소드를 이용하여 요청하면, 프로그램이 어떤 결과를 돌려준다.

정적인 data를 처리하는 서버.

단순 이미지나 html과 같은 리소스를 제공하는 서버 전달시 WAS보다 빠르다.

사용자의 요청을 효율적으로 처리 가능

(ex. apache)

 

 

* Web Application Server(=WAS) : 웹서버 + 웹컨테이너

다양한 기능을 컨테이너에 구현하고 다양한 역할을 수행하는 서버

넘겨받은 요청을 내부적인 연산으로 처리한 후 출력할 내용을 웹서버로 전달하여 웹서버가 다시 클라이언트로 전송한다.

동적인 data를 처리하는 서버.

DB와 연결되어 데이터를 주고받거나 프로그램으로 데이터의 조작이 필요한 경우 활용한다.(java, jsp, css 등)

(ex. apache tomcat)

 

 

* 보통 대용량의 DB가 오고 가는 곳에서는 web server와 was를 동시에 사용하는데, 그 이유는 정적인 데이터 / 동적인 데이터를 나누어서 처리할 수 있기 때문에 효율성을 극대화할 수 있어서이다(속도).

Java version과 eclipse project version이 맞지 않으면 프로젝트 실행시 컴파일 에러가 발생하곤 하는데,

소스가 잘못된 것이 아니기 때문에 자칫하면 이유를 모르고 몇 날 몇 일을 샐 수도 있다.

 

외부의 프로젝트를 import 했거나 새 프로젝트를 만들었을 시에는 작업 하기 전 무조건 버젼부터 맞추고 시작하는 편이 낫다.

 

 

1. cmd로 java와 javac version 확인

 

 

java와 javac 모두 1.8.0_71 이다. 그러므로 이클립스 상에서도 프로젝트 버젼이 1.8 이어야 한다.

 

* cd.. : 상위 폴더로 이동

  java -version : java (jdk) version 확인

  javac -version : javac (jre) version 확인

 

 

2. Properties > Project Facets

 

 

 

Project Facets에 들어가면 Java 등의 버젼을 맞출 수 있다. (일반적인 경우)

 

 

 

그러나, 위와 같이 설정이 되지 않는 경우도 있다.

아래 창에 Cannot~라고 뜨면 다른 방법으로 설정해야 한다.

 

 

3. Navigator > .settings > org.eclipse.~.facet.core.xml

 

 

Project Explorer가 아닌 Navigator로 들어가서,

프로젝트를 열고 폴더 중 .settings를 열면 여러 파일 중에 ofg.eclipse.wst.common.project.facet.core.xml 파일을 연다.

 

<installed facet="java" version="1.8"/> : java version

<installed facet="jst.web" version="3.0/> : Dynamic Web Module version

 

수동으로 직접 수정해준다.

 

 

4. Build Path > Configure Build Path > JRE System version 수정

 

 

 

 

버젼 수정을 수동으로 해주면 프로젝트에서 원인 모를 오류가 발생할 것이다.(아마도)

왜냐하면, 이미 Build Path를 한 JRE의 라이브러리 버젼이 수정되지 않았기 때문이다.

 

 

5. Edit > JRE version 수정

 

 

Execution environment 버튼을 누르고 1번에서 cmd 창으로 확인했던 javac version(jre) 과 동일한 버젼을 클릭하고 Finish를 누른다.

 

버젼을 동일하게 맞췄으면, eclipse를 종료시키고 다시 켠다.

프로젝트 이름을 변경할 때, 단순히 보이는 곳만 변경한다고 해서 변경이 된 것이 아니다.

이제부터 프로젝트 이름을 모두 변경하려 한다.

 

 

1. Project Explorer > Refactor > Rename

 

 

 

가장 기본적인 프로젝트명 변경 방법이지만 이 방법 하나로 프로젝트명이 완전히 수정되는 것은 아니다.

 

 

2. Project Explorer > Refactor > Rename Maven Artifact (필자는 현재 Maven 프로젝트임)

 

 

 

 

3. (Window > Show View > Navigator)

pom.xml > Overview > Project > name

 

 

 

 

4. (Window > Show View > Navigator)

pom.xml > Effective POM > (연보라색 칠해진 부분)

 

 

 

5. (Window > Show View > Navigator)

pom.xml > pom.xml > (연보라색 칠해진 부분)

 

 

* Navigator : 탐색기

 

이 다섯 군데를 모두 수정해야 비로소 프로젝트 이름 변경이 끝난다.

* request 기본 객체 : 웹브라우저에 웹 사이트 주소를 입력하면 웹 브라우저는 해당 웹 서버에 연결한 후, 웹 서버에

 요청 정보를 전송한다. 클라이언트가 전송한 요청 정보를 제공하는게 바로 request.getParameter() 기본 객체이다.

 

* parameter : 페이지와 페이지 간의 정보 중 다음 페이지를 읽어들일 때 필요한 정보를 넘겨주고 받는 것을 의미

 다음 페이지에서 그대로 읽어들이기 위해서도 사용하지만 DB정보 요청, 중요 로직값을 사용하는 인자 값으로도 사용된다.

 

request 객체는 웹 브라우저에서 jsp 페이지로 전달되는 정보의 모임으로 http 헤더와 http 바디로 구성된다.

웹 컨테이너는 요청된 http 메세지를 통해 HttpServletRequest 객체를 얻어내서 이로부터 사용자의 요구 사항을 얻어낸다.

 

 

1. request.getParameter() :  String 형만 주고 받을 수 있다.

request.setParameter()로 지정하고 request.getParameter()로 받아온다.

 

 

2. request.getAttribute() : String 형 이외에 int나 List 형의 값을 받을 수 있다.

기본 타입은 Object이기 때문에 반드시 형 변환이 필요하다.

request.setAttribute()로 지정하고 request.getAttribute()로 받아온다.

 

request.setAttribute("currentPage", pages); => page를 currentPage라는 이름으로 지정

request.getAttribute("currentPage"); => 이름으로 지정했던 currentPage를 가져옴

 

 

3. get 방식 vs post 방식

ㄱ. get : (ex. http://localhost:8080/insert.jsp?name=joon&address=suwon

  url 뒤에 파라미터 값을 적어주는 방식. 데이터가 외부에 노출되어 보안에 취약함

  지정된 리소스에서 데이터를 요청하여 읽을 때 사용하는 리소스

  클라이언트로부터 데이터를 이름 + 값이 결합된 String 형태로 전달받는다.

  전송할 수 있는 데이터 양은 255가지

 

ㄴ. post : (ex. http://localhost:8080/form.jsp)

html의 <form>에 객체를 담아 넘기는 방식. 주로 사용자가 입력한 값을 넘긴다

    보안 가능. 개인정보가 담겨 있는 데이터에 주로 쓰임

    지정된 리소스에서 데이터를 처리하는 경우인 write, insert, delete인 경우에 쓰임

    클라이언트와 서버 간에 인코딩을 하여 서버로 전송한다 (클라이언트측 데이터 인코딩 => 서버측 디코딩)

    헤더를 통해 전송되는 방식, 전송할 수 있는 데이터의 양은 무제한

    get방식에 비해 처리 속도가 느리다.

 

 

4. get < post인 이유

get 방식은 데이터의 용량 제한이 있는 반면 post 방식은 용량 제한이 없고, get 방식은 예약어가 있기 때문에 불편하다.

또한, get방식은 사용자에게 값을 노출시키지 않아도 되기 때문이다.

+ Recent posts